用SQL寫的18位身份證校驗代碼

身份證校驗碼的計算方法  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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章