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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
学习php中的正则表达式
Aug 17 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 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 xml实例 留言本
2009/03/20 PHP
PHP 翻页 实例代码
2009/08/07 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
深入解析Python中的__builtins__内建对象
2016/06/21 Python
JSON Web Tokens的实现原理
2017/04/02 Python
python实现C4.5决策树算法
2018/08/29 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
python连接mongodb集群方法详解
2020/02/13 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
争做文明公民倡议书
2014/08/29 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
2014年服务员工作总结
2014/11/18 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
pytorch 使用半精度模型部署的操作
2021/05/24 Python
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android