身份證號碼驗證js

2022-07-25 14:27:30 字數 4316 閱讀 8652

/*

功能:驗證身份證號碼是否有效

提 示資訊:未輸入或輸入身份證號不正確!

使用:validateidcard(obj)

返回:0,1,2,3

*/function

validateidcard(obj);

var isum = 0; //

var info = "";

var stridno =obj;

var idcardlength =stridno.length;

if(!/^\d(\d|x)$/i.test(stridno)&&!/^\d$/i.test(stridno))

return 1; //

非法身份證號

if(acity[parseint(stridno.substr(0,2))]==null)

return 2;//

非法地區

//15位身份證轉換為18位

if (idcardlength==15)

//判斷是否大於2023年,小於2023年

var year =stridno.substring(6,10);

if (year<1900 || year>2078)

return 3;//

非法生日

//18位身份證處理

//在後面的運算中x相當於數字10,所以轉換成a

stridno = stridno.replace(/x$/i,"a");

sbirthday=stridno.substr(6,4)+"-"+number(stridno.substr(10,2))+"-"+number(stridno.substr(12,2));

var d = new date(sbirthday.replace(/-/g,"/"))

if(sbirthday!=(d.getfullyear()+"-"+ (d.getmonth()+1) + "-" +d.getdate()))

return 3; //

非法生日

//身份證編碼規範驗證

for(var i = 17;i>=0;i --)

isum += (math.pow(2,i) % 11) * parseint(stridno.charat(17 - i),11);

if(isum%11!=1)

return 1;//

非法身份證號

//判斷是否遮蔽身份證

var words = new

array();

words = new array("11111119111111111","12121219121212121");

for(var k=0;k)

}return 0;

}

附錄:身份證號碼編碼方法

要進行身份證號碼的驗證,首先要了解身份證號碼的編碼規則。我國身份證號碼多由若干位數字或者數字與字母混合組成。早期身份證由15位數字構成,這主要是在2023年以前發放的身份證,後來考慮到千年蟲問題,因為15位的身份證號碼只能為2023年1月1日到2023年12月31日出生的人編號,所以又增加了18位身份證號碼編號規則。

15位身份證號碼編碼較為簡單,從左到右其15位碼依次為:

1     2     3     4     5    

6     7     8     9     10   11

12   13   14   15

a     a     a     a     a    

a     y     y     m    m    d

d     n    n    s

前六位aaaaaa是身份證編碼物件的所在地(出生地)的編碼,該號碼可由國家統計局公布的相關標準中得到。yy表示出生年的後兩位,mm和dd表示出生月和日,不足兩位的高位補0,nns為順序號,無法確定。s為性別識別碼,男性為奇數,女性為偶數。例如,一位於2023年2月16日出生在湖北省巴東縣的女性的15位身份證號碼為:

1     2     3     4     5    

6     7     8     9     10   11

12   13   14   15

a     a     a     a     a    

a     y     y     m    m    d

d     n    n    s

4     2     2     8     2    

3     6     5     0     2    

1     6     0     2     2

18位身份證號碼比15位身份證號碼多出的3位中的兩位用來補充2位的年份為4位,另外1位作為校驗碼存在。一項由國家質量技術監督局發布的標準對身份證號碼的編碼規則做了具體的規定。該標準為名《公民身份號碼》,編號gb11643-1999,為國家強制標準。它代替了2023年公布的名為《社會保障號碼》gb11643-1989國家強制標準,從2023年7月1日開始強制實施。該標準的內容介紹如下。

1.標準適用範圍:規定了公民身份號碼的編碼物件、號碼的具體結構組成和表現形式,並規定每個編碼物件將獲得乙個唯一的、終身不變的號碼。

2.編碼物件:具有中國人民共和國國籍的公民。

3.號碼的結構組成和表現形式。

該標準中對號碼的構造組成和表現形式進行了如下的闡述:

號碼由17位本體碼和1位校驗碼組成,這18位號碼從左到右依次為:

1     2     3     4     5    

6     7     8     9     10   11

12   13   14   15   16   17   18

a     a     a     a     a    

a     y     y     y     y    

m    m    d     d     n    n

s     c

前六位aaaaaa同樣是地區編碼,按照國家推薦標準gb/t2260的規定進行編碼。yyyy是擴充後的四位出生年碼,mm和dd為出生月和日碼,不足兩位的仍然在高位補0。nns為無法確定的順序碼,其中s為性別識別碼,同樣將奇數分配給男性,偶數分配給女性。第18位校驗位是對前17位進行如下的計算得到的。

使用陣列b[i]表示從左到右第i個數字,w[i]表示第i位上的加權因子,需要注意的是,為了方便講述,這裡的陣列第乙個是b[1]而不是計算機中的b[0],w[i]也是同樣。加權因子依次為:

1     2     3     4     5    

6     7     8     9     10   11

12   13   14   15   16   17

7     9     10   5     8     4

2     1     6     3     7

9     10   5     8     4

2得到第18位的值c首先要利用這個加權因子計算出 的值, 的計算公式為:

即,將前17位的數字與其對應的加權因子相乘,再將積相加,最後的和再除以11,取其餘。除以11最後的餘有11種可能,從0到10。通過餘再做乙個轉換,即可得到相應的第18位上的校驗碼,餘數和校驗碼的轉換如下:

餘數                    0  

1     2     3     4     5  

6     7     8     9     10

對應的校驗碼

1     0     x     9  

8     7     6     5     4  

3     2

下面我們來計算一下一位湖北省襄樊市襄城區在2023年11月9日出生的男性的18位身份證號碼,其順序號假定為321(男性為奇數)。該身份證號前17位為:

4     2     0     6     8    

2     1     9     8     6    

1     1     0     9     3    

2     1

先計算前17位與加權因子的積的和除以11的餘:

餘數為1則其對應的第18位校驗碼為0,該男性的18位身份證號碼為:

4     2     0     6     8    

2     1     9     8     6    

1     1     0     9     3    

2     1     0

校驗碼可以作為一種判斷乙個正確的身份證號的前17位是否有錯誤發生的標準,但這並不一定在任何情況下都是有效的,在某些情況下的錯誤也是這個校驗位無法檢測的,比如,多個數字發生錯誤,例如,當上例中的身份證號碼由42068219861109321變為42098219861106321後,其校驗碼仍為0。

js身份證號碼驗證

15位或18位身份證號碼驗證例子 身份證15位編碼規則 dddddd yymmdd xx p dddddd 地區碼 yymmdd 出生年月日 xx 順序類編碼,無法確定 p 性別,奇數為男,偶數為女 身份證18位編碼規則 dddddd yyyymmdd y dddddd 地區碼 yyyymmdd 出...

js驗證身份證號碼

前面定義全域性變數 var checked if checked layer.close loading return 此方法為失去焦點事件 function iscardno 1 9 d 2 d 0 1 9 1 0 2 0 1 9 1 2 0 9 3 0 1 d 0 9xx 號碼規則校驗 if f...

js驗證身份證號碼

1 簡單的正規表示式 1 preg match d d dx id card 2 preg match d 18 19 20 d 01 d 0123 d d d x id card 3 preg match d d d x x id card 2 複雜並且嚴格一些的驗證 這個可以驗證15位和18位的...