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&amp;&amp;mysql)五
Oct 09 PHP
用PHP产生动态的影像图
Oct 09 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
PHP数据库操作三:redis用法分析
Aug 16 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
实用函数8
2007/11/08 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
jQuery总体架构的理解分析
2011/03/07 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
利用python实现微信头像加红色数字功能
2018/03/26 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
会计助理的岗位职责
2013/11/29 职场文书
工作自我评价怎么写
2014/01/29 职场文书
亮化工程实施方案
2014/03/17 职场文书
高级工程师英文求职信
2014/03/19 职场文书
家具商场的活动方案
2014/08/16 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
2015年统战工作总结
2015/05/19 职场文书
党校团干班培训心得体会
2016/01/06 职场文书