Rumah  >  Artikel  >  hujung hadapan web  >  JavaScript melaksanakan kemahiran kod pengesahan kad ID_javascript

JavaScript melaksanakan kemahiran kod pengesahan kad ID_javascript

WBOY
WBOYasal
2016-05-16 15:15:181200semak imbas

Maksud setiap nombor ID 18 digit

1-2 digit wilayah, wilayah autonomi atau kod perbandaran; 3-4 digit bandar peringkat wilayah, liga, kod wilayah autonomi; 5-6 digit daerah, bandar peringkat daerah, kod daerah; 7-14 digit tarikh lahir, contohnya, 19670401 mewakili 1 April 1967
Digit 15-17 ialah nombor jujukan, di mana 17 digit ialah nombor ganjil untuk lelaki dan nombor genap untuk wanita; 18 digit adalah kod semak, 0-9 dan X, dijana secara rawak oleh formula

Contoh:

340523 1980 0101 0013 Maksud nombor ID ini:

34 ialah Wilayah Anhui
05 ialah Bandar Ma’anshan

23 ialah He County

19800101 ialah tarikh lahir (1 Januari 1980)
001 ialah nombor jujukan (1 ialah nombor ganjil, mewakili lelaki)
3 ialah kod pengesahan

Kod bahagian pentadbiran

Kod bahagian pentadbiran terkini untuk daerah dan ke atas (sehingga 31 Oktober 2014)


Bandar Beijing (110000 BJ)

Bandar Tianjin (120000 TJ)

Wilayah Hebei (130000 HE)

Wilayah Shanxi (140000 SX)

Wilayah Autonomi Mongolia Dalam (150000 NM)
Wilayah Liaoning (210000 LN)
Wilayah Jilin (220000 JL)
Wilayah Heilongjiang (230000 HL)
Shanghai (310000 SH)
Wilayah Jiangsu (320000 JS)
Wilayah Zhejiang (330000 ZJ)
Wilayah Anhui (340000 AH)
Wilayah Fujian (350000 FJ)
Wilayah Jiangxi (360000 JX)
Wilayah Shandong (370000 SD)
Wilayah Henan (410000 HA)
Wilayah Hubei (420000 HB)
Wilayah Hunan (430000 HN)
Wilayah Guangdong (440000 GD)
Wilayah Autonomi Guangxi Zhuang (450000 GX)
Wilayah Hainan (460000 HI)
Bandar Chongqing (500000 CQ)
Wilayah Sichuan (510000 SC)
Wilayah Guizhou (520000 GZ)
Wilayah Yunnan (530000 YN)
Wilayah Autonomi Tibet (540000 XZ)
Wilayah Shaanxi (610000 SN)
Wilayah Gansu (620000 GS)
Wilayah Qinghai (630000 QH)
Wilayah Autonomi Ningxia Hui (640000 NX)
Wilayah Autonomi Uygur Xinjiang (650000 XJ)
Wilayah Taiwan (710000 Tw)
SAR Hong Kong (810000 HK)
Macau SAR (820000 Bln)

Kaedah pengiraan digit ke-18 kad pengenalan (kod semak)
Darabkan 17 digit pertama nombor ID dengan pekali yang berbeza; Pekali dari kedudukan pertama hingga ketujuh belas ialah: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
Tambahkan hasil darab nombor dan pekali 17 digit ini; Bahagikan hasil tambah dengan 11 untuk melihat bakinya

Baki hanya boleh 11 nombor: 0-1-2-3-4-5-6-7-8-9-10

Nombor ID terakhir yang sepadan ialah 1-0-X-9-8-7-6-5-4-3-2
Daripada perkara di atas, kita tahu bahawa jika bakinya ialah 2, angka Rom X akan muncul pada digit ke-18 kad pengenalan. Jika bakinya ialah 10, nombor terakhir pada kad pengenalan ialah 2.
Contoh:
Nombor ID lelaki tertentu ialah 340523198001010013. Kita perlu melihat sama ada kad pengenalan ini adalah kad pengenalan yang sah.

Mula-mula kita mendapat jumlah produk bagi 17 digit pertama:
(3*7+4*9+0*10+5*5+2*8+3*4+1*2+9*1+8*6+0*3+0*7+1*9+0 *10+1*5+0*8+0*4+1*2) = 185
Kemudian minta baki:
185 % 11 = 9
Akhirnya, melalui peraturan yang sepadan, kita boleh tahu bahawa nombor yang sepadan dengan baki 9 ialah 3. Oleh itu, ia boleh ditentukan bahawa ini adalah nombor ID yang layak.


JavaScript untuk mengesahkan kad ID 18 digit




Salin kod

Semak dahulu sama ada bilangan digit ialah 18 digit:


Kemudian semak sama ada dua digit pertama ialah wilayah sah (kawasan perbandaran/autonomi):

if(!/^\d{17}(\d|x)$/i.test(ID)) return false;
// \d  匹配数字
// ^  匹配开始
// $  匹配结尾
// i  不区分大小写
// {17} 匹配17次
// \d|x 匹配数字或x
// Kaedah stringObject.substr(mula,panjang) boleh mengekstrak bilangan aksara yang ditentukan bermula dari subskrip permulaan dalam rentetan

// Selain menggunakan sintaks titik (.) semasa mengakses sifat objek, anda juga boleh menggunakan kurungan segi empat sama ([]) Penggunaan kurungan segi empat sama adalah lebih fleksibel

if(city[ID.substr(0,2)] === undefined) return "非法地区";
Kemudian semak sama ada tarikh lahir itu sah:



Akhirnya tentukan sama ada kod semak itu betul:

var birthday = ID.substr(6, 4) + '/' + Number(ID.substr(10, 2)) + '/' + Number(ID.substr(12, 2));
var d = new Date(birthday);
var newBirthday = d.getFullYear() + '/' + Number(d.getMonth() + 1) + '/' + Number(d.getDate());
var currentTime = new Date().getTime();
var time = d.getTime();
if(time >= currentTime || birthday !== newBirthday) return '非法生日';
// 获取身份证的年月日,然后再 new 一个 Date,再对比这两个日期是否一致
// 这里用Number()主要是因为身份证的日期是带0的,而new Date()出来的日期是不带0的,Number()之后就都不带0了
Jika pengesahan di atas diluluskan, itu adalah nombor ID yang sah;

Kod penuh

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 sum = 0, i, residue;
for(i=0; i<17; i++) {
 sum += ID.substr(i, 1) * arrInt[i];
}
residue = arrCh[sum % 11];
if (residue !== ID.substr(17, 1)) '非法证号';

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn