js检验台湾身份证是否合法

中国台湾地区的身份证称为“国民身份证”,号码一共有10位,第1位是大写的英文字母,后9位是阿拉伯数字。比如:U193683453。

一、地区编码
第一位大写的英文字母是地区编码,代表初次登记的户籍所在地,比如,U代码花莲县。每个地区编码还对应有一个两位数的验证码,用于公式验证。台湾的所有地区编码和验证码如下:
英文 县市 / 地区 验证码(数字)
A 台北市 10
B 台中市 11
C 基隆市 12
D 台南市 13
E 高雄市 14
F 台北县 15
G 宜兰县 16
H 桃园县 17
I 嘉义市 34
J 新竹县 18
K 苗栗县 19
L 台中县 20
M 南投县 21
N 彰化县 22
O 新竹市 35
P 云林县 23
Q 嘉义县 24
R 台南县 25
S 高雄县 26
T 屏东县 27
U 花莲县 28
V 台东县 29
W 金门县 32
X 澎湖县 30
Y 阳明山管理局 31
Z 连江县 33
二、数字编码
首位数字代表性别,男性为1、女性为2;最后一位数字是检验码;其它是电脑系统给码。
三、身份证验证
最后一位数字是检验码,通过公式计算得到。计算公式如下:
通算值= 首字母对应的第一位验证码+ 首字母对应的第二位验证码 * 9 + 性别码 * 8 + 第二位数字 * 7 + 第三位数字 * 6 + 第四位数字 * 5 + 第五位数字 * 4 + 第六位数字 * 3 + 第七位数字 * 2 + 第八位数字 * 1
最后一位数 =10- 通算值的末尾数。
例如,A234567893,A对应的验证码是10,最后一位数是3。通算值= 1 + 0*9 + 2*8 + 3*7 + 4*6 + 5*5 + 6*4 + 7*3 + 8*2 + 9*1 = 157,通算值的末尾数是7。则10-7=3,与最后一位数(验证码)相同,身份证号码正确。反之,A234567890的最后一位是0,就不是有效字号。

js实现:
/**
* 國民身分證統一編號:共有十位,第一位為英文字母,以後九位為數字
* L1 D1 D2 D3 D4 D5 D6 D7 D8 D9
* 計算方法:
* a. 字母L1由表(二)中,找到其代號兩位,令其為X1、X2。X1為十位,X2為個位。
* b. 計算方法:
* Y=X1 + 9 * X2 +8 * D1+7 * D2+6 * D3+5 * D4+4 * D5 + 3 * D6 + 2 * D7 + D8 +D9
* 如:M120675371 合法真实的身份证号
* 表(二)
* 序號 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
* 字母 A B C D E F G H J K L M N P Q R S T U V X Y W Z I O
* 代號 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
*
*/
function checkIdCard(idNo){
if(idNo==null||idNo==”){return JSON.parse(‘{“respCode”:”9”,”respDesc”:”空值”}’);}
if(idNo.length!=10){return JSON.parse(‘{“respCode”:”8”,”respDesc”:”國民身分證統一編號長度不正確(10)”}’);}
var eng=idNo.substring(0,1);
var num=idNo.substring(1,10);
var sex=idNo.substring(1,2);
eng=eng.toUpperCase();
var regNum = /^[0-9]+.?[0-9]* /;/////[19]+[09]] /
var regEng=/^[A-Za-z]+$/;
if (!regNum.test(num)){return JSON.parse(‘{“respCode”:”1”,”respDesc”:”國民身分證統一編號不正確”}’);}
if(sex!=1&&sex!=2){return JSON.parse(‘{“respCode”:”1”,”respDesc”:”國民身分證統一編號不正確”}’);}
if (!regEng.test(eng)){return JSON.parse(‘{“respCode”:”1”,”respDesc”:”國民身分證統一編號不正確”}’);}
//var key=[‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’J’,’K’,’L’,’M’,’N’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’X’,’Y’,’W’,’Z’,’I’,’O’];
var key=”ABCDEFGHJKLMNPQRSTUVXYWZIO”;
var value=[‘10’,’11’,’12’,’13’,’14’,’15’,’16’,’17’,’18’,’19’,’20’,’21’,’22’,’23’,’24’,’25’,’26’,’27’,’28’,’29’,’30’,’31’,’32’,’33’,’34’,’35’];
var pos=key.indexOf(eng);
if(pos==-1){return JSON.parse(‘{“respCode”:”1”,”respDesc”:”國民身分證統一編號不正確”}’);}
var x1=value[pos].substring(0,1);
var x2=value[pos].substring(1,2);
var y=parseInt(x1)+9*parseInt(x2) +8*parseInt(num.substring(0,1))+7*parseInt(num.substring(1,2))+
6*parseInt(num.substring(2,3))+5*parseInt(num.substring(3,4))+
4*parseInt(num.substring(4,5)) + 3*parseInt(num.substring(5,6))+
2*parseInt(num.substring(6,7)) + parseInt(num.substring(7,8));
var checkResult = y%10;
if((10-checkResult)==num.substring(8,9)){
return JSON.parse(‘{“respCode”:”0”,”respDesc”:”success”}’);
}else{
if(checkResult==10&&num.substring(8,9)==0){
//若取余之后的结果为0,那么末尾的数为0
return JSON.parse(‘{“respCode”:”0”,”respDesc”:”success”}’);
}else{
return JSON.parse(‘{“respCode”:”1”,”respDesc”:”國民身分證統一編號不正確”}’);
}
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值