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编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
PHP实现多图片上传类实例
Jul 26 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
php 多文件上传的实现实例
Oct 23 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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使用ODBC连接数据库的方法
2015/07/18 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
nuxt.js 缓存实践
2018/06/25 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
python基于SMTP协议发送邮件
2019/05/31 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python修改FTP服务器上的文件名
2019/09/11 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
软件测试企业面试试卷
2016/07/13 面试题
企业车辆管理制度
2014/01/24 职场文书
社区母亲节活动方案
2014/03/05 职场文书
班组长竞聘书
2014/03/31 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书