使用FME验证身份证号码

2021-05-13 11:08:40 浏览数 (1)

内容简介

本篇推送,将简单介绍一下怎么使用FME来验证身份证号码。

身份证号码

结构:

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。

形式

1.地址码

表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

2.出生日期码

表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

3.顺序码

表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

4.校验码

根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

校验码算法

将本体码各位数字乘以对应加权因子并求和,除以11得到余数,根据余数通过校验码对照表查得校验码。

加权因子:

校验码:

身份证号码验证

了解过身份证的组成以及验证规则之后,下面就要开始验证了。

验证方式

身份证号的验证,可以分为这么几个部分:1、地址码验证,2、出生日期验证,3、顺序码验证,4、校验码验证。其中地址码验证比较简单,只需提取出身份证的前6位,与县级行政区划代码做个验证即可。顺序码的验证,只需将第17位提取出来做奇偶性与性别的验证即可。所以接下来的验证将着眼于两部分:日期与校验码

日期校验

要验证身份证中的日期,首先要把日期信息提取出来。提取身份证的日期有多种方式,这里只介绍三种

1、根据字符串索引提取

这种方式是最简单的,直接根据数字的位置就可以把身份证种的日期提取出来,使用到的转换器如下图所示:

提取结果

2、使用字符串分割提取

这种方式稍微麻烦一些,需要根据熟悉一点格式化字符串的知识,不过在配置的时候是非常方便的,使用到的转换器如下图所示:

提取结果

3、使用正则的方式进行提取

正则方式最为优雅强大,一个转换器即可提取出日期信息

提取结果

以上三种方式都能提取出日期信息,而验证也非常的简单,直接使用日期转换的方式进行验证即可,能转换成功的,就是正常的日期,不成功就是有问题的日期

开始验证

直接使用日期转换的转换器,对提取出的转换器进行了验证,在运行的时候,下方的日志栏就出现了提示。提示说19850230这个日期,天数太大了,不是个有效的日期。所以这个身份证号码是有问题的。

验证码验证

根据身份证的验证码规则,需要将身份证的每一位乘上其加权因子,然后再与11取余,得到的余数再到对应的校验码表中,查找对应的校验码。这个计算过程,使用转换器来实现的话是非常麻烦的,所以我写了几行代码来实现,转换器如下图所示:

这个结果是不是正确,可以在Excel里计算验证一下(Excel的公式也是非常的强大)

首先,对两个身份证进行加权求和,及:两个身份证分别与其位置上的加权因子相乘

最后求和

可以看到,这里求的和,跟上面的转换器算的结果是一致的

然后再取余,验证校验码

可以看到,求出的余数与校验码与转换器算出来的结果也是一致的。这说明写的转换器,效果还是可以的!

0 人点赞