一、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
微信掃一掃
支付寶掃一掃