日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql校验规则居民身份证号_身份证号规则及校验

發(fā)布時(shí)間:2024/8/1 数据库 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql校验规则居民身份证号_身份证号规则及校验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

公民身份號碼是特征組合碼,由十七位數(shù)字本體碼和一位數(shù)字校驗(yàn)碼組成。

排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼,最后一位是數(shù)字校驗(yàn)碼。

身份證最后一位是根據(jù)前面十七位數(shù)字碼,按照ISO 7064:1983.MOD 11-2校驗(yàn)碼計(jì)算出來的檢驗(yàn)碼。作為尾號的校驗(yàn)碼,是由號碼編制單位按統(tǒng)一的公式計(jì)算出來的,如果某人的尾號是0-9,都不會(huì)出現(xiàn)X,但如果尾號是10,那么就得用X來代替,因?yàn)槿绻?0做尾號,那么此人的身份證就變成了19位,而19位的號碼違反了國家標(biāo)準(zhǔn),并且我國的計(jì)算機(jī)系統(tǒng)也不承認(rèn)19位的身份證號碼。Ⅹ是羅馬數(shù)字的10,用X來代替10,可以保證公民的身份證符合國家標(biāo)準(zhǔn)。

計(jì)算方法

1、將前面的身份證號碼17位數(shù)分別乘以不同的系數(shù)。從第一位到第十七位的系數(shù)分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;

2、將這17位數(shù)字和系數(shù)相乘的結(jié)果相加;

3、用加出來和除以11,看余數(shù)是多少;

4、余數(shù)只可能有0 1 2 3 4 5 6 7 8 9 10這11個(gè)數(shù)字。其分別對應(yīng)的最后一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2;

5、通過上面得知如果余數(shù)是2,就會(huì)在身份證的第18位數(shù)字上出現(xiàn)羅馬數(shù)字的X。如果余數(shù)是10,身份證的最后一位號碼就是2;

例如:某男性的身份證號碼是34052419800101001X。我們要看看這個(gè)身份證是不是合法的身份證。

首先:我們計(jì)算3*7+4*9+0*10+5*5+...+1*2,前17位的乘積和是189

然后:用189除以11得出的結(jié)果是商17余2

最后:通過對應(yīng)規(guī)則就可以知道余數(shù)2對應(yīng)的數(shù)字是x。所以,這是一個(gè)合格的身份證號碼。

1 //驗(yàn)證身份證號,成功則返回省份編號+出生日期+性別

2 functionidentifyCard(sId){3 //省份編號

4 var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內(nèi)蒙古",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 //判斷地區(qū)編號是否合法

14 if(aCity[parseInt(sId.substr(0,2))]==null)15 return -2; //return "Error:非法地區(qū)";

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 //判斷最后一位校驗(yàn)碼是否正確

24 //身份證號的后四位的前三位是當(dāng)日出生的順序碼,奇為男,偶為女;

25 //最后一位是校驗(yàn)碼,由前17位數(shù)字乘以指定系數(shù)的結(jié)果相加,然后除以11,得到余數(shù),這余數(shù)對應(yīng)[1 0 X 9 8 7 6 5 4 3 2]中的數(shù)字。如余數(shù)是1,那么最終的校驗(yàn)碼就是0;余數(shù)是2,最終校驗(yàn)碼就是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 }

總結(jié)

以上是生活随笔為你收集整理的mysql校验规则居民身份证号_身份证号规则及校验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。