PHP身份证验证
/**
* 身份证号码验证(真正要调用的方法)
* @param $id_card 身份证号码
*/
function validation_filter_id_card($id_card)
{
if (strlen($id_card) == 18) {
$idcard_base = substr($id_card, 0, 17);
if (idcard_verify_number($idcard_base) != strtoupper(substr($id_card, 17, 1))) {
return false;
} else {
return true;
}
} elseif ((strlen($id_card) == 15)) {
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if (array_search(substr($id_card, 12, 3), array('996', '997', '998', '999')) !== false) {
$idcard = substr($id_card, 0, 6) . '18' . substr($id_card, 6, 9);
} else {
$idcard = substr($id_card, 0, 6) . '19' . substr($id_card, 6, 9);
}
$idcard = $idcard . idcard_verify_number($idcard);
if (strlen($idcard) != 18) {
return false;
}
$idcard_base = substr($idcard, 0, 17);
if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))) {
return false;
} else {
return true;
}
} else {
return false;
}
} /**
* 计算身份证校验码,根据国家标准GB 11643-1999
* @param $idcard_base 身份证号码
*/
function idcard_verify_number($idcard_base)
{
if (strlen($idcard_base) != 17) {
return false;
}
//加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//校验码对应值
$verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$checksum = 0;
for ($i = 0; $i < strlen($idcard_base); $i++) {
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
}
$mod = $checksum % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number;
}
PHP身份证验证的更多相关文章
- 身份证验证JS代码
身份证验证JS程序function checkidcardfun(code) { var city = {11: "北京", 12: "天津", 13: &qu ...
- java身份证验证
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- jQuery身份证验证插件
jQuery身份证验证插件 /*! * jQuery isIDCard Plugin v1.0.0 * http://www.cnblogs.com/cssfirefly/p/5629561.html ...
- java对身份证验证及正则表达式解析
原文地址:http://www.cnblogs.com/zhongshengzhen/ java对身份证验证及正则表达式解析 package service; import java.text.Par ...
- Jsp注册页面身份证验证
<!--身份证验证 --><script type="text/javascript">function isCardNo(Idcardnumber) { ...
- C#实现中国身份证验证问题
C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 今天写的 C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 理论部分: 1 ...
- 【NumberValidators】大陆身份证验证
需要说明的是这里的大陆身份证识别并不是公安局联网的识别,而是按国标GB 11643进行的验证,所以其验证结果只能说符合国标规范,但不能保证该身份证一定真实存在,如果你实际需求是希望身份证一定真实存在, ...
- Java正则表达式实现港、澳、台身份证验证
最近由于业务的要求,需要进行港.澳.台人员身份证验证,现在直接上代码,经供参考学习,也为自己积累一些工具类: package com.qiu.validate; public class regexV ...
- js邮箱验证,身份证验证,正则表达式
邮箱验证: html部分: 邮箱验证:<input type="text" id="mail" value="" / onkeyup= ...
- Java基础之身份证验证
//简约版package test; import java.util.Scanner; public class ID { /** * 匹配算法 : 1) 得到17位身份证号码与下面给出的17位 2 ...
随机推荐
- 2019.6.24 校内测试 NOIP模拟 Day 2 分析+题解
看到Day 2的题真的想打死zay了,忒难了QwQ~ T1 江城唱晚 这明显是个求方案数的计数问题,一般的套路是DP和组合数学. 正如题目中所说,这个题是一个 math 题. ----zay ...
- Django基础之中间件的执行流程
当请求到达中间件以后,先按照正序执行每个注册中间件的process_request方法,process_request方法返回的值是None,就依次执行. 如果返回的值是HttpResponse对象, ...
- LVM问题-----Insufficient Free Extents for a Logical Volume
Linux LVM学习——Insufficient Free Extents for a Logical Volume 如下所示,在创建LV的时候,偶尔会遇到“Volume group "x ...
- REGIONAL SCRUM GATHERING(RSG)2019 CHINA.
欢迎参加 REGIONAL SCRUM GATHERING(RSG)2019 CHINA. 今年RSG将于2019年8月23号~24号,在北京新世界酒店举办.在为期2天的敏捷大会中,将有接近40位国内 ...
- golang入门time与string转换, time加减时间, 两个时间差
package main import ( "fmt" "time") var timeLayoutStr = "2006-01-02 15:04:0 ...
- LC 985. Sum of Even Numbers After Queries
We have an array A of integers, and an array queries of queries. For the i-th query val = queries[i] ...
- 使用es6一句话去重
let arr = [1,2,3,4,5,1,2,3] let arr2 = Array.from(new Set(arr)) console.log(arr2) //[1,2,3,4,5]
- smarty 对数据库的简单操作。
smarty简单配置 -------------------------------------smarty_inc.php-------------------------------------- ...
- 怎么通过原生JS改变元素的class属性
解决方法:document.getElementById('test').className = 'emphasis' Eg: <!doctype html> <html lang= ...
- [Scikit-learn] 1.4 Support Vector Classification
Ref: http://sklearn.lzjqsdd.com/modules/svm.html Ref: CS229 Lecture notes - Support Vector Machines ...