本文将使用Java实现中国公民(15位或者18位)身份证号码的相关验证,功能如下:
- 身份证号有效性验证
- 分析详细身份证信息
- 生成一个虚拟的省份证号码。
身份证号码验证
1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
2、地址码(前六位数)
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3、出生日期码(第七位至十四位)
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4、顺序码(第十五位至十七位)
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号, 顺序码的奇数分配给男性,偶数分配给女性。
5、校验码(第十八位数)
(1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模 Y = mod(S, 11)
(3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2
IDValidator.php
<"com\jdk5\blog\IDValidator\GB2260")){ include 'GB2260.php'; } if (!class_exists("com\jdk5\blog\IDValidator\util")){ include 'util.php'; } self::$GB2260 = GB2260::getGB2260 (); self::$util = util::getInstance(); } public static function getInstance() { if (is_null ( self::$instance )) { self::$instance = new IDValidator (); } return self::$instance; } function isValid($id) { $code = self::$util->checkArg ( $id ); if ($code === false) { return false; } // 查询cache if (isset ( self::$cache [ $id ] ) && self::$cache [$id] ['valid'] !== false) { return self::$cache [$id] ['valid']; } else { if (! isset ( self::$cache [ $id ] )) { self::$cache [$id] = array (); } } $addr = substr ( $code ['body'], 0, 6 ); $birth = $code ['type'] === 18 "htmlcode"><"Content-type: text/html; charset=utf-8"); include 'IDValidator.php'; $v = com\jdk5\blog\IDValidator\IDValidator::getInstance(); //生成一个18位身份证号 $id = $v->makeID(); //获取身份证信息 $info = $v->getInfo($id); var_dump($info); //生成一个15位身份证号 $id = $v->makeID(true); $info = $v->getInfo($id); var_dump($info); //验证身份证号是否正确 var_dump($v->isValid("123456789012345678"));以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。