这个涉及到运算,最好写一个方法检验一下。。用正则不太好。。
对了,提醒一下:
X或Y的编码值://这里的X和Y可能是以下任何一个字符,而不一定就是XY。。
空格 58 I 18 R 27
A 10 J 19 S 28
B 11 K 20 T 29
C 12 L 21 U 30
D 13 M 22 V 31
E 14 N 23 W 32
F 15 O 24 X 33
G 16 P 25 Y 34
H 17 Q 26 Z 35
var CardNumber=e.value;
if (CardNumber=="")
return true;
var regex=/^[a-zA-Z]{1,2}\d{6}\([0-9a-zAZ-Z]\)$/;
if (regex.test(CardNumber)){
if (CardNumber.length==10){
var sum=9*GetAppNumber("@")+8*GetAppNumber(CardNumber.substr(0,1))+7*parseInt(CardNumber.substr(1,1))+6*parseInt(CardNumber.substr(2,1))+5*parseInt(CardNumber.substr(3,1))+4*parseInt(CardNumber.substr(4,1))+3*parseInt(CardNumber.substr(5,1))+2*parseInt(CardNumber.substr(6,1));
var checkdigit=11-sum%11;
if (checkdigit==10)
checkdigit="A";
if (checkdigit==11)
checkdigit="0";
if (checkdigit==CardNumber.substr(8,1)){
return true;
}
}
if (CardNumber.length==11)
var sum=9*GetAppNumber(CardNumber.substr(0,1))+8*GetAppNumber(CardNumber.substr(1,1))+7*parseInt(CardNumber.substr(2,1))+6*parseInt(CardNumber.substr(3,1))+5*parseInt(CardNumber.substr(4,1))+4*parseInt(CardNumber.substr(5,1))+3*parseInt(CardNumber.substr(6,1))+2*parseInt(CardNumber.substr(7,1));
var checkdigit=11-sum%11;
if (checkdigit==10)
checkdigit="A";
if (checkdigit==11)
checkdigit="0";
if (checkdigit==CardNumber.substr(9,1)){
return true;
}
}
alert("The HKID is invalid.");
//e.focus();
香港身份证号码:
身份证号码的「结构」,可以用XYabcdef(z)表示。「X」可能是「空格」或是一个英文字母,「Y」则必定是英文字母。「abcdef」代表一个六位数字,而「z」是作为检码之用,它的可能选择是0, 1, 2, ... , 9, A(代表10)。这些代号的背后,都可配上一个编码值。透过编码值,便可找出
9X+8Y+7a+6b+5c+4d+3e+2f+z
的总和。该总和特别之处,是必须被11整除。利用这特点,我们便能找出括号内的数字。
X或Y的编码值:
空格 58 I 18 R 27
A 10 J 19 S 28
B 11 K 20 T 29
C 12 L 21 U 30
D 13 M 22 V 31
E 14 N 23 W 32
F 15 O 24 X 33
G 16 P 25 Y 34
H 17 Q 26 Z 35
的总和。该总和特别之处,是必须被11整除。利用这特点,我们便能找出括号内的数字。
或 的编码值:
空格 58 I 18 R 27
A 10 J 19 S 28
B 11 K 20 T 29
C 12 L 21 U 30
D 13 M 22 V 31
E 14 N 23 W 32
F 15 O 24 X 33
G 16 P 25 Y 34
H 17 Q 26 Z 35