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 session和cookie使用说明
Apr 07 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
PHP中COOKIES使用示例
Jul 26 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
Laravel向公共模板赋值方法总结
Jun 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
重置版战役片段
2020/04/09 魔兽争霸
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
Python深入学习之内存管理
2014/08/31 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
优秀团员个人的自我评价
2013/10/02 职场文书
建筑设计师岗位职责
2013/11/18 职场文书
产品促销活动策划书
2014/01/15 职场文书
小学生作文评语
2014/04/18 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
董事会决议范本
2015/07/01 职场文书
三八节活动主持词
2015/07/04 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS