Berikut ini adalah kode verifikasi validitas menggunakan JS sesuai dengan aturan pengkodean Nomor ID.
Kode IDCard-Validate.js adalah sebagai berikut:
Salinan kode adalah 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,' laki-laki laki-laki
*/
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, "");
}
Versi 2 yang diperbarui
Salinan kode adalah sebagai berikut:
Function CheckIdCard (NUM)
{
num = num.touppercase ();
// Nomor kartu ID adalah 15 atau 18 digit.
if (! (/(^/d {15} $) | (^/d {17} ([0-9] | x) $)/. Test (num))))
{
// Peringatan ('Panjang nomor ID yang dimasukkan tidak benar, atau nomornya tidak memenuhi persyaratan! /N15-digit nomor semuanya harus menjadi angka, dan nomor 18 digit terakhir dapat berupa angka atau X.');
mengembalikan false;
}
// Bit cek dihasilkan sesuai dengan ketentuan ISO 7064: 1983.mod 11-2, dan X dapat dianggap sebagai angka 10.
// Berikut ini menganalisis tanggal lahir dan periksa digit masing -masing
Var Len, RE;
len = num.length;
if (len == 15)
{
re = regexp baru (/^(/d {6}) (/d {2}) (/d {2}) (/d {2}) (/d {2}) (/d {3}) $ /);
var arrsplit = num.match (re);
// periksa apakah tanggal ulang tahun sudah benar
var dtmbirth = tanggal baru ('19 ' + arrsplit [2] +'/' + arrsplit [3] +'/' + arrsplit [4]);
var bgoodday;
bgoodday = (dtmbirth.getYear () == angka (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == angka (arrsplit [3])) && (dtmbirth.getDate () == n umber (arrsplit [4]));
if (! bgoodday)
{
// Peringatan ('Tanggal lahir dalam nomor ID yang dimasukkan tidak benar!');
mengembalikan false;
}
kalau tidak
{
// Konversi kartu ID 15 digit menjadi 18 digit
// Bit cek dihasilkan sesuai dengan ketentuan ISO 7064: 1983.mod 11-2, dan X dapat dianggap sebagai angka 10.
var arrint = array baru (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrch = array baru ('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);
untuk (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * arrint [i];
}
num += arrch [ntemp % 11];
Kembali Benar;
}
}
if (len == 18)
{
re = regexp baru (/^(/d {6}) (/d {4}) (/d {2}) (/d {2}) (/d {3}) ([0-9] | x ) $/);
var arrsplit = num.match (re);
// periksa apakah tanggal ulang tahun sudah benar
var dtmbirth = tanggal baru (arrsplit [2] + "/" + arrsplit [3] + "/" + arrsplit [4]);
var bgoodday;
bgoodday = (dtmbirth.getlyear () == angka (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == angka (arrsplit [3])) && (dtmbirth.getDate () == angka (nomor (3])) && (dtmbirth.getDate () == arrsplit [4]));
if (! bgoodday)
{
// alert (dtmbirth.getYear ());
// peringatan (arrsplit [2]);
// Peringatan ('Tanggal lahir dalam nomor ID yang dimasukkan tidak benar!');
mengembalikan false;
}
kalau tidak
{
// Periksa apakah kode verifikasi kartu ID 18 digit sudah benar.
// Bit cek dihasilkan sesuai dengan ketentuan ISO 7064: 1983.mod 11-2, dan X dapat dianggap sebagai angka 10.
var valnum;
var arrint = array baru (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrch = array baru ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2') ;
var ntemp = 0, i;
untuk (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * arrint [i];
}
valnum = arrch [ntemp % 11];
if (valnum! = num.substr (17, 1))
{
// Peringatan ('Kode verifikasi kartu ID 18-bit salah! Seharusnya:' + valnum);
mengembalikan false;
}
Kembali Benar;
}
}
mengembalikan false;
}