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

来源:互联网 发布:h618b改端口 编辑:程序博客网 时间:2024/05/01 07:07

中国台湾地区的身份证称为“国民身份证”,号码一共有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额度怎么办 微信商户号怎么办 企业Uk证书过期怎么办 加挂账号不知道怎么办 钱打到对公账户怎么办 新中付没有到账怎么办 qq把钱转错了怎么办 转账输错号码怎么办 给别人转错钱了怎么办 转账到信用卡了怎么办 银行卡限额怎么办京东 预留信息忘了怎么办 中信银行香港卡怎么办 无银行预留信息怎么办 农工商超市红利卡怎么办 余额宝转入不了怎么办 公司车辆怎么办营运证 便利店转不出去怎么办 便利店开业营业额低怎么办 现在etc超时了怎么办? 中国银行e贷逾期怎么办 招商银行e分期逾期怎么办 保单贷款还不了怎么办 离婚时按揭房怎么办 按揭房子不要了怎么办? 征信有问题怎么办房贷 夫妻一方不做房贷共还人怎么办 给你花逾期一年怎么办 文件夹密码忘记了怎么办 网址被qq拦截怎么办 手机qq邮箱中毒怎么办 邮箱附件带病毒怎么办? 打开了病毒附件怎么办? qq邮箱被拦截怎么办 邮件地址已被注册怎么办 信用卡欠款怎么办房贷 贷款还不起了怎么办 装修贷款无抵押怎么办