护照 MRZ码编码规则
程序员文章站
2022-06-15 09:36:01
护照资料也下方的两行成为MRZ码(或护照机读码),每行44个字符(0 9,A Z,<),如下例: 1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 201 2 3 4 5 6 7 8 9 301 2 3 4 5 6 7 8 9 401 2 3 4 P O C H N Z H ......
护照资料也下方的两行成为mrz码(或护照机读码),每行44个字符(0-9,a-z,<),如下例:
1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 201 2 3 4 5 6 7 8 9 301 2 3 4 5 6 7 8 9 401 2 3 4
p o c h n z h a n g < < s a n < < < < < < < < < < < < < < < < < < < < < < < < < < < < <
g 4 8 9 4 7 6 4 6 4 c h n 7 3 0 4 2 7 9 m 2 1 0 1 2 6 6 1 9 2 0 3 3 0 1 < < < < < < 1 6
第一行
1.p:代表护照
2.o:代表护照类型
3-5:国家代码,见最后
6-44:39位姓名,姓和名之间用<<隔开,姓(surname)和名(given names)若有多个单词则用<隔开,最后用<补足39个字符
第二行
1-9:护照号码
10:1-9的验证码,验证算法如下
int compute(string source) { string s = "0123456789abcdefghijklmnopqrstuvwxyz"; int[] w = new int[] { 7, 3, 1 }; int c = 0; for (int i = 0; i < source.length; i++) { if (source[i] == '<') continue; c += s.indexof(source[i]) * w[i % 3]; } c %= 10; return c; }
11-13:国家代码
14-19:生日
20:生日的验证码,验证规则同上
21:性别(m:男,f:女)
22-27:护照有效期
28:护照有效期验证码
29-42:个人代码,每个国家都不一样
43:个人代码的验证码
44:第二行1-10,14-20,22-43的验证码
var line2string = "g489476464chn7304279m210126619203301<<<<<<16"; var lastvalue = compute(line2string.substring(0, 10) + line2string.substring(13, 7) + line2string.substring(21, 22)); //lastvalue=6
附:国家代码表
abw:阿鲁巴 afg:阿富汗 ago:安哥拉 aia:安圭拉 ala:奥兰群岛 alb:阿尔巴尼亚 and:安道尔 ant:荷属安的列斯 are:阿联酋 arg:阿根廷 arm:亚美尼亚 asm:美属萨摩亚 ata:南极洲 atf:法属南领地 atg:安提瓜和巴布达 aus:澳大利亚 aut:奥地利 aze:阿塞拜疆 bdi:布隆迪 bel:比利时 ben:贝宁 bes:博内尔岛、圣尤斯特歇斯岛和萨巴岛 bfa:布基纳法索 bgd:孟加拉国 bgr:保加利亚 bhr:巴林 bhs:巴哈马 bih:波黑 blm:圣巴泰勒米岛 blr:白俄罗斯 blz:伯利兹 bmu:百慕大 bol:玻利维亚 bra:巴西 brb:巴巴多斯 brn:文莱 btn:不丹 bvt:布维岛 bwa:博茨瓦纳 caf:中非 can:加拿大 cb:加那利群岛 cck:科科斯(基灵)群岛 ce:塞卜泰(休达) che:瑞士 chl:智利 chn:中国 civ:科特迪瓦 cmr:喀麦隆 cod:刚果(金) cog:刚果(布) cok:库克群岛 col:哥伦比亚 com:科摩罗 cpv:佛得角 cri:哥斯达黎加 ct:坎顿和恩德贝里群岛 cub:古巴 cuw:库拉索 cxr:圣诞岛 cym:开曼群岛 cyp:塞浦路斯 cze:捷克 deu:德国 dji:吉布提 dma:多米尼克 dnk:丹麦 dom:多米尼加 dza:阿尔及利亚 ecu:厄瓜多尔 egy:埃及 eri:厄立特里亚 esh:西撒哈拉 esp:西班牙 est:爱沙尼亚 eth:埃塞俄比亚 fin:芬兰 fji:斐济 flk:福克兰群岛(马尔维纳斯) fra:法国 fro:法罗群岛 fsm:密克罗尼西亚联邦 gab:加蓬 gbd:英国(属地公民) gbn:英国(国民(海外)) gbo:英国(海外公民) gbp:英国(被保护人) gbr:英国 gbs:英国(臣民) geo:格鲁吉亚 ggy:根西岛 gha:加纳 gib:直布罗陀 gin:几内亚 glp:瓜德罗普 gmb:冈比亚 gnb:几内亚比绍 gnq:赤道几内亚 grc:希腊 grd:格林纳达 grl:格陵兰 gtm:危地马拉 guf:法属圭亚那 gum:关岛 guy:圭亚那 hkg:中国香港 hmd:赫德岛和麦克唐纳群岛 hnd:洪都拉斯 hrv:克罗地亚 hti:海地 hun:匈牙利 idn:印度尼西亚 imn:马恩岛 ind:印度 iot:英属印度洋领地 irl:爱尔兰 irn:伊朗 irq:伊拉克 isl:冰岛 isr:以色列 ita:意大利 jam:牙买加 jey:泽西 ji:贾维斯岛(大洋洲) jor:约旦 jpn:日本 jtn:约翰斯顿岛 kaz:哈萨克斯坦 ken:肯尼亚 kgz:吉尔吉斯斯坦 khm:柬埔寨 kir:基里巴斯 kna:圣基茨和尼维斯 kor:韩国 kwt:科威特 lao:老挝 lbn:黎巴嫩 lbr:利比里亚 lby:利比亚 lca:圣卢西亚 lie:列支敦士登 lka:斯里兰卡 lso:莱索托 ltu:立陶宛 lux:卢森堡 lva:拉脱维亚 mac:中国澳门 maf:圣马丁岛(法属) mar:摩洛哥 mco:摩纳哥 mda:摩尔多瓦 mdg:马达加斯加 mdv:马尔代夫 me:梅利利亚 mex:墨西哥 mhl:马绍尔群岛 mid:中途岛 mkd:北马其顿 mli:马里 mlt:马耳他 mmr:缅甸 mne:黑山 mng:蒙古 mnp:北马里亚纳群岛 moz:莫桑比克 mrt:毛里塔尼亚 msr:蒙特塞拉特 mtq:马提尼克 mus:毛里求斯 mwi:马拉维 mys:马来西亚 myt:马约特 nam:纳米比亚 ncl:新喀里多尼亚 ner:尼日尔 nfk:诺福克岛 nga:尼日利亚 nic:尼加拉瓜 niu:纽埃 nld:荷兰 nn:无国籍 nor:挪威 npl:尼泊尔 nq:毛德地 nru:瑙鲁 ntz:中立区 nzl:新西兰 omn:阿曼 pak:巴基斯坦 pan:* pcn:皮特凯恩 per:秘鲁 phl:菲律宾 plw:帕劳 png:巴布亚新几内亚 pol:波兰 pri:波多黎各 prk:朝鲜 prt:葡萄牙 pry:巴拉圭 pse:巴勒斯坦 pus:美属太平洋群岛 pyf:法属波利尼西亚 pz:*运河带 qat:卡塔尔 reu:留尼汪岛 rou:罗马尼亚 rus:俄罗斯 rwa:卢旺达 sau:沙特 sdn:苏丹 sen:塞内加尔 sgp:新加坡 sgs:南乔治亚和南桑威奇群岛 shn:圣赫勒拿岛、阿森松岛和特里斯坦达库尼亚群岛 sjm:斯瓦尔巴和扬马延群岛 slb:所罗门群岛 sle:塞拉利昂 slv:萨尔瓦多 smr:圣马力诺 som:索马里 sp:萨巴 spm:圣皮埃尔和密克隆 sq:圣马丁岛 srb:塞尔维亚 ss:塞班 ssd:南苏丹 stp:圣多美和普林西比 sur:苏里南 svk:斯洛伐克 svn:斯洛文尼亚 swe:瑞典 swz:斯威士兰 sxm:圣马丁岛(荷属) syc:塞舌尔 syr:叙利亚 tca:特克斯和凯科斯群岛 tcd:乍得 tgo:多哥 tha:泰国 tjk:塔吉克斯坦 tkl:托克劳群岛 tkm:土库曼斯坦 tls:东帝汶 ton:汤加 tto:特立尼达和多巴哥 tun:突尼斯 tur:土耳其 tuv:图瓦卢 twn:中国* tx:塔希提 tza:坦桑尼亚 uga:乌干达 ukr:乌克兰 umi:美国本土外小岛屿 un:联合国 una:联合国 uno:联合国 ury:乌拉圭 usa:美国 uzb:乌兹别克斯坦 vat:梵蒂冈 vct:圣文森特和格林纳丁斯 ven:委内瑞拉 vgb:维尔京群岛(英属) vir:维尔京群岛(美属) vnm:越南 vut:瓦努阿图 wak:威克岛 wlf:瓦利斯和富图纳群岛 wsm:萨摩亚 xxa:无国籍(无国籍人) xxb:被联合国承认的难民 xxc:不被联合国承认的难民 xxx:国籍不明 yem:也门 yks:科索沃 zaf:南非 zmb:赞比亚 zwe:津巴布韦 zzz:国籍不详
推荐阅读