Berikut ini adalah kode verifikasi validitas menggunakan JS sesuai dengan aturan pengkodean Nomor ID.
Kode IDCard-Validate.js adalah sebagai berikut:
Salin kode kode sebagai berikut:
/**
* Aturan penyandian 15-bit untuk kartu ID: dddddd yymmdd xx p
* dddddd: kode regional
* yymmdd: tanggal lahir
* xx: Pengkodean kelas berurutan, tidak dapat ditentukan
* p: jenis kelamin, angka ganjil adalah laki -laki, bahkan angka adalah perempuan
* <p />
* Aturan penyandian 18-bit untuk kartu ID: dddddd yyyymmdd xxx y
* dddddd: kode regional
* yyyymmdd: tanggal lahir
* xxx: Pengkodean tipe urutan, tidak dapat ditentukan, angka ganjil adalah laki -laki, bahkan angka adalah wanita
* Y: Periksa kode, nilai digit ini dapat diperoleh melalui 17 digit pertama
* <p />
* Faktor pembobotan angka 18 digit adalah (kanan ke kiri) wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* Verifikasi bit y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* Rumus perhitungan untuk bit periksa: y_p = mod (∑ (ai × wi), 11)
* Saya adalah 2 ... 18 digit nomor ID dari kanan ke kiri;
*
*/
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // faktor pembobotan
var valideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // Nilai bit verifikasi kartu ID.10 mewakili x
function idCardValidate (idcard) {
idcard = trim (idcard.replace ( / / g, ""));
if (idcard.length == 15) {
return isValidityBrithBy15IdCard (IDCard);
} lain jika (idcard.length == 18) {
var a_idcard = idcard.split (""); // Dapatkan array kartu ID
if (isValidityBrithBy18IdCard (idcard) && isTruevalidateCodeBy18IdCard (a_idcard)) {
Kembali Benar;
} Kalau tidak {
mengembalikan false;
}
} kalau tidak {
mengembalikan false;
}
}
/**
* Tentukan apakah bit verifikasi terakhir sudah benar ketika nomor ID adalah 18 digit
* @param a_idcard ID Number Array
* @kembali
*/
Fungsi isTruevalidateCodeBy18IDCard (a_idcard) {
var sum = 0; // menyatakan variabel jumlah tertimbang
if (a_idcard [17] .tolowercase () == 'x') {
A_IDCARD [17] = 10; // Ganti kode verifikasi dengan bit terakhir x dengan 10 untuk operasi berikutnya
}
untuk (var i = 0; i <17; i ++) {
jumlah += wi [i] * a_idcard [i]; // jumlah tertimbang
}
valcodeposition = sum % 11; // Di mana mendapatkan kode verifikasi
if (a_idcard [17] == valideCode [valcodeposition]) {
Kembali Benar;
} kalau tidak {
mengembalikan false;
}
}
/**
*Menilai apakah itu pria atau wanita melalui kartu ID
* @param idcard 15/18 digit nomor ID
* @return 'female'-female'-male
*/
Fungsi MaleorFemalByIdCard (IDCard) {
idcard = trim (idcard.replace (// g, "")); // Proses nomor ID. Termasuk spasi antar karakter.
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
mengembalikan 'wanita';
}kalau tidak{
mengembalikan 'laki -laki';
}
} lain jika (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
mengembalikan 'wanita';
}kalau tidak{
mengembalikan 'laki -laki';
}
}kalau tidak{
Kembali nol;
}
// Karakter yang masuk dapat diproses secara langsung sebagai array
// if (idcard.length == 15) {
// peringatan (idcard [13]);
// if (idcard [13]%2 == 0) {
// kembalikan 'wanita';
// }kalau tidak{
// kembalikan 'laki -laki';
//}
//} lain jika (idcard.length == 18) {
// peringatan (idcard [16]);
// if (idcard [16]%2 == 0) {
// kembalikan 'wanita';
// }kalau tidak{
// kembalikan 'laki -laki';
//}
// }kalau tidak{
// return null;
//}
}
/**
* Verifikasi apakah ulang tahun dalam nomor ID 18 digit adalah ulang tahun yang valid
* @param idcard 18-bit Book ID String
* @kembali
*/
Fungsi isValidityBrithBy18IdCard (idCard18) {
var tahun = idcard18.substring (6,10);
var bulan = idcard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = tanggal baru (tahun, parsefloat (bulan) -1, parsefloat (hari));
// Gunakan Getlyear () di sini untuk mendapatkan tahun untuk menghindari masalah serangga milenium
if (temp_date.getlyear ()! = parsefloat (tahun)
|| temp_date.getMonth ()! = parsefloat (bulan) -1
|| temp_date.getDate ()! = parsefloat (hari)) {
mengembalikan false;
}kalau tidak{
Kembali Benar;
}
}
/**
* Verifikasi apakah ulang tahun di nomor ID 15 digit adalah ulang tahun yang valid
* @param idcard15 string ID buku 15-bit
* @kembali
*/
Fungsi isValidityBrithBy15IdCard (idCard15) {
var tahun = idcard15.substring (6,8);
var bulan = idcard15.substring (8,10);
var day = idcard15.substring (10,12);
var temp_date = tanggal baru (tahun, parsefloat (bulan) -1, parsefloat (hari));
// Untuk usia Anda di kartu ID lama Anda, Anda tidak perlu mempertimbangkan masalah cacing milenium dan menggunakan metode getYear ()
if (temp_date.getYear ()! = parsefloat (tahun)
|| temp_date.getMonth ()! = parsefloat (bulan) -1
|| temp_date.getDate ()! = parsefloat (hari)) {
mengembalikan false;
}kalau tidak{
Kembali Benar;
}
}
// Lepaskan kepala tali dan ruang ekor
function trim (str) {
return str.replace (/(^/s*) | (/s*$)/g, "");
}
Untuk kode di atas, dalam penggunaan jenis kelamin yang sebenarnya, Anda dapat menentukan apakah kartu ID itu valid. Jenis penilaian ini tidak dibuat dalam contoh kode ini, dan rasanya agak tidak berguna dan dapat sepenuhnya diperkaya sesuai dengan situasi dalam penggunaan aktual.