PHP身份证校验码计算方法


Posted in PHP onAugust 10, 2016

中国(大陆)公民身份证号码每一位所代表的意义,网上很多文章都有介绍,在此就不多说。其中身份证号码的最后一位是校验码,跟据前17位计算得到。算法大 概是这样:把前17位的每一个数字和一串加权因子相乘,再计算这些乘积的和;把这些乘积的和模11得到的数字作为序号,最后在一个校验码串中提取出与序号 相对应的字符。当然,网上也有不少的文章教大家计算这个校验码,下面我们将尝试用PHP语言来完成这一工作,也许可以用于PHP开发中,如校验用户的身份证号码是否正确。

假设某中国(大陆)公民的身份证号码前17位是这个:44010221990101001(注:此人出生于2199年),那么我们跟据上面的算法尝试写几行PHP代码来完成校验码的计算。为了能让大家更容易理解,我使用了较简单的语句,请看代码:

<?php
//身份证号码前17位,可以从各种数据源中获得(如数据库、用户提交的表单等)
$body = '44010221990101001';
//加权因子
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//校验码串
$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
//按顺序循环处理前17位
for ($i = 0;$i < 17;$i++) {
//提取前17位的其中一位,并将变量类型转为实数
$b = (int) $body{$i};
//提取相应的加权因子
$w = $wi[$i];
//把从身份证号码中提取的一位数字和加权因子相乘,并累加
$sigma += $b * $w;
}
//计算序号
$number = $sigma % 11;
//按照序号从校验码串中提取相应的字符。
$check_number = $ai[$number];
//输出
echo $body.$check_number;
?>

运行以上代码之后,可以算出该身份证的校验码为9。大家可以用自己身份证的前17位试试。

如果你明白上面的例子的话,就可以把这段代码的一些语句合并,去除没必要的变量,优化得到如下代码:

<?php
$body = '44010221990101001';
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
for ($i = 0;$i < 17;$i++) {
$sigma += ((int) $body{$i}) * $wi[$i];
}
echo $body.$ai[($sigma % 11)];
?>

以上所述是小编给大家介绍的PHP身份证校验码计算方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php自动加载的两种实现方法
Jun 21 PHP
php实现用户在线时间统计详解
Oct 08 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
深入apache host的配置详解
Jun 09 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
PHP5.4起内置web服务器使用方法
Aug 09 #PHP
PHP Filter过滤器全面解析
Aug 09 #PHP
学习PHP Cookie处理函数
Aug 09 #PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 #PHP
PHP怎样用正则抓取页面中的网址
Aug 09 #PHP
php阳历转农历优化版
Aug 08 #PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 #PHP
You might like
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
Vue 短信验证码组件开发详解
2017/02/14 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
ipython和python区别详解
2019/06/26 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
门前三包责任书
2014/04/15 职场文书
人力资源求职信
2014/05/25 职场文书
助残日活动总结
2014/08/27 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
2016年学校招生广告语
2016/01/28 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
MySQL数据库 任意ip连接方法
2022/05/20 MySQL