我是靠谱客的博主 不安大叔,最近开发中收集的这篇文章主要介绍关于香港身份证有效性和格式的一套标准校验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前几天项目中有个input输入框要求是用户输入香港的身份证号,那这就涉及到对输入的身份证号做校验,由于香港身份证号的特殊性,我们也可以直接判断它的有效性

废话不多说,直接上代码:

 IsHKID(value) {
let pattern = new RegExp("^[a-zA-Z0-9-s()]+$");
if(""==value){
this.$scope.Rex = false;
this.$scope.IsHKID = false;
return;
}
if(!pattern.test(value)){
this.$scope.Required = false;
this.$scope.Rex= true;
return;
}else{
this.Rex = false;
let strValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (value.length<8)
{
this.$scope.IsHKID= true;
return ;
}
if (value.charAt(value.length - 3) == '(' && value.charAt(value.length - 1) == ')') {
value = value.substring(0, value.length - 3) + value.charAt(value.length - 2);
}
value = value.toUpperCase();
let hkidPat = /^([A-Z]{1,2})([0-9]{6})([A0-9])$/;
let matchArray = value.match(hkidPat);
if (matchArray == null){
this.$scope.IsHKID = true;
return;
}
let charPart = matchArray[1];
let numPart = matchArray[2];
let checkDigit = matchArray[3];
let checkSum = 0;
if (charPart.length == 2) {
checkSum += 9 * (1 + strValidChars.indexOf(charPart.charAt(0)));
checkSum += 8 * (1 + strValidChars.indexOf(charPart.charAt(1)));
} else {
checkSum += 8 * (1 + strValidChars.indexOf(charPart));
}
for (let i = 0, j = 7; i < numPart.length; i++ , j--)
checkSum += j * numPart.charAt(i);
let remaining = checkSum % 11;
let verify = '';
if(remaining==0){
verify = 0;
}else{
verify = 11 - remaining == 10 ? 'A' : 11 - remaining;
}
if (verify == checkDigit) {
this.$scope.IsHKID = false;
this.$scope.Required = false;
} else {
this.$scope.IsHKID = true;
}
}
}

可能有的人一看就蒙了,举个栗子:

香港的身份号像这样:E123456(4)

香港的身份证号组成是这样的:首位是一个字母或者两个字母 + 六个阿拉伯数字 + (字母为A或者0-9中某一个阿拉伯数字);

其实别wei6看上述代码那么长,其实逻辑很简单:

香港身份证号首位为一个字母,那么它的长度就是8位;两个字母,长度就是9位

  1. 将首字母转为字母在A至Z中的次序,A转为1,B转为2,如此类推
  2. 若括弧内为A,转为10
  3. 接下来将所有数字施加比重,比重为:
  • 双字母时,第一个字母的比重为9
  • 第二个字母或只有一个字母时比重为8
  • 第一个数字为7
  • 第二个数字为6
  • 第三个数字为5
  • 第四个数字为4
  • 第五个数字为3
  • 第六个数字为2
  • 括弧内的数字为1

4.   将数字和比重的乘积相加,得到一个和

5.  将上述得到的和➗11,得到一个余数

6. 从余数判断身份证号是否有效

再举个栗子:

比如身份证号为 C123456(9),字母C在字母表的次序为3
计算如下:3*8+1*7+2*6+3*5+4*4+5*3+6*2+9*1=110
110%11 = 0
故括弧内的数字应该为0,所以这个身份证号时无效的

总结完毕!

 

越努力,越幸运!

 

最后

以上就是不安大叔为你收集整理的关于香港身份证有效性和格式的一套标准校验的全部内容,希望文章能够帮你解决关于香港身份证有效性和格式的一套标准校验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部