欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

护照 MRZ码编码规则

程序员文章站 2022-03-07 23:48:13
护照资料也下方的两行成为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:国籍不详