javascript Verifying the Format or Authenticity of Hong Kong Identity Card
- 2021-07-18 06:33:00
- OfStack
Not much to say, please look at the code
function IsHKID(str) {
var strValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
// basic check length
if (str.length < 8)
return false;
// handling bracket
if (str.charAt(str.length-3) == '(' && str.charAt(str.length-1) == ')')
str = str.substring(0, str.length - 3) + str.charAt(str.length -2);
// convert to upper case
str = str.toUpperCase();
// regular expression to check pattern and split
var hkidPat = /^([A-Z]{1,2})([0-9]{6})([A0-9])$/;
var matchArray = str.match(hkidPat);
// not match, return false
if (matchArray == null)
return false;
// the character part, numeric part and check digit part
var charPart = matchArray[1];
var numPart = matchArray[2];
var checkDigit = matchArray[3];
// calculate the checksum for character part
var checkSum = 0;
if (charPart.length == 2) {
checkSum += 9 * (10 + strValidChars.indexOf(charPart.charAt(0)));
checkSum += 8 * (10 + strValidChars.indexOf(charPart.charAt(1)));
} else {
checkSum += 9 * 36;
checkSum += 8 * (10 + strValidChars.indexOf(charPart));
}
// calculate the checksum for numeric part
for (var i = 0, j = 7; i < numPart.length; i++, j--)
checkSum += j * numPart.charAt(i);
// verify the check digit
var remaining = checkSum % 11;
var verify = remaining == 0 ? 0 : 11 - remaining;
return verify == checkDigit || (verify == 10 && checkDigit == 'A');
}
After searching for a long time on the Internet, I didn't have a satisfactory verification method. Finally, I found an js verification written abroad through Google, and found that it can be used.
The above section is very precise, including the verification of the authenticity of the ID card. If you only want to verify the format of the entered Hong Kong ID card, please use the following section js.
function IsHKID(str) {
var strValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
// basic check length
if (str.length < 8)
return false;
// handling bracket
if (str.charAt(str.length-3) == '(' && str.charAt(str.length-1) == ')')
str = str.substring(0, str.length - 3) + str.charAt(str.length -2);
// convert to upper case
str = str.toUpperCase();
// regular expression to check pattern and split
var hkidPat = /^([A-Z]{1,2})([0-9]{6})([A0-9])$/;
var matchArray = str.match(hkidPat);
// not match, return false
if (matchArray == null)
return false;
return true;
}