号码验证工具的设计与实现

2019-12-02 08:02汪志阳
中国科技纵横 2019年16期
关键词:校验码手机号码号码

号码查询和验证是保证我们信息和财产安全的重要手段,而身份证号码和手机号码查询验证是其中的重中之重。本课题设计并开发了一种集成号码查询的应用,用户可以在这个应用上查询号码归属地和身份证信息,比如:身份证签发地、当前号码性别、出生年月日等信息。

关键手机号码查询;身份证号码查询;号码归属地;身份证性别;身份证归属地;号码查询;Android查询

中图分类号:TP311.52 文献标识码:A  文章编号:1671-2064(2019)16-0000-00

1课题的设计与实现

1.1方案设计

1.1.1设计原理

(1)身份证号验证设计原理。

1)身份证号码结构。早期“身份证号码”叫“社会保障号”,为15位,1999年开始更名为公民身份证号码,即第二代身份证,为18位,且终身不变。

2)15位与18位身份证号码差异。出生日期码:15位身份证号码中出生日期码为4位,其中年份代码仅有2位,如590328,代表1959年生。

校验码:15位身份证号码中无校验位。

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

加权因子,如表1所示。

校验码,如表2所示。

算法举例:

本体码为:11010519491231002

第一步:各位数与对应加权因子乘积求和1*7+1*9+0*10+1*5+......=167

第二步:对求和进行除11得余数167%11=2

第三步:根据余数2对照校验码得X

因此完整身份證号为:11010519491231002X

4)编码规则的应用。如上所述,身份证号码是基于一定的规则的,从身份证号码中可以挖掘以下信息:

① 身份证长度验证:身份证长度仅存在15位或18位两种长度;

② 身份证输入正确性验证:如身份证号为18位,可根据本体码与校验码得关系验证身份证号码输入有误,需要指出的是,验证通过并不代表身份证号码的真实性;

③ 出生年月日及其正确性;(1、2、3以及身份证号码格式中任意一项不合法就不需要验证,转而要求用户重新输入)

④ 获得户籍注册地信息:大部分情况下,该地即为出身地或籍贯。对应时需留意行政区划代码的更新迭代;

⑤ 性别:顺序码中奇数为男性,偶数位为女性;

⑥ 根据18位与15位身份证号码编码规则及校验码算法,将15位身份证号码转换为18位身份证号码;

⑦ 因校验码为X,实际上有大小写输入不同,需注意兼容或统一。

5)实名认证的方式。在互联网产品中,“实名认证”的方式大致有3种:

① 姓名+身份证号码匹配认证。产品举例:火币网、金斧子网站;

② 身份证正反面照片+人脸照片认证。产品举例:火币网、云币网;

③ 身份证正反面照片+人脸识别。产品举例:阿里小号。

要采取哪种方式,要视产品目标与用户需求而定。目前来看,方式3应用较少,可能这有一定的技术难度,所以一般公司并不会采用。而方式1与方式2的使用都比较多,其中方式2更为可靠,方式1更为简单。以上3种方式,都谈不上绝对可靠,但可靠性在逐渐升高,能过滤掉的作弊用户也在增多。当然,技术难度与维护成本也在升高。

所以,有些网站对不同级别用户使用不同的认证方式:对低级别用户,使用方式1;对中等级别用户,使用方式2;对高级用户,使用支付宝的芝麻认证。

对于方式1:姓名+身份证号码匹配认证

乍一看,这种认证似乎很简单——不就是验证一下是否匹配吗?但细分之后,就有很多值得玩味的细节。比如:如何验证身份证号码与姓名是否匹配?验证过程速度如何?验证的成本如何?

6)认证成本与时间。姓名+身份证号码是否匹配,根据官方系统提供的数据进行。这就带来了两个关键问题:

① 成本较高——一次认证1元以上;

② 认证时间可能较长——有时可能需要十几秒才能返回认证结果。

解决方案:尽量将错误认证阻挡在产品中,而不是让其进入官网系统,从而节省成本,节省用户验证时间,提升用户体验。

因此,应该在姓名、身份证号的格式验证上下更多工夫。

① 姓名格式验证:国人的姓名,大都为2-4位中文字符,所以验证时应验证其是否为中文、位数是否大于1位小于5位?当然,上限可以适当提高。

