身份z号,18位如何换算成15位?

身份z号,18位如何换算成15位?,第1张

分类: 教育/科学 >> 学习帮助

问题描述:

请高人帮助解答,谢谢!

解析:

身份z的18位数字一般为370724这是山东潍坊临朐的编码再就是这是出生年月日再往后的四个数字是随机的,换算的话应该是这样:比如,37072419550505055x换算出来是370724550505055这个号码是男士的,15位的号码中最后一位数字单数为男双数为女

将第7、8位(一般为19)和最后一位(可能是数字,也可能是x)去掉即可。

居民身份z号码,正确、正式的称谓应该是“公民身份号码”。根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。

排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。中华人民共和国 居民身份z是国家法定的证明公民个人身份的有效证件。

扩展资料:

国家标准:

18位身份z标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。

GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。

《公民身份号码》主要内容如下:

范围:

该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。

编码对象:

公民身份号码的编码对象是具有中华人民共和国国籍的公民。

结构和形式:

1.号码的结构:

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

2.地址码:

表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

3.出生日期码:

表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

4.顺序码:

表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

5.校验码:

根据前面十七位数字码,按照ISO 7064:1983MOD 11-2校验码计算出来的检验码。

-居民身份z

/

最后一位较验码,公式如下:

  

∑(a[i]W[i])

mod

11

(

i

=

2,

3,

,

18

)

(1)

  

""

表示乘号

  

i--------表示身份z号码每一位的序号,从右至左,最左侧为18,最右侧为1。

  

a[i]-----表示身份z号码第

i

位上的号码

  

W[i]-----表示第

i

位上的权值

W[i]

=

2^(i-1)

mod

11

  

计算公式

(1)

令结果为

R

根据下表找出

R

对应的校验码即为要求身份z号码的校验码C。

  

R

0

1

2

3

4

5

6

7

8

9

10

  

C

1

0

X

9

8

7

6

5

4

3

2

/

string

tmpCode

=

(sfzCodeLength

==

15

sfzCodeSubstring(0,

6)

+

"19"

+

sfzCodeSubstring(6)

:

sfzCode);

string[]

aryCheck

=

new

string[]

{

"1",

"0",

"X",

"9",

"8",

"7",

"6",

"5",

"4",

"3",

"2"

};

int[]

aryWeight

=

new

int[]

{

7,

9,

10,

5,

8,

4,

2,

1,

6,

3,

7,

9,

10,

5,

8,

4,

2

};

int

sum

=

0;

for

(int

i

=

0;

i

<

17;

i++)

sum

+=

aryWeight[i]

ConvertToInt32(tmpCodeSubstring(i,

1));

rstCheckVal

=

aryCheck[sum

%

11];

如果一定要用SQL

那么将这段代码用SQL的自定义函数实现下

然后再语句中使用就可以了

  第二代身份z十八位数改为第一代身份z十五位数的一般规则是:第一步,将十八位数身份z第六位数后面的第七、第八位的19或20去掉,这样身份z号码即为十六位数;第二步,将第二代身份z的尾号即第十八位数的校验码去掉,这样身份z号码就成为十五位数了。

  目前在用的第二代身份z号码都是十八位数字,这是一组特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码、八位数字出生日期码、三位数字顺序码和一位数字校验码。

  地址码(前六位数):表示身份z编码对象常住户口所在省(直辖市、自治区)、地(市),以及县(市、旗、区)的行政区划代码,按照GB/T2260的规定执行。其中:前一、二位数字表示所在省(直辖市、自治区)的代码;第三、四位数字表示所在地(市)的代码;第五、六位数字表示:所在县(市、旗、区)的代码。

  出生日期码(第七位至十四位):表示身份z编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

  顺序码(第十五位至十七位):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

  校验码(第十八位数):作为尾号的校验码,是由身份z号码编制单位按统一的公式计算出来的。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/12462111.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存