15位和18位身份證的正規表示式及其驗證

2021-06-18 05:52:55 字數 2553 閱讀 7428

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位的身份證,並且包含生日和校驗位的驗證。   

//如果有興趣,還可以加上身份證所在地的驗證,就是前6位有些數字合法有些數字不合法。

function isidcardno(num)

$)|(^\d([0-9]|x)$)/.test(num)))   

//校驗位按照iso 7064:1983.mod 11-2的規定生成,x可以認為是數字10。

//下面分別分析出生日期和校驗位

var len, re;

len = num.length;

if (len == 15)

)(\d)(\d)(\d)(\d)$/);

var arrsplit = num.match(re);

//檢查生日日期是否正確

var dtmbirth = new date('19' + arrsplit[2] + '/' + arrsplit[3] + '/' + arrsplit[4]);

var bgoodday;

bgoodday = (dtmbirth.getyear() == number(arrsplit[2])) && ((dtmbirth.getmonth() + 1) == number(arrsplit[3])) && (dtmbirth.getdate() == number(arrsplit[4]));

if (!bgoodday)

else

num += arrch[ntemp % 11];   

return num;   

}   

} if (len == 18)

)(\d)(\d)(\d)(\d)([0-9]|x)$/);

var arrsplit = num.match(re);

//檢查生日日期是否正確

var dtmbirth = new date(arrsplit[2] + "/" + arrsplit[3] + "/" + arrsplit[4]);

var bgoodday;

bgoodday = (dtmbirth.getfullyear() == number(arrsplit[2])) && ((dtmbirth.getmonth() + 1) == number(arrsplit[3])) && (dtmbirth.getdate() == number(arrsplit[4]));

if (!bgoodday)

else

valnum = arrch[ntemp % 11];

if (valnum != num.substr(17, 1))

return num;

} }

return false;

}  

3、嚴格的驗證:

var acity=

function cidinfo(sid)(d|x)$/i.test(sid))return false;

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

if(acity[parseint(sid.substr(0,2))]==null)return "error:非法地區";

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

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

if(sbirthday!=(d.getfullyear()+"-"+ (d.getmonth()+1) + "-" + d.getdate()))return "error:非法生日";

for(var i = 17;i>=0;i --) isum += (math.pow(2,i) % 11) * parseint(sid.charat(17 - i),11)

if(isum%11!=1)return "error:非法證號";

return acity[parseint(sid.substr(0,2))]+","+sbirthday+","+(sid.substr(16,1)%2?"男":"女") }

document.write(cidinfo("380524198002300016"),"

");

document.write(cidinfo("340524198002300019"),"")

document.write(cidinfo("340524197711111111"),"")

document.write(cidinfo("34052419800101001x"),"

");

< /script>

身份證15位公升18位

六位數字位址碼 八位數字出生日期碼 三位數字順序碼 順序碼的奇數分給男性,偶數分給女性 一位數字校驗碼 校驗碼是根據前面十七位數字碼,按照iso 7064 1983.mod 11 2校驗碼計算出來的檢驗碼 1 多了年數 第6位開始多了19表示完整的出生日期 2 多了最後一位校驗碼 ai wi mod...

15位身份證補全為18位身份證演算法

一 15位身份證和18位身份證號碼結構介紹 要進行身份證號碼的驗證,首先需要了解我國身份證號碼的編碼規則。我國身份證號碼多由若干位數字或者數字與字母混合組成。早期身份證由15位數字構成,這主要是在1980年以前發放的身份證,後來考慮到千年蟲問題,因為15位的身份證號碼只能為1900年1月1日到199...

身份證15轉18位

身證份15位轉18位 測試用例用 顯示部分系統人為修改,create function f cid15to18 sfz char 18 returns char 18 asbegin declare osfz varchar 18 declare i int,ai int,wi int,sum in...