用sql实现18位身份证校验代码分享身份证校验位计算
时间:2021-07-01 10:21:17
帮助过:184人阅读
身份证校验码的计算方法
1、将前面的身份证号码17位数分别乘以不同的系数。第i位对应的数为[2^(18-i)]mod11。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
2、将这17位数字和系数相乘的结果相加;
3、用加出来和除以11,看余数是多少?;
4、余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
代码如下:
with t as(select '34052419800101001X'id from dual)
select id
from t
where exists(select 1
from dual connect by level<=length(id)-1 --17
having mod(sum(substr(id,level,1)*power(2,18-level)),11)=
case substr(id,-1,1)
when '1' then 0
when '0' then 1
when 'X' then 2
else
12-substr(id,-1,1)
end);
您可能感兴趣的文章:
- 通过SQLSERVER重启SQLSERVER服务和计算机的方法
- 利用php+mysql来做一个功能强大的在线计算器
- 在php和MySql中计算时间差的方法
- mysql 字符串长度计算实现代码(gb2312+utf8)
- SQL2005CLR函数扩展-深入环比计算的详解
- SQLSERVER 根据地图经纬度计算距离差示例
- SQL计算字符串中最大的递增子序列的方法
- SQL语句计算两个日期之间有多少个工作日的方法
- 如何计算多个订单的核销金额