利用SQL进行身份证号码校验
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
在实际项目中,我们有时可能需要对人员的身份证号码的真实性进行测试,为此我们需要掌握身份证号码的校验原理以及测试的方法。 身份证校验原理: 身份证号码中的校验码是身份证号码的最后一位,是根据GB 11643-1999中有关公民身份号码的规定,根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码。 (1)身份证号码的组成:AAAAAA-YYYYMMDD-CCC-X 6位数字地址码 + 8位数字出生日期码 + 3位数字顺序码 + 1位数字校验码 (2)身份证第 1-17 位分别乘以对应的权重因子: (3)将乘积之和取模 11(即除以 11 取余数),然后根据下表得到对应的第 18 位校验码 其中 X 其实代表的是 10;身份证号码第 17 位代表性别,奇数为男性,偶数为女性。 测试案例: 这里我们以2022年06月09日公安部发布A级通缉令公开通缉12名电信网络诈骗集团重大头目和骨干人员的三名人员为例,来测试身份证的校验值。 具体测试SQL语句如下: WITH xx AS( SELECT idcard,( SUBSTRING(idcard,1,1)*7 + SUBSTRING(idcard,2,1)*9 + SUBSTRING(idcard,3,1)*10 + SUBSTRING(idcard,4,1)*5 + SUBSTRING(idcard,5,1)*8 + SUBSTRING(idcard,6,1)*4 + SUBSTRING(idcard,7,1)*2 + SUBSTRING(idcard,8,1)*1 + SUBSTRING(idcard,9,1)*6 + SUBSTRING(idcard,10,1)*3 + SUBSTRING(idcard,11,1)*7 + SUBSTRING(idcard,12,1)*9 + SUBSTRING(idcard,13,1)*10 + SUBSTRING(idcard,14,1)*5 + SUBSTRING(idcard,15,1)*8 + SUBSTRING(idcard,16,1)*4 + SUBSTRING(idcard,17,1)*2) % 11 AS '校验和模值' FROM tongji) SELECT idcard, RIGHT(idcard,1) AS '身份证校验值', CASE 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' ELSE '其他' END AS '审计校验值' FROM xx; 测试结果:
可以看到,身份证校验值和审计校验值是一致的。 该文章在 2024/3/18 18:49:59 编辑过 |
关键字查询
相关文章
正在查询... |