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 htmlspecialchars加强版
Feb 16 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
php以post形式发送xml的方法
Nov 04 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
PHP递归实现层级树状展开
Apr 01 PHP
php封装的mysqli类完整实例
Oct 18 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 PHP
php根据命令行参数生成配置文件详解
Mar 15 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
深入解析php模板技术原理【一】
2008/01/10 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php构造函数与析构函数
2016/04/23 PHP
Javascript开发包大全整理
2006/12/22 Javascript
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
深究AngularJS中$sce的使用
2017/06/12 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
Python3写入文件常用方法实例分析
2015/05/22 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Python实现SMTP邮件发送
2020/06/16 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
北京某公司的.net笔试题
2014/03/20 面试题
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
全国助残日活动总结
2015/05/11 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python