② 身份证号码格式验证。

  1. 手机号验证设计原理。通过网络识别号知道运营商,通过地区编码知道地区。如果网络识别号或地区编码不存在直接退出要求用户重新输入。

1.1.2线框图方案与设计

功能1:手机号码查询和身份证号码查询可以点击切换,默认打开页面为手机号码查询,切换到身份证号码页面显示身份证号码内容。

功能2:身份证号码查询,默认展示“请输入所查询的身份证号码”,当用户输入内容的时候默认展示消失,当用户清空输入内容的时候,再次展示默认提示。

功能3:查询,如果符合号码查询规则的号码,则查询返回结果:输出元素,身份证号码:对应输入正确身份证号码,归属地:服务端返回的名称,性别:服务端返回的性别,只有男和女,生日:服务端返回到生日格式为:XXXX年XX月XX日。如果没有符合号码规则,统一提示“您输入的身份证号码不正确,请重新输入”。

功能4:查询未连接网络,则提示“网络连接失败,请检查网络”。

1.2产品实施开发

1.2.1开发环境搭建

在windows 10系统中搭建开发环境,配置JDK(jdk-9.0.1)、环境变量和Android开发工具Android Studio。

1.2.2开发结果样式图1

用户在空间内填写内容,如果数据填写的违背规则则会报错,网络链接有问题也会报错,在确保网络畅通且输入内容正确的情况下,客户端会将服务端返回的数据按照内容排放位置准确的展示出来。

1.3测试与验证

1.3.1测试环境和条件

测试分仿真模拟测试和真机测试;

仿真模拟测试环境在AVD(Android Virtual Device)中测试;

真机测试:华为手机;

手机型号:EVA-AL10;

硬件配置:Android版本6.0;内核版本号:3.10.90-g0d59b0candroid@localhost #1 Wed nov 30 03:27:24 CST 2016;RAM:4G;CPU:Hisilicon Kirin955。

1.3.2測试步骤与内容

使用产品,输入手机号和身份证号,查看是否有报错信息,使用是否流畅,输出是否正确。

1.3.3测试结果分析表1

结论与展望

2.1结

场景1:用户打开app,如果想要查找手机号码,那么直接在默认页面输入所查询的手机号码,然后点击查询后经过数据加载,看到结果手机号码对应的归属地和运营商,用户通过app可以简单的操作查询到想要的结果。

场景2:用户打开app,如果想要查找身份证号码,那么直接在默认页面输入所查询的身份证号码,然后点击查询后经过数据加载,看到结果身份证号码的签发地、对应公民的出生日期、性别等结果。

2.2展望

此号码查询工具目前是一个初步的探索性研究,未来可优化的方向包括:

(1)查找别的号码。例如:通过银行卡号码分析是什么银行的,是储蓄卡还是信用卡,快递号码查询物流公司和物流状态。

(2)功能:语音输入。

(3)不需要区分号码自动输入号码根据规则匹配出想要的结果。

(4)条形码扫码查询。

(5)将身份验证功能拓展到实际生活场景或是行业领域中。比如停车场中,通过扫描车牌号,定位车主信息,增加安全性能。

目前这个APP还处于初级阶段,若后续能对接公安系统、银行系统、税务系统、旅游系统、物流系统等,其应用场景就会更加广泛。当然,这种系统的对接要建立在合法合规的基础之上,一些涉及个人隐私如银行账户等信息,仍需要在特定条件下才能查询。

参考文献

[1] 靳岩,姚尚郎.Google Android开发入门与实践[M/CD].北京:人民邮电出版社,2009.

[2] 余志龙,陈旻勋,等.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2009.

[3] 公磊,周聪.基于Android的移动终端应用程序开发与研究[J].计算机与现代化,2008(08):85-89.

收稿日期:2019-06-11

作者简介:汪志阳,男,汉族,上海人,研究方向:计算机。

猜你喜欢
校验码手机号码号码
说号码 知颜色
张掖市手机号码支付业务推广情况调查
一个号码,一个故事
猜出新号码
基于Tesseract-OCR的快递单中手机号码识别应用的实现
昵称
基于FPGA的循环冗余校验码设计
基于FPGA和NAND Flash的存储器ECC设计与实现