一、js身份證校驗規則
身份證是中國公民的唯一身份證明,使用十分廣泛。而身份證中包含的信息也十分重要。因此,根據身份證號碼的一定規則進行身份證校驗就顯得尤為重要。
在中國,每個身份證號碼由18位數字組成。前17位是地區、出生年月日、順序號,最後一位是校驗位。其中順序號是按照性別分別奇偶存儲。校驗位的計算是根據前17位數字的加權算法計算的。
二、js身份證正則驗證
在js中,可以通過正則表達式進行身份證號碼的校驗。下面是一個簡單的正則表達式,用於驗證身份證號碼是否合法:
function isChinaIDCard(str) { var regExp = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; return regExp.test(str); }
該正則表達式中,使用了三個組合正則表達式進行身份證號碼的匹配。其中,模式1匹配15位身份證號碼,模式2匹配18位身份證號碼,模式3匹配18位身份證號碼(最後一位可能是「X」)。如果身份證號碼符合以上三種模式之一,就表明身份證號碼合法。
三、js身份證識別掃描
使用掃描儀可以快速地識別身份證號碼。如果需要從圖片中獲取身份證號碼,可以通過以下步驟:
- 使用JavaScript的Image對象加載圖片;
- 將圖片轉換為Canvas元素;
- 從Canvas元素中提取圖像數據;
- 對圖像數據進行分析,識別身份證號碼。
四、js身份證正則表達式
身份證號碼的校驗需要用到正則表達式。在JavaScript中,可以使用正則表達式進行字符串匹配。例如,校驗身份證號碼的正則表達式可以表示成:
var chinaIDCardRegExp = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([012]\d|3[01])\d{3}[0-9X]$/;
該正則表達式中,使用了以下規則:
- 第1-6位表示區域,由非零數字開頭;
- 第7-10位表示出生年份,由非零數字開頭;
- 第11-12位表示出生月份,由01~12月格式表示;
- 第13-14位表示出生日期,由01~31日格式表示;
- 第15-17位表示順序號,奇數表示男性,偶數表示女性;
- 第18位表示校驗碼,是根據前17位數字根據ISO 7064:1983.MOD11-2校驗碼計算出的。
五、js校驗身份證是否合法
js中可以添加函數來校驗身份證是否合法。下面是一個校驗身份證是否合法的函數:
function isChinaIDCard(str) { var chinaIDCardRegExp = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([012]\d|3[01])\d{3}[0-9X]$/; if (!chinaIDCardRegExp.test(str)) { return false; } // Verify the check digit var i, lastDigit, total = 0; var numbers = str.split(''); for (i = 0; i < 17; i++) { total += parseInt(numbers[i], 10) * ((Math.pow(2, 17 - i)) % 11); } lastDigit = (12 - total % 11) % 11; if (lastDigit === 10) { lastDigit = 'X'; } return lastDigit.toString() === numbers[17].toUpperCase(); }
該函數中首先調用正則表達式判斷是否符合18位身份證號碼的規則,之後再使用ISO 7064:1983.MOD11-2校驗碼算法進行校驗最後一位校驗碼。
六、js身份證驗證正則表達式
js中內置了正則表達式對象RegExp,可以方便地使用正則表達式進行身份證校驗。下面是一個使用RegExp對象的示例:
function isChinaIDCard(str) { var re = new RegExp('^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])([0-2][1-9]|[1-3][0-1])\\d{3}([0-9]|X)$'); return re.test(str); }
該函數中使用了RegExp對象來創建一個身份證號碼驗證的正則表達式,其中使用了以下規則:
- 第1-6位表示區域,由非零數字開頭;
- 第7-10位表示出生年份,由非零數字開頭;
- 第11-12位表示出生月份,由01~12月格式表示;
- 第13-14位表示出生日期,由01~31日格式表示;
- 第15-17位表示順序號,奇數表示男性,偶數表示女性;
- 第18位表示校驗碼,是根據前17位數字根據ISO 7064:1983.MOD11-2校驗碼計算出的。
七、js調用身份證讀卡器
如果需要在web端調用身份證讀卡器進行身份證的讀取驗證,可以使用ActiveX組件實現。下面是一個簡單的示例:
function readIDCard() { var idCard = ""; try { var IDCard = new ActiveXObject("ZYSoft.IDCardVerify.1"); idCard = IDCard.ReadCard(); } catch (e) { alert(e.message); } return idCard; }
該函數使用了ActiveX組件「ZYSoft.IDCardVerify.1」,該組件可以讀取身份證信息並返回讀取的身份證號碼。需要注意的是,該組件只能在IE瀏覽器中使用。
八、js判斷身份證是否正確
在身份證號碼的校驗中,除了校驗碼計算之外,還需要針對身份證中各個字段進行判斷。下面是一個判斷身份證是否合法的示例:
function isChinaIDCard(str) { var chinaIDCardRegExp = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([012]\d|3[01])\d{3}[0-9X]$/; if (!chinaIDCardRegExp.test(str)) { return false; } // Verify the check digit var i, lastDigit, total = 0; var numbers = str.split(''); for (i = 0; i < 17; i++) { total += parseInt(numbers[i], 10) * ((Math.pow(2, 17 - i)) % 11); } lastDigit = (12 - total % 11) % 11; if (lastDigit === 10) { lastDigit = 'X'; } if (lastDigit.toString() !== numbers[17].toUpperCase()) { return false; } // Verify the birth date var year, month, day, birthday; if (numbers.length === 18) { year = numbers.substr(6, 4); month = numbers.substr(10, 2); day = numbers.substr(12, 2); birthday = new Date(year, month - 1, day); if (birthday.getFullYear() != year || birthday.getMonth() + 1 != month || birthday.getDate() != day) { return false; } } else if (numbers.length === 15) { year = "19" + numbers.substr(6, 2); month = numbers.substr(8, 2); day = numbers.substr(10, 2); birthday = new Date(year, month - 1, day); if (birthday.getYear() != year || birthday.getMonth() + 1 != month || birthday.getDate() != day) { return false; } } // Verify the Gender var gender = parseInt(numbers.substr(16, 1), 10) % 2 === 1 ? "男" : "女"; return true; }
該函數中,在校驗碼計算完成後,還使用了以下規則進行校驗:
- 身份證中出生年月日格式是否正確;
- 身份證中第17位是否正確表示性別。
九、js判斷身份證性別代碼
在身份證號碼中,順序號的最後一位表示性別。奇數表示男性,偶數表示女性。下面是一個根據身份證號碼獲取性別的示例:
function getChinaIDCardGender(str) { var genderCode = str.charAt(16); return genderCode % 2 === 1 ? "男" : "女"; }
該函數中,先獲取身份證最後一位順序號,之後分別判斷該數字是否為奇數或偶數,從而判斷身份證持有者的性別。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/283147.html