摘要:号码查询和验证是保证我们信息和财产安全的重要手段,而身份证号码和手机号码查询验证是其中的重中之重。本课题设计并开发了一种集成号码查询的应用,用户可以在这个应用上查询号码归属地和身份证信息,比如:身份证签发地、当前号码性别、出生年月日等信息。
关键词:手机号码查询;身份证号码查询;号码归属地;身份证性别;身份证归属地;号码查询;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.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 结论与展望
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
作者简介:汪志阳,男,汉族,上海人,研究方向:计算机。