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中文汉字验证码
Apr 08 PHP
php查看session内容的函数
Aug 27 PHP
php反弹shell实现代码
Apr 22 PHP
php实现按文件名搜索文件的远程文件查找器
May 10 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
PHP unset函数原理及使用方法解析
Aug 14 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
php接口隔离原则实例分析
2019/11/11 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
Javascript的比较汇总
2016/07/25 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
python 设置文件编码格式的实现方法
2017/12/21 Python
Python扩展内置类型详解
2018/03/26 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
七年级历史教学反思
2014/02/05 职场文书
人事文员岗位职责
2014/02/16 职场文书
敬老模范事迹
2014/05/21 职场文书
优质服务口号
2014/06/11 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
经营场所使用证明
2015/06/19 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
Python类方法总结讲解
2021/07/26 Python