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新手上路(十三)
Oct 09 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php知道与问问的采集插件代码
Oct 12 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
php如何获取文件的扩展名
Oct 28 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
PHP工厂模式的日常使用
Mar 20 PHP
一文搞懂php的垃圾回收机制
Jun 18 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
Python WSGI的深入理解
2018/08/01 Python
pycharm安装和首次使用教程
2018/08/27 Python
python tornado使用流生成图片的例子
2019/11/18 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
文员岗位职责范本
2014/03/08 职场文书
合作意向协议书范本
2014/03/31 职场文书
临床护理求职信
2014/04/26 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2015年工程部工作总结
2015/04/30 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
Vue全家桶入门基础教程
2021/05/14 Vue.js
Python中的xlrd模块使用整理
2021/06/15 Python