Sql开发知识:SqlServer2000+ 身份证合法校验函数的示例代码
什么是身份证合法校验函数
身份证合法校验函数是一种用于验证身份证号码是否符合规范的函数。在Sql Server中,我们可以使用自定义函数来实现身份证号码的校验。
身份证号码校验规则
身份证号码是由18位数字和一个校验位组成。其中,前17位为数字,最后一位可能是数字或字母X。校验位的算法如下:
1. 将身份证号码的前17位分别乘以不同的系数:第一位乘以7,第二位乘以9,第三位乘以10,第四位乘以5,第五位乘以8,第六位乘以4,第七位乘以2,第八位乘以1,第九位乘以6,第十位乘以3,第十一位乘以7,第十二位乘以9,第十三位乘以10,第十四位乘以5,第十五位乘以8,第十六位乘以4,第十七位乘以2。
2. 将得到的17个乘积相加。
3. 将得到的和对11取模,得到一个余数,余数为0到10。对应关系为0、1、2、3、4、5、6、7、8、9、10分别对应1、0、X、9、8、7、6、5、4、3、2。
4. 如果身份证号码的最后一位是数字,则校验位应该与上一步得到的余数一致;如果身份证号码的最后一位是字母X,则校验位应该为X。
实现身份证号码校验的Sql函数
下面是一个用于校验身份证号码是否符合规范的函数,可以在SqlServer2000及以上版本中使用。该函数使用了上述的校验规则,通过将身份证号码的前17位与校验位进行比对来实现身份证号码的校验。
CREATE FUNCTION VerifyIDCard ( @IDCard CHAR(18) )
RETURNS BIT
AS
BEGIN
DECLARE @Valid BIT
DECLARE @i INT, @j INT
DECLARE @Coefficient TABLE ( [ID] INT IDENTITY(1,1), [Coefficient] INT )
DECLARE @Sum INT
DECLARE @CheckCode CHAR(1)
SELECT @Valid = 0
IF ( LEN(@IDCard) <> 18 )
RETURN @Valid
IF (PATINDEX('%[^0-9]%',[LEFT](@IDCard, 17)) <> 0)
RETURN @Valid
-- 获取系数
INSERT INTO @Coefficient( [Coefficient] ) VALUES(7)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(9)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(10)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(5)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(8)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(4)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(2)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(1)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(6)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(3)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(7)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(9)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(10)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(5)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(8)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(4)
INSERT INTO @Coefficient( [Coefficient] ) VALUES(2)
-- 计算校验码
SELECT @Sum = SUM( CAST([LEFT](@IDCard, @i) AS INT) * Coefficient )
FROM @Coefficient
WHERE ID + 1 <= 17
SET @CheckCode = CASE @Sum % 11
WHEN 0 THEN '1'
WHEN 1 THEN '0'
WHEN 2 THEN 'X'
WHEN 3 THEN '9'
WHEN 4 THEN '8'
WHEN 5 THEN '7'
WHEN 6 THEN '6'
WHEN 7 THEN '5'
WHEN 8 THEN '4'
WHEN 9 THEN '3'
WHEN 10 THEN '2'
END
-- 验证校验码
IF ( RIGHT(@IDCard, 1) = @CheckCode )
SET @Valid = 1
RETURN @Valid
END
如何使用身份证号码校验函数
使用身份证号码校验函数需要将身份证号码传递至该函数,并获取函数的返回值。下面是一个实例,演示如何使用身份证号码校验函数:
DECLARE @IDCard CHAR(18) = '310112197901011234'
IF dbo.VerifyIDCard(@IDCard) = 1
PRINT '该身份证号码校验通过。'
ELSE
PRINT '该身份证号码校验未通过。'
值得注意的是,该函数只能校验身份证号码的规范性,而不能保证输入的身份证号码是真实有效的。因此,在使用该函数进行身份证号码校验时,我们需要结合其他手段进行验证。例如,可以通过调用第三方验证接口来验证身份证号码的真实有效性。
结论
本文介绍了Sql Server中用于校验身份证号码是否符合规范的函数的实现方法,该函数通过比对身份证号码的前17位与校验位来判断身份证号码是否正确。该函数可以在SqlServer2000及以上版本中使用。