护照 MRZ码编码规则

2023-12-24 04:58
文章标签 规则 编码 护照 mrz

本文主要是介绍护照 MRZ码编码规则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

护照资料也下方的两行成为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:国籍不详

这篇关于护照 MRZ码编码规则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530601

相关文章

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {

Python字符编码及应用

字符集概念 字符集就是一套文字符号及其编码的描述。从第一个计算机字符集ASCII开始,为了处理不同的文字,发明过几百种字符集,例如ASCII、USC、GBK、BIG5等,这些不同的字符集从收录到编码都各不相同。在编程中出现比较严重的问题是字符乱码。 几个概念 位:计算机的最小单位二进制中的一位,用二进制的0,1表示。 字节:八位组成一个字节。(位与字节有对应关系) 字符:我们肉眼可见的文字与符号。

关联规则(一)Apriori算法

此篇文章转自 http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 个人觉得比课本上讲的更通俗易懂! 1.  挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

在Eclipse环境下修改Tomcat编码的问题

问题: 由于BMS需要设置UTF-8编码,要不就会出现中文乱码问题; 一、项目保持UTF-8格式; 二、由于可能会多次移除项目、加载项目,不想每次都要修改tmp0\conf 原因: 如果在eclipse中配置了tomcat后,其实,tomcat所用的所有tomcat配置文件,都不是catalina_home/config下面的xml文件,而是在eclipse所创建的Serve

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快