JS驗(yàn)證有效性示例
function checkIdcard(idcard){
var Errors=new Array(
"驗(yàn)證通過(guò)",
"號(hào)碼位數(shù)不對(duì)!",
"號(hào)碼出生日期超出范圍或含有非法字符!",
"號(hào)碼校驗(yàn)錯(cuò)誤!",
"地區(qū)非法!"
);
var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地區(qū)檢驗(yàn)
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
//身份號(hào)碼位數(shù)及格式檢驗(yàn)
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//測(cè)試出生日期的合法性
} else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//測(cè)試出生日期的合法性
}
if(ereg.test(idcard)) return Errors[0];
else return Errors[2];
break;
case 18:
//18位身份號(hào)碼檢測(cè)
//出生日期的合法性檢查
//閏年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//閏年出生日期的合法性正則表達(dá)式
} else {
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正則表達(dá)式
}
if(ereg.test(idcard)){//測(cè)試出生日期的合法性
//計(jì)算校驗(yàn)位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判斷校驗(yàn)位
if(M == idcard_array[17]) return Errors[0]; //檢測(cè)ID的校驗(yàn)位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}
}
相關(guān)文章
原生js實(shí)現(xiàn)購(gòu)物車(chē)邏輯和功能
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)購(gòu)物車(chē)邏輯和功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09javascript:void(0)用法及常見(jiàn)問(wèn)題分析
javascript:void(0) 在某些情況下會(huì)有瀏覽器不兼容的bug。下面我們先來(lái)看下javascript:void(0) 的基礎(chǔ)介紹及用法,然后再來(lái)看使用它會(huì)出現(xiàn)什么問(wèn)題,該怎么解決,感興趣的朋友跟隨小編一起看看吧2023-10-10js 在定義的時(shí)候立即執(zhí)行的函數(shù)表達(dá)式(function)寫(xiě)法
如果不需要顯示調(diào)用函數(shù), 讓這個(gè)函數(shù)在定義的時(shí)候就執(zhí)行的話, 該如何寫(xiě)才可以呢,接下來(lái)將詳細(xì)介紹實(shí)現(xiàn)步驟,感興趣的朋友可以了解下2013-01-01微信小程序頁(yè)面間傳遞數(shù)組對(duì)象方法解析
這篇文章主要介紹了微信小程序頁(yè)面間傳遞數(shù)組對(duì)象方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Uniapp?實(shí)現(xiàn)全民分銷(xiāo)功能原理解析
這篇文章主要介紹了Uniapp?實(shí)現(xiàn)全民分銷(xiāo)功能,本篇文章主要介紹全民分銷(xiāo)功能實(shí)現(xiàn)原理,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06JavaScript實(shí)現(xiàn)動(dòng)態(tài)刪除列表框值的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)刪除列表框值的方法,涉及javascript針對(duì)select列表框的遍歷與刪除操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08js中substr,substring,indexOf,lastIndexOf,split,replace的用法詳解
這篇文章主要介紹了js中substr,substring,indexOf,lastIndexOf,split,replace的用法詳解的相關(guān)資料,需要的朋友可以參考下2015-11-11javascript實(shí)現(xiàn)Table間隔色以及選擇高亮(和動(dòng)態(tài)切換數(shù)據(jù))的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)Table間隔色以及選擇高亮(和動(dòng)態(tài)切換數(shù)據(jù))的方法,涉及javascript表格操作及按鈕實(shí)現(xiàn)表格切換的技巧,需要的朋友可以參考下2015-05-05