• 解析护照串码


    POCHNLE<<YILI<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    G222222224CHN8510105M180101952525252<<<<<<85

     

    (这两列为本人虚构的,仅作讲解使用)

     

    第一行
    1)P:代表Passport,即护照,共1位
    2)O:被护照颁发国用于区别不同种类的护照,如果未使用则为<,共1位
    3)CHN:代表中国,共3位
    4)LE<<YILI<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:代表护照持有人的姓名,中文则为拼音,姓后面
    加<<,然后为“名”的拼音,空下来的用<填充,直至填充满44个字符
    第二行:
    5)G22222222:表示护照号,即右上角的那个护照号,共9位
    6)4:校验码C,具体算法见文末,共1位
    7)CHN:中国代码,共3位
    8)851010:出生年月日,格式为YYMMDD,共6位
    9)5:校验码C,具体算法见文末,共1位
    10)M:表示男性,F表示女性,共1位
    11)180101:护照的过期日期,格式为YYMMDD,共6位
    12)9:检验码C,具体算法见文末,共1位
    13)52525252<<<<<<:共14位,个人号码,由护照颁发国各自决定其作用,不足位用<替代
    14)8:校验码C,具体算法见文末,共1位

    15)5:校验码X,具体算法见文末,共1位

     

    校验码C的计算方法:
    < A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

    0 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

     

    以6)处的校验码为例:
    G22222222
    G 2 2 2 2 2 2 2 2
    7 3 1 7 3 1 7 3 1

    112 6 2 14 6 2 14 6 2

     

    其中第一行为位于校验码前面的一串字符,这里为G22222222,即护照号

    第二行为731731731.....依次排列的数列

    第三行为每列的第一行乘以第二行所得到的数值,如果第一行中有字母则按照上面的表格转换为数字然后相

    第四步将第三行每个数字相加,此处得到的值为:164
    第五步:用所得到的值除以10,得到的余数即为校验码C
    9)处的校验码计算方法同上,只不过这里用于计算的数列为14~19位的数值,即出生日期
    8 5 1 0 1 0
    7 3 1 7 3 1
    56 15 1 0 3 0
    第三行得到的值之和为75,除以10后余数为5,所以此处的校验码为5
    12)和14)处的校验码计算方法同上,所用于计算校验码的数列分别为护照过期日期和个人号码
    校验码X的计算方法为:
    第一行数字为依次为1~10、14~20、22~43三处的数列组成
    第二行数字依然为731731731.....有序排列的数列
    第三行依然为每一列第一行乘以第二行所得到的乘积
    然后将三次计算所得到的结果相加,再除以10,得到的余数即为X
    这里计算得到的余数为5。。

    到这里就全部分析完了,各位有护照的可以拿出来算算,我的算过了就是这样的。

  • 相关阅读:
    C#遍历访问Dictionary和HashTable
    SQL:select case when(转)
    微软四大名著
    中国 Erlounge III 归来,好消息一箩筐!
    原来,程序的世界远比我想象的精彩
    Google和Yahoo专家联手揭秘世界顶尖公司的技术内幕
    有意义,不容易!(一位译者的翻译感言)
    世界级Oracle专家权威力作
    国内第一部DWR著作
    SQL Server故障排除圣经
  • 原文地址:https://www.cnblogs.com/zhangruisoldier/p/9178765.html
Copyright © 2020-2023  润新知