delphi 18位身份证号码的校验

2026-03-04 12:19:48

18位公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

组成:六位地址,八位生日,三位顺序码, 一位校验码。校验方法:

(1)十七位数字本体码加权求和公式

S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和

Ai:表示第i位置上的身份证号码数字值

Wi:表示第i位置上的加权因子

Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模

Y = mod(S, 11)

(3)通过模得到对应的校验码

Y: 0 1 2 3 4 5 6 7 8 9 10

校验码: 1 0 X 9 8 7 6 5 4 3 2

代码如下:

Function Verify(Num : String):Boolean;

const

WI :array[0..16] of Integer = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

VC :array[0..10] of Char = (’1′, ’0′, ‘X’, ’9′, ’8′, ’7′, ’6′, ’5′, ’4′, ’3′, ’2′);

var

P : PChar;

I, S : Integer;

begin

P := PChar(Num);

S := 0;

for I := 0 to 16 do

S := S + (Ord(P[I]) – $30)*WI[I];

S := S mod 11;

Result := P[17] = VC[S];

end;

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