香港 身份证号码 规则???谁能提供正则表达式?

tonnycncn 2005-12-23 09:31:14
香港 身份证号码 规则???谁能提供正则表达式?
...全文
7792 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
止戈而立 2005-12-23
这个涉及到运算,最好写一个方法检验一下。。用正则不太好。。
对了,提醒一下:
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


另外:X354670(?)这个身份证的第一个字符恰恰是空格。。
  • 打赏
  • 举报
回复
ajex 2005-12-23
n年前写的.不知道是否有用.
nction ValidHKID(e){

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();

return false;

}
  • 打赏
  • 举报
回复
tonnycncn 2005-12-23
so good
  • 打赏
  • 举报
回复
止戈而立 2005-12-23
香港身份证号码:
身份证号码的「结构」,可以用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

X354670(?)
9(58)+8(33)+7(3)+6(5)+5(4)+4(6)+3(7)+2(0)+z=902+z
被11整除,所以 。
即X354670(0)是正确的香港身分证号码
  • 打赏
  • 举报
回复
止戈而立 2005-12-23
等一下,。。有些字符显示不出来。。。我整理一下再发。。
  • 打赏
  • 举报
回复
止戈而立 2005-12-23
香港身份证号码:
身份证号码的「结构」,可以用 表示。「 」可能是「空格」或是一个英文字母,「 」则必定是英文字母。「 」代表一个六位数字,而「z」是作为检码之用,它的可能选择是0, 1, 2, ... , 9, A(代表10)。这些代号的背后,都可配上一个编码值。透过编码值,便可找出

的总和。该总和特别之处,是必须被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

X354670(?)

被11整除,所以 。
我们可利用Modular arithmetic来简化运算。

所以

即X354670(0)是正确的香港身分证号码。
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2005-12-23 09:31
社区公告

让您成为最强悍的C#开发者