mysql校验规则居民身份证号_身份证号规则及校验
公民身份號碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成。
排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼,最后一位是數字校驗碼。
身份證最后一位是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。作為尾號的校驗碼,是由號碼編制單位按統一的公式計算出來的,如果某人的尾號是0-9,都不會出現X,但如果尾號是10,那么就得用X來代替,因為如果用10做尾號,那么此人的身份證就變成了19位,而19位的號碼違反了國家標準,并且我國的計算機系統也不承認19位的身份證號碼。Ⅹ是羅馬數字的10,用X來代替10,可以保證公民的身份證符合國家標準。
計算方法
1、將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為: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;
5、通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的X。如果余數是10,身份證的最后一位號碼就是2;
例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。
首先:我們計算3*7+4*9+0*10+5*5+...+1*2,前17位的乘積和是189
然后:用189除以11得出的結果是商17余2
最后:通過對應規則就可以知道余數2對應的數字是x。所以,這是一個合格的身份證號碼。
1 //驗證身份證號,成功則返回省份編號+出生日期+性別
2 functionidentifyCard(sId){3 //省份編號
4 var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江 ",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北 ",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏 ",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外 "};5
6 //判斷身份證號是否18位
7 if(!/^\d{17}(\d|x)$/i.test(sId))8 return -1;9
10 //將身份證號的x替換成a
11 sId=sId.replace(/x$/i,"a");12
13 //判斷地區編號是否合法
14 if(aCity[parseInt(sId.substr(0,2))]==null)15 return -2; //return "Error:非法地區";
16
17 //判斷出生日期是否合法
18 var sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); //如:1986-07-15
19 var d=new Date(sBirthday.replace(/-/g,"/")); //如:1986/07/15
20 if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" +d.getDate()))21 return -3;//return "Error:非法生日";
22
23 //判斷最后一位校驗碼是否正確
24 //身份證號的后四位的前三位是當日出生的順序碼,奇為男,偶為女;
25 //最后一位是校驗碼,由前17位數字乘以指定系數的結果相加,然后除以11,得到余數,這余數對應[1 0 X 9 8 7 6 5 4 3 2]中的數字。如余數是1,那么最終的校驗碼就是0;余數是2,最終校驗碼就是X
26 var iSum = 0;27 for(var i = 17;i>=0;i --)28 iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11);29 if(iSum%11!=1)30 return -4; //return "Error:非法證號";
31 birthday = ""+sId.substr(6,4)+Number(sId.substr(10,2))+Number(sId.substr(12,2));32 return ""+parseInt(sId.substr(0,2))+birthday+(sId.substr(16,1)%2?1:2); //"男":"女");
33 }
總結
以上是生活随笔為你收集整理的mysql校验规则居民身份证号_身份证号规则及校验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关.jad文件
- 下一篇: dos窗口启动mysql