ต่อไปนี้เป็นรหัสการตรวจสอบความถูกต้องโดยใช้ JS ตามกฎการเข้ารหัสหมายเลข ID
รหัส idcard-validate.js มีดังนี้:
การคัดลอกรหัสมีดังนี้:
-
* กฎการเข้ารหัส 15 บิตสำหรับบัตรประจำตัวประชาชน: dddddd yymmdd xx p
* DDDDDD: รหัสภูมิภาค
* yymmdd: วันเดือนปีเกิด
* XX: การเข้ารหัสคลาสตามลำดับไม่สามารถกำหนดได้
* P: เพศตัวเลขคี่เป็นเพศชายแม้แต่ตัวเลขก็คือเพศหญิง
* <p />
* กฎการเข้ารหัส 18 บิตสำหรับบัตรประจำตัวประชาชน: dddddd yyyymmdd xxx y
* DDDDDD: รหัสภูมิภาค
* yyyymmdd: วันเดือนปีเกิด
* xxx: การเข้ารหัสประเภทลำดับไม่สามารถกำหนดได้ตัวเลขคี่เป็นเพศชายแม้แต่ตัวเลขคือเพศหญิง
* y: ตรวจสอบรหัสค่าของตัวเลขนี้สามารถรับได้ผ่านตัวเลข 17 หลักแรก
* <p />
* ปัจจัยการถ่วงน้ำหนักของตัวเลข 18 หลักคือ (ขวาไปซ้าย) wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 4, 2, 1]
* บิตตรวจสอบ y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* สูตรการคำนวณสำหรับบิตตรวจสอบ: y_p = mod (∑ (ai × wi), 11)
* ฉันคือ 2 ... 18 ตัวเลขของหมายเลข ID จากขวาไปซ้าย;
-
-
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // ปัจจัยการถ่วงน้ำหนัก
var validecode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // ค่าบิตตรวจสอบบัตรประจำตัว
ฟังก์ชั่น idcardValidate (idcard) {
idcard = trim (idcard.replace ( / / g, ""));
if (idcard.length == 15) {
คืน ISVALITYBRITHBY15IDCARD (IDCARD);
} อื่นถ้า (idcard.length == 18) {
var a_idcard = idcard.split (""); // รับอาร์เรย์บัตรประจำตัวประชาชน
if (isValiditybrithby18idcard (idcard) && istruevalidateCodeby18idcard (a_idcard)) {
กลับมาจริง;
}อื่น {
กลับเท็จ;
-
} อื่น {
กลับเท็จ;
-
-
-
* ตรวจสอบว่าบิตตรวจสอบล่าสุดถูกต้องเมื่อหมายเลข ID คือ 18 หลัก
* @Param A_IDCARD ID หมายเลขอาร์เรย์อาร์เรย์
* @กลับ
-
ฟังก์ชั่น istruevalidateCodeby18idcard (a_idcard) {
var sum = 0;
if (a_idcard [17] .toLowerCase () == 'x') {
A_IDCARD [17] = 10; // แทนที่รหัสการตรวจสอบด้วยบิตสุดท้าย x ด้วย 10 สำหรับการดำเนินการที่ตามมา
-
สำหรับ (var i = 0; i <17; i ++) {
sum += wi [i] * a_idcard [i]; // น้ำหนักรวม
-
valcodeposition = sum % 11; // จะรับรหัสการตรวจสอบได้ที่ไหน
if (a_idcard [17] == validecode [valcodeposition]) {
กลับมาจริง;
} อื่น {
กลับเท็จ;
-
-
-
*ตัดสินว่าเป็นผู้ชายหรือผู้หญิงผ่านบัตรประจำตัวประชาชน
* @param Idcard 15/18 หลักหมายเลข
* @return 'หญิงสาว', 'ชาย'
-
ฟังก์ชั่น maleorfemalbyidcard (idcard) {
idcard = trim (idcard.replace (// g, "")); // ประมวลผลหมายเลข id รวมถึงช่องว่างระหว่างอักขระ
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
กลับ 'หญิง';
}อื่น{
กลับ 'ชาย';
-
} อื่นถ้า (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
กลับ 'หญิง';
}อื่น{
กลับ 'ชาย';
-
}อื่น{
คืนค่า null;
-
// อักขระที่เข้ามาสามารถประมวลผลได้โดยตรงเป็นอาร์เรย์
// ถ้า (idcard.length == 15) {
// Alert (Idcard [13]);
// ถ้า (idcard [13]%2 == 0) {
// กลับ 'หญิง';
// }อื่น{
// กลับ 'ชาย';
-
//} อื่นถ้า (idcard.length == 18) {
// Alert (Idcard [16]);
// ถ้า (idcard [16]%2 == 0) {
// กลับ 'หญิง';
// }อื่น{
// กลับ 'ชาย';
-
// }อื่น{
// return null;
-
-
-
* ตรวจสอบว่าวันเกิดในหมายเลขรหัส 18 หลักเป็นวันเกิดที่ถูกต้อง
* @Param Idcard สตริงรหัสหนังสือ 18 บิต
* @กลับ
-
ฟังก์ชั่น isvaliditybrithby18idcard (idcard18) {
var year = idcard18.substring (6,10);
var month = idcard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = วันที่ใหม่ (ปี, parsefloat (เดือน) -1, parsefloat (วัน));
// ใช้ getGreether () ที่นี่เพื่อให้ได้ปีเพื่อหลีกเลี่ยงปัญหาของข้อบกพร่องสหัสวรรษ
if (temp_date.getlyear ()! = parsefloat (ปี)
|| temp_date.getMonth ()! = parsefloat (เดือน) -1
|| temp_date.getDate ()! = parsefloat (วัน)) {
กลับเท็จ;
}อื่น{
กลับมาจริง;
-
-
-
* ตรวจสอบว่าวันเกิดในหมายเลขรหัส 15 หลักเป็นวันเกิดที่ถูกต้อง
* @param idcard15 สตริงรหัสหนังสือ 15 บิต
* @กลับ
-
ฟังก์ชั่น ISVALITYBRITHBY15IDCARD (IDCARD15) {
var year = idcard15.substring (6,8);
var month = idcard15.substring (8,10);
var day = idcard15.substring (10,12);
var temp_date = วันที่ใหม่ (ปี, parsefloat (เดือน) -1, parsefloat (วัน));
// สำหรับอายุของคุณในบัตรประจำตัวเก่าของคุณคุณไม่จำเป็นต้องพิจารณาปัญหาของ Millennium Worm และใช้วิธี getYear ()
if (temp_date.getyear ()! = parsefloat (ปี)
|| temp_date.getMonth ()! = parsefloat (เดือน) -1
|| temp_date.getDate ()! = parsefloat (วัน)) {
กลับเท็จ;
}อื่น{
กลับมาจริง;
-
-
// ถอดหัวสตริงและช่องว่างหาง
ฟังก์ชั่นตัดแต่ง (str) {
return str.replace (/(^/s*) | (/s*$)/g, "");
-
อัปเดตเวอร์ชัน 2
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น CheckIdCard (NUM)
-
num = num.touppercase ();
// หมายเลขบัตรประจำตัว ID คือ 15 หรือ 18 ตัวเลข
if (! (/(^/d {15} $) | (^/d {17} ([0-9] | x) $)/. ทดสอบ (NUM))))))))))))))))))))))
-
// Alert ('ความยาวของหมายเลข ID ที่ป้อนไม่ถูกต้องหรือหมายเลขไม่เป็นไปตามข้อกำหนด! /ตัวเลข N15-Digit ควรเป็นตัวเลขและหมายเลข 18 หลักล่าสุดอาจเป็นตัวเลขหรือ X. ');
กลับเท็จ;
-
// บิตตรวจสอบถูกสร้างขึ้นตามบทบัญญัติของ ISO 7064: 1983.mod 11-2 และ X ถือได้ว่าเป็นหมายเลข 10
// ต่อไปนี้วิเคราะห์วันเดือนปีเกิดและตรวจสอบตัวเลขตามลำดับ
var len, re;
len = num.length;
ถ้า (len == 15)
-
re = ใหม่ regexp (/^(/d {6}) (/d {2}) (/d {2}) (/d {2}) (/d {2}) (/d {3}) $ /);
var arrsplit = num.match (re);
// ตรวจสอบว่าวันเกิดถูกต้องหรือไม่
var dtmbirth = วันที่ใหม่ ('19 ' + arrsplit [2] +'/' + arrsplit [3] +'/' + arrsplit [4]);
var bgoodday;
bgoodday = (dtmbirth.getyear () == number (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == number (arrsplit [3]) && (dtmbirth.getDate () == n umber (arrsplit [4]));
ถ้า (! bgoodday)
-
// Alert ('วันเดือนปีเกิดในหมายเลข ID ที่ป้อนไม่ถูกต้อง!');
กลับเท็จ;
-
อื่น
-
// แปลงบัตรประชาชน 15 หลักเป็น 18 หลัก
// บิตตรวจสอบถูกสร้างขึ้นตามบทบัญญัติของ ISO 7064: 1983.mod 11-2 และ X ถือได้ว่าเป็นหมายเลข 10
var arrint = อาร์เรย์ใหม่ (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrch = อาร์เรย์ใหม่ ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' ;
var ntemp = 0, i;
num = num.substr (0, 6) + '19' + num.substr (6, num.length - 6);
สำหรับ (i = 0; i <17; i ++)
-
ntemp += num.substr (i, 1) * Arrint [i];
-
num += arrch [ntemp % 11];
กลับมาจริง;
-
-
ถ้า (len == 18)
-
re = ใหม่ regexp (/^(/d {6}) (/d {4}) (/d {2}) (/d {2}) (/d {3}) ([0-9] | x ) $/);
var arrsplit = num.match (re);
// ตรวจสอบว่าวันเกิดถูกต้องหรือไม่
var dtmbirth = วันที่ใหม่ (arrsplit [2] + "/" + arrsplit [3] + "/" + arrsplit [4]);
var bgoodday;
bgoodday = (dtmbirth.getlyear () == number (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == number (arrsplit [3])) && (dtmbirth.getDate () == หมายเลข ( arrsplit [4]));
ถ้า (! bgoodday)
-
// Alert (dtmbirth.getYear ());
// Alert (arrsplit [2]);
// Alert ('วันเดือนปีเกิดในหมายเลข ID ที่ป้อนไม่ถูกต้อง!');
กลับเท็จ;
-
อื่น
-
// ตรวจสอบว่ารหัสการตรวจสอบของบัตรประจำตัว 18 หลักนั้นถูกต้องหรือไม่
// บิตตรวจสอบถูกสร้างขึ้นตามบทบัญญัติของ ISO 7064: 1983.mod 11-2 และ X ถือได้ว่าเป็นหมายเลข 10
var valnum;
var arrint = อาร์เรย์ใหม่ (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrch = อาร์เรย์ใหม่ ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' ;
var ntemp = 0, i;
สำหรับ (i = 0; i <17; i ++)
-
ntemp += num.substr (i, 1) * Arrint [i];
-
valnum = arrch [ntemp % 11];
if (valnum! = num.substr (17, 1))
-
// Alert ('รหัสการตรวจสอบของบัตรประจำตัว 18 บิตไม่ถูกต้อง! ควรเป็น:' + valnum);
กลับเท็จ;
-
กลับมาจริง;
-
-
กลับเท็จ;
-