即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

汇编语言: .根据《里华人民共与国国家标准GB 11643-1999》里有关公民身份号码的规定,公民 身份号码是特征组合码,由十七位数字本体码与一位数字校验码组成。排列顺序从左至右依 次为:六位数字地

编程语言 Shuphen 15℃ 0评论

.根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民 身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依 次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码 的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。 下面介绍计算校验码的算法: 先引入公式: (右边最低位为第 1 位,左边最高位为第 18 位)


有了 Wi 值表后,可以简化 S 的计算过程,得出 S 后计算余数 Y,Y 的计算公式为:Y = mod(S, 11),再根据下表找出 Y 对应的校验码即为要求身份证号码的校验码 C。


编写一个程序,完成从键盘上输入一个 17 位的身份证号(身份证号的前 17 位,即上面 描述中的第 18 位至第 2 位),通过计算补充第 1 位后,将完整的身份证号显示出来

data segment

ID db  4,1,1,7,2,2,1,9,7,6,0,2,2,5,9,5,1
last db ?;8

W db 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2

Y db 1,0,'x'-30h,9,8,7,6,5,4,3,2 ;10=x
data ends
code segment 
    assume ds:data,cs:code
main proc far

    mov ax,data
    mov ds,ax

    mov ax,code
    mov ss,ax


    lea si,ID
    mov cx,17
l0: mov ah,01h
    int 21h
    sub al,30h
    mov [si],al
    inc si
    loop l0 


    lea si,ID   
    lea di,W    
    mov cx,17       
    xor bx,bx

    ;get w
l1: xor ax,ax
    xor dx,dx

    mov al,[si] 
    mov dl,[di]
    ;ax * dx = 
    mul dx
    add bx,ax

    inc di
    inc si
    loop l1

    ;mod 11 
    mov ax,bx
    mov bx,11   
    div bx  
    ; dl
    ;dl  find number in table

    lea si,Y    
l3: inc si

    dec dl
    cmp dl,0
    jnz l3  


    mov al,[si]
    mov last,al

    mov dl,0dh
    mov ah,02h
    int 21h
    mov dl,0ah
    mov ah,02h
    int 21h


    mov cx,18   
    lea si,ID

l2: mov dl,[si]
    add dl,30h      
    mov ah,02h
    int 21h 

    inc si
    loop l2

exit:   
    mov ah,4ch
    int 21h

main endp
code ends
end main




转载请注明:CodingBlog » 汇编语言: .根据《里华人民共与国国家标准GB 11643-1999》里有关公民身份号码的规定,公民 身份号码是特征组合码,由十七位数字本体码与一位数字校验码组成。排列顺序从左至右依 次为:六位数字地

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情