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(1)
Oct 09 PHP
给初学PHP的5个入手程序
Nov 23 PHP
php 远程关机操作的代码
Dec 05 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
Views rows style模板重写代码
May 16 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
php cli换行示例
Apr 22 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
apache集成php7.3.5的详细步骤
Jun 20 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计算页面执行时间的实现代码
2013/06/18 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
在类Unix系统上开始Python3编程入门
2015/08/20 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
Python安装selenium包详细过程
2019/07/23 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
高中生活自我鉴定
2014/01/18 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
教书育人演讲稿
2014/09/11 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
艺术节开幕词
2015/01/28 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL