導航:首頁 > 編程語言 > js身份證號驗證

js身份證號驗證

發布時間:2021-04-21 16:58:16

Ⅰ 身份證驗證js

我給你一個很強大的js校驗身份證工具方法,其中身份證號是用jquery從網頁中某個標簽里去取值的,你可以改造成傳參也行。
/*****身份證合法性驗證*****/
function checkIdCard(){
var idcard = $("#certiNbr").val();
if (idcard.replace(/\s/g, "") == "") {
$("#theAvailabilitySpan").html("請輸入證件號碼");
$("#checkButton").attr("disabled", "disabled");
return false;
}
var msg = checkId(idcard);
var code = msg.substring(0,1);

if("0" == code){
msg = msg.substring(1,msg.length);
$("#checkButton").attr("disabled", "disabled");
}
$("#theAvailabilitySpan").html(msg);
}
function checkId(idcard){

var Errors=new Array(
"身份證驗證通過!",
"0身份證號碼位數不對!",
"0身份證號碼出生日期超出范圍或含有非法字元!",
"0身份證號碼校驗錯誤!",
"0身份證地區非法!"
);
var area={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:"國外"}

var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地區檢驗
if(area[parseInt(idcard.substr(0,2))]==null){

return Errors[4];}
//身份號碼位數及格式檢驗
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}$/;//測試出生日期的合法性
} 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}$/;//測試出生日期的合法性
}
if(ereg.test(idcard)) return Errors[0];
else return Errors[2];
break;
case 18:
//18位身份號碼檢測
//出生日期的合法性檢查
//閏年月日:((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]$/;//閏年出生日期的合法性正則表達式
} 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]$/;//平年出生日期的合法性正則表達式
}
if(ereg.test(idcard)){//測試出生日期的合法性
//計算校驗位
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);//判斷校驗位
if(M == idcard_array[17]) return Errors[0]; //檢測ID的校驗位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}

}
function check(obj){

alert(checkIdcard(obj.value));

}

/********************客戶信息end********************/

Ⅱ 用js表單 驗證身份證號合法怎麼寫

<script type="text/javascript">
//--身份證號碼驗證-支持新的帶x身份證
function isIdCardNo(num)
{
var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var error;
var varArray = new Array();
var intValue;
var lngProct = 0;
var intCheckDigit;
var intStrLen = num.length;
var idNumber = num;
// initialize
if ((intStrLen != 15) && (intStrLen != 18)) {
//error = "輸入身份證號碼長度不對!";
//alert(error);
//frmAddUser.txtIDCard.focus();
return false;
}
// check and set value
for(i=0;i<intStrLen;i++) {
varArray[i] = idNumber.charAt(i);
if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
//error = "錯誤的身份證號碼!.";
//alert(error);
//frmAddUser.txtIDCard.focus();
return false;
} else if (i < 17) {
varArray[i] = varArray[i]*factorArr[i];
}
}
if (intStrLen == 18) {
//check date
var date8 = idNumber.substring(6,14);
if (checkDate(date8) == false) {
//error = "身份證中日期信息不正確!.";
//alert(error);
return false;
}
// calculate the sum of the procts
for(i=0;i<17;i++) {
lngProct = lngProct + varArray[i];
}
// calculate the check digit
intCheckDigit = 12 - lngProct % 11;
switch (intCheckDigit) {
case 10:
intCheckDigit = 'X';
break;
case 11:
intCheckDigit = 0;
break;
case 12:
intCheckDigit = 1;
break;
}
// check last digit
if (varArray[17].toUpperCase() != intCheckDigit) {
//error = "身份證效驗位錯誤!...正確為: " + intCheckDigit + ".";
//alert(error);
return false;
}
}
else{ //length is 15
//check date
var date6 = idNumber.substring(6,12);
if (checkDate(date6) == false) {
//alert("身份證日期信息有誤!.");
return false;
}
}
//alert ("Correct.");
return true;
}
function checkDate(date)
{
return true;
}
function check()
{
idnum = document.getElementById('idcard').value;
alert(isIdCardNo(idnum));

}
</script>

Ⅲ 如何用javascript正則表達式驗證身份證號

很簡單來

functionCheckCardNo(card)
{
//身份證號碼為15位或源者18位,15位時全為數字,18位前17位為數字,最後一位是校驗位,可能為數字或字元X
varreg=/(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/;
if(reg.test(card)===false)
{
alert("身份證輸入不合法");
returnfalse;
}
}

CheckCardNo('123456778');

Ⅳ JS中 身份證號驗證生日和性別的問題

function onchange(){
//這里還要加些正則表達式判斷一下,判斷輸入的是身份證格式
var len = document.getElementById("id").value.length;
if(len>=13&&len<=15){
var content = document.getElementById("id").value;
var str = content.split("");
var a;
for(var i=5;i<11;i++){
a+=str[i];
//把a轉換成生日的格式
}
document.getElementgetById("brithdate").value=a;
}
}
大致思路是這樣的,也可以用AJAX做出來

Ⅳ js判斷身份證號碼是否合法有效全國通用

如果要做到全國通用。估計有點問題。畢竟身份證是與個人的信息相互對應的。除非走專業的通道去校驗!!如果只是簡單判斷身份證是否合法有效,可以參考一下身份證號碼的構造結構。

首先看看身份證是怎麼構造的:

//首先最遲判斷身份證號碼的位數(18)
varCardNumber="";//待驗證的身份證號碼
variscard=/^d{17}([0-9]|X)$/;
if(iscard.text(CardNumber)){
//驗證身份證的"地區代碼(前6位數字,這里需要搜集各個地區的代碼...)"
if(這里校驗地區代碼){
if(這里校驗出生日期){
//校驗出生日期時,會牽扯到日歷演算法(計算某年的某月有多少天,防止用戶隨意輸入大於31的日期)
//如果判斷到這里了,就可以初步確定為"合法有效"的身份證號碼了。
//因為「校驗位」相對而言較復雜。如果樓主有意思。可以網路找資料。
}
}
}

Ⅵ 關於js中身份證的正則表達式的問題,我自己寫了一個簡單的驗證,但是

18位身份證:
先用這個表達式取出出生年份
\d{6}(\d{4})\d{8}
$1就是四位的年份,比如1986
在用這回個表達式判斷是不答是在1900-2000之間
(19\d{2}|2000)
15位身份證,這種身份證1900和2000是區分不出來的,這種身份證年份只用後兩位表示
先用這個表達式取出出生年份
\d{6}(\d{2})\d{7}
$1就是二位的年份,比如86
在用這個表達式判斷是不是在1900-2000之間
\d{2}
這是主要的方法,細節就不寫啦,呵呵,我還有活,祝你好運

Ⅶ JS驗證身份證的正則表達式

|18位身份證:
先用這個表達式取出出生年份
\d{6}(\d{4})\d{8}
$1就是四位的年份,比如1986
在用這個表達式判斷是不是在專1900-2000之間屬
(19\d{2}|2000)

15位身份證,這種身份證1900和2000是區分不出來的,這種身份證年份只用後兩位表示
先用這個表達式取出出生年份
\d{6}(\d{2})\d{7}
$1就是二位的年份,比如86
在用這個表達式判斷是不是在1900-2000之間
\d{2}

這是主要的方法,細節就不寫啦,呵呵,我還有活,祝你好運

Ⅷ js身份證驗證怎麼做

functionisCardNo(card)
{
//身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最後一位是校驗位,可能為數字或字元X
varreg=/(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/;
if(reg.test(card)===false)
{
alert("身份證輸入不合法");
returnfalse;
}
}

Ⅸ 帶表單的javascript驗證身份證號

其實就是加一個JS函數段吧。下面這段JS腳本是我用過的最完善的身份證號的驗證程序了,因為只有真正的身份證號才能被通過,你可以試的。直接復制運行。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Check card no</title>
<script type='text/javascript'>
/*
Author:yufulong
Blog:http://www.xiaoxiaozi.com
*/
var vcity={ 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:"國外"
};

checktheform = function()
{
var card = document.getElementById('card_no').value;
//是否為空
if(card === '')
{
alert('請輸入身份證號,身份證號不能為空');
document.getElementById('card_no').focus;
return false;
}
//校驗長度,類型
if(isCardNo(card) === false)
{
alert('您輸入的身份證號碼不正確,請重新輸入');
document.getElementById('card_no').focus;
return false;
}
//檢查省份
if(checkProvince(card) === false)
{
alert('您輸入的身份證號碼不正確,請重新輸入');
document.getElementById('card_no').focus;
return false;
}
//校驗生日
if(checkBirthday(card) === false)
{
alert('您輸入的身份證號碼生日不正確,請重新輸入');
document.getElementById('card_no').focus();
return false;
}
//檢驗位的檢測
if(checkParity(card) === false)
{
alert('您的身份證校驗位不正確,請重新輸入');
document.getElementById('card_no').focus();
return false;
}
alert('OK');
return true;
};

//檢查號碼是否符合規范,包括長度,類型
isCardNo = function(card)
{
//身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最後一位是校驗位,可能為數字或字元X
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
if(reg.test(card) === false)
{
return false;
}

return true;
};

//取身份證前兩位,校驗省份
checkProvince = function(card)
{
var province = card.substr(0,2);
if(vcity[province] == undefined)
{
return false;
}
return true;
};

//檢查生日是否正確
checkBirthday = function(card)
{
var len = card.length;
//身份證15位時,次序為省(3位)市(3位)年(2位)月(2位)日(2位)校驗位(3位),皆為數字
if(len == '15')
{
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19'+year+'/'+month+'/'+day);
return verifyBirthday('19'+year,month,day,birthday);
}
//身份證18位時,次序為省(3位)市(3位)年(4位)月(2位)日(2位)校驗位(4位),校驗位末尾可能為X
if(len == '18')
{
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year+'/'+month+'/'+day);
return verifyBirthday(year,month,day,birthday);
}
return false;
};

//校驗日期
verifyBirthday = function(year,month,day,birthday)
{
var now = new Date();
var now_year = now.getFullYear();
//年月日是否合理
if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
{
//判斷年份的范圍(3歲到100歲之間)
var time = now_year - year;
if(time >= 3 && time <= 100)
{
return true;
}
return false;
}
return false;
};

//校驗位的檢測
checkParity = function(card)
{
//15位轉18位
card = changeFivteenToEighteen(card);
var len = card.length;
if(len == '18')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for(i = 0; i < 17; i ++)
{
cardTemp += card.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1))
{
return true;
}
return false;
}
return false;
};

//15位轉18位身份證號
changeFivteenToEighteen = function(card)
{
if(card.length == '15')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for(i = 0; i < 17; i ++)
{
cardTemp += card.substr(i, 1) * arrInt[i];
}
card += arrCh[cardTemp % 11];
return card;
}
return card;
};

</script>
</head>
<body>
<form name="form1" method="post" action="">
<label>身份證號
<input name='card_no' type='text' id='card_no' onBlur='javascript:checktheform();'/>
</label>
<label>
<input type="submit" name="Submit" value="提交">
</label>
</form></body>
</html>

Ⅹ JS驗證:身份證號碼由15位或18位數字組成.

|^|使用分枝條件時,要注意各個條件的順序。把var regMycard=/^\d{15}$|^\d{18}$/; 改成var regMycard=/^\d{15}|\d{18}$/;那麼就只會匹配版15位的數權字。
原因是匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。不理解的話hi我或者繼續追問

閱讀全文

與js身份證號驗證相關的資料

熱點內容
電腦文件屬性打不開 瀏覽:64
word文件信息兼容模式 瀏覽:656
iphonewarranty 瀏覽:742
婁底營銷網路推廣途徑有哪些 瀏覽:86
mongodb數據文件丟失 瀏覽:940
iphone4使用大全 瀏覽:330
美萍軟體資料庫在哪個文件夾 瀏覽:668
51虛擬機的數據文件路徑 瀏覽:931
java如何鎖定sql表 瀏覽:272
全民飛機大戰黃金升級費用 瀏覽:302
臨床科室文件管理你知道多少 瀏覽:814
js訪問excel模板文件 瀏覽:766
智能互動編程是什麼 瀏覽:320
大學生編程學什麼語言 瀏覽:101
自考編程專業是什麼 瀏覽:804
大數據熱工 瀏覽:384
jstable行 瀏覽:421
js獲取標簽內容 瀏覽:519
潘多拉文件是什麼意思 瀏覽:636
word修改批註時間 瀏覽:813

友情鏈接