身份证号码的校验公式怎么写?
发布网友
发布时间:2022-04-20 03:50
我来回答
共1个回答
热心网友
时间:2022-07-12 08:51
公民身份号码是由17位数字码和1位校验码组成。排列顺序从左至右分别为:6位地址码,8位出生日期码,3位顺序码和1位校验码。
地址码(身份证地址码对照表见下面附录)和出生日期码很好理解,顺序码表示在同一地址码所标识的区域范围内,对同年同月同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
身份证最后一位校验码算法如下:
1.
将身份证号码前17位数分别乘以不同的系数,从第1位到第17位的系数分别为:7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
2.
将得到的17个乘积相加。
3.
将相加后的和除以11并得到余数。
4.
余数可能为0
1
2
3
4
5
6
7
8
9
10这些个数字,其对应的身份证最后一位校验码为1
0
X
9
8
7
6
5
4
3
2。
校验码计算公式:
公式①中:
i
表示号码字符从由至左包括校验码在内的位置序号;
Ai
表示第i位置上的号码字符值;
Wi
示第i位置上的加权因数。
加权因数的集合为{7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2,
1}
v={1,
0,
X,
9,
8,
7,
6,
5,
4,
3,
2}
最后一位的校验位就是集合v中的第m个元素的值。
下面举例算一个:
随便一个号码,如济南市市辖区的某位出生于1901年02月03日的男性公民身份号码前11位(也就是本体码)为37010119010203997,首先按照公式⑴计算:
然后根据计算的结果,从集合v中查出相应的校验码,其中X表示10:
根据集合v,查出计算结果为9的校验码3为所以该人员的公民身份号码应该为
370101190102039973。
说下余数的算法。
一、两个异号整数求余
1.函数值符号规律(余数的符号)
mod(负,正)=正
mod(正,负)=负
结论:两个整数求余时,其值的符号为除数的符号。
2.取值规律
先将两个整数看作是正数,再作除法运算
①能整除时,其值为0
②不能整除时,其值=除数×(整商+1)-被除数
例:mod(36,-10)=-4
即:36除以10的整数商为3,加1后为4;其与除数之积为40;再与被除数之差为(40-36=4);取除数的符号。所以值为-4。
二、两个小数求余
取值规律:
被除数-(整商×除数)之后在第一位小数位进行四舍五入。
例:mod(9,1.2)=1
即:9除1.2其整商为7;7与除数1.2之积为8.4;8.4四舍五入之后为8;被除数9与8之差为1。故结果为1。
例:mod(9,2.2)=0
即:9除2.2其整商为4;4与除数2.2这积为8.8;8.8四舍五入之后
为9;被除数9与之差为0,故结果为0.