PHP身份证号校验类:支持15位到18位转换与验证
62 浏览量
更新于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位校验位的验证。对于更全面的验证,需要额外添加检查日期和行政区划代码的逻辑。此外,如果可能,应优先使用权威部门提供的接口进行身份证号码的校验,以提高准确性。
2022-02-24 上传
1179 浏览量
174 浏览量
147 浏览量
2021-12-14 上传
165 浏览量
2022-05-03 上传
weixin_38654915
- 粉丝: 7
最新资源
- PixelBuilder:小型Java绘图程序源码解析
- 深入理解JavaScript中的Map和Set ES模块特性
- 3D展厅模型设计:展示模型设计的新趋势
- 深入浅出嵌入式QT编程技术指南
- 提升浏览体验:冰王主题4K高清壁纸crx插件
- 探索C语言实战项目案例:源码网站推荐与项目源码分享
- si702stara项目分析及Jupyter Notebook应用
- C#开发者挑战:Xero发票处理解决方案
- Ruby开发中Elasticsearch的集成与应用
- 高清壁纸扩展:个性化新标签页体验
- PixeliumJava源码解析:Android多功能绘图应用实现
- 前端开发项目EKSAMEN:构建与部署流程详解
- WordPress智能next/prev按钮插件发布,全面兼容Classic和Gutenberg!
- 实现图片拖拽到指定位置的JavaScript方法
- C语言实战项目:录音机与赛车游戏源码解析
- TempleSignUp项目1的C#开发实践