PHP身份证号校验类:支持15位到18位转换与验证
96 浏览量
更新于2024-08-31
收藏 78KB PDF 举报
"这篇文章主要介绍了一个PHP类,用于校验15位和18位的身份证号码。作者在新公司的框架源码中发现这个需求,因此进行了搜索和封装。身份证号码分为15位和18位,18位身份证号包含校验码,15位则没有。18位身份证号的校验码可以通过特定算法计算得出,该算法涉及到对身份证号码前17位数字的特定权重求和,并对11取模。15位身份证号通常通过加上19年份转换成18位。身份证号的校验包括验证省份、地级市、县级市、出生日期以及校验码的正确性。虽然可以通过算法校验,但最准确的方式是通过官方接口进行验证。"
在PHP中,身份证号码的校验是基于一定的规则进行的。对于15位身份证号码,结构为省份(2位)+地级市(2位)+县级市(2位)+出生年(2位)+出生月(2位)+出生日(2位)+顺序号(3位)。而18位身份证号码在15位的基础上增加了出生年的2位和一个校验位。顺序号的奇偶性可以区分性别,奇数代表男性,偶数代表女性。
校验18位身份证号的校验位时,需要将前17位数字分别与特定权重(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)相乘,累加后对11取模,根据模的结果在特定字符集('1','0','X','9','8','7','6','5','4','3','2')中找到对应的字符作为校验位。
15位身份证号码转为18位,通常只需在出生年份前加上19,然后计算校验位并添加到末尾。
在实现身份证校验的PHP类时,可以包括以下几个功能:
1. 检查身份证号码的长度是否正确,即15位或18位。
2. 验证省份代码的有效性,虽然省份数量有限,但可能需要相关数据支持。
3. 检查地级市和县级市的代码,这需要具体地区的行政编码数据库。
4. 校验出生日期的合理性,确保日期符合实际的日历日期。
5. 计算并校验18位身份证的校验码。
6. 对于15位身份证,提供转换为18位的功能,但推荐使用18位的身份证号码进行校验。
以下是一个简化的PHP身份证校验类的示例:
```php
class IDCardFilter {
public function validate($idCard) {
// 验证长度
if (strlen($idCard) != 15 && strlen($idCard) != 18) {
return false;
}
// 15位转18位
if (strlen($idCard) == 15) {
$idCard = substr($idCard, 0, 6) . '19' . substr($idCard, 6);
}
// 校验18位
$weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
$checkChars = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
$sum = 0;
for ($i = 0; $i < 17; $i++) {
$sum += intval($idCard[$i]) * $weights[$i];
}
$mod = $sum % 11;
if ($checkChars[$mod] != strtoupper($idCard[17])) {
return false;
}
// 其他验证(如日期、地区代码等)
// ...
return true;
}
}
```
这个简单的示例类包含了基本的身份证号长度验证和15转18位以及18位校验位的验证。对于更全面的验证,需要额外添加检查日期和行政区划代码的逻辑。此外,如果可能,应优先使用权威部门提供的接口进行身份证号码的校验,以提高准确性。
107 浏览量
1186 浏览量
179 浏览量
点击了解资源详情
154 浏览量
2021-12-14 上传
177 浏览量
2022-05-03 上传
177 浏览量

weixin_38654915
- 粉丝: 7
最新资源
- 物资管理系统Java项目源码及使用指南
- 使用HTML独立完成简单项目的介绍
- 打造Arch Linux游戏操作系统,体验Steam Big Picture模式
- QQ旋风3.9经典版一键自动安装指南
- Axure RP Pro 5.6汉化特别版:网站策划与流程图利器
- jQuery实用特效合集:打造炫酷网页交互
- 全方位监控Spring Cloud(Finchley版本)微服务架构
- LPC2478与aduc7026微处理器实现AD7190/AD7192信号采集传输
- BMP转JPG:位图压缩存储新方法
- WoT系统安全测试指南及文档存储库介绍
- Vue结合Konva.js实现矩形和多边形数据标注
- Vim自动切换输入法插件介绍与配置
- Spring MVC框架与Hibernate实现添加功能教程
- 全面掌握SQL Server 2008从入门到精通
- A字裙打板放码教程:博克资源分享
- 深入理解HTML5: [New Riders] 第2版完整教程