ต่อไปนี้เป็นรหัสการตรวจสอบความถูกต้องโดยใช้ 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, "");
-
สำหรับรหัสข้างต้นในการใช้เพศจริงคุณสามารถพิจารณาได้ก่อนว่าบัตรประจำตัวประชาชนนั้นใช้ได้หรือไม่ การตัดสินแบบนี้ไม่ได้เกิดขึ้นในตัวอย่างรหัสนี้และรู้สึกไร้ประโยชน์เล็กน้อยและสามารถเพิ่มคุณค่าอย่างเต็มที่ตามสถานการณ์ในการใช้งานจริง