function checkIdcard($num = '')
{
$length = strlen($num);
if ($length == 15) { //如果是15位身份证 //15位身份证没有字母
if (!is_numeric($num)) {
return false;
}
// 省市县(6位)
$areaNum = substr($num, 0, 6);
// 出生年月(6位)
$dateNum = substr($num, 6, 6); } else if ($length == 18) { //如果是18位身份证 //基本格式校验
if (!preg_match('/^\d{17}[0-9xX]$/', $num)) {
return false;
}
// 省市县(6位)
$areaNum = substr($num, 0, 6);
// 出生年月日(8位)
$dateNum = substr($num, 6, 8); } else { //假身份证
return false;
} $provinceCode = substr($areaNum, 0, 2); // 根据GB/T2260—999,省市代码11到65
if (11 > $provinceCode || $provinceCode > 65) {
return false;
} //验证日期
if (strlen($dateNum) == 6) { //15位身份证号没有年份,这里拼上年份
$dateNum = '19'.$dateNum;
}
$year = intval(substr($dateNum, 0, 4));
$month = intval(substr($dateNum, 4, 2));
$day = intval(substr($dateNum, 6, 2)); //日期基本格式校验
if (!checkdate($month, $day, $year)) {
return false;
} //日期格式正确,但是逻辑存在问题(如:年份大于当前年)
$currYear = date('Y');
if ($year > $currYear) {
return false;
} //验证最后一位
if (strlen($num) == 18) {
$factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
$tokens = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; $checkSum = 0;
for ($i = 0; $i < 17; $i++) {
$checkSum += intval($num{$i}) * $factor[$i];
} $mod = $checkSum % 11;
$token = $tokens[$mod]; $lastChar = strtoupper($num{17}); if ($lastChar != $token) {
return false;
}
} return true;
}

php 验证身份证合法性的更多相关文章

  1. SQL Server 验证身份证合法性函数(使用VBScript.RegExp)

    原文:SQL Server 验证身份证合法性函数(使用VBScript.RegExp) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wzy0623 ...

  2. 验证身份证合法性的js

    分别对15和18位的身份证号进行验证,非常严格. function idCardNo(value){ //验证身份证号方法 : : : : : : : : : : : : : : : : : : : ...

  3. JS验证身份证的合法性

    //验证身份证的合法性 function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:&quo ...

  4. js 精确验证身份证(地址编码、出生日期、校验位验证)

    //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function IdentityCodeValid(code) { ::::::::::::::::: ...

  5. PHP验证身份证格式

    互联网公司对身份证验证的需求越来越多,然而普通的小公司是无法对接公安部门的身份认证系统的.几乎都是在网上买一些大的互联网公司的一些认证服务.即使是便宜一些的认证价格也达到了10万次/万元.也就是一角钱 ...

  6. JAVA代码验证身份证信息

    java验证身份证信息代码 转自:http://www.blogjava.net/xylz/archive/2011/01/05/342330.html import java.util.Calend ...

  7. php验证身份证号码的正确性

    /********************php验证身份证号码是否正确函数*********************/function is_idcard( $id ) {   $id = strto ...

  8. jQuery validation学习(2)验证身份证

    验证邮编 jQuery.validator.addMethod("isZipCode", function(value, element) { -]{}$/; return thi ...

  9. C#验证身份证号码

    一.18位的身份证号码 如:130429####%%%%00781.1~6位为地区代码,其中1.2位数为各省级政府的代码,3.4位数为地.市级政府的代码,5.6位数为县.区级政府代码.如13(河北省) ...

  10. php验证身份证号码正确性

    发布:JB01   来源:脚本学堂     [大 中 小] 分享一例php代码,用于验证身份证号码的正确性,用到了preg_match.preg_replace函数,有需要的朋友可以参考学习下.本文转 ...

随机推荐

  1. Web安全测试之XSS【转】

    作者: 小坦克  来源: 博客园   原文链接:http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html XSS 全称(Cross ...

  2. 把userId:12323 直接拿到12323

    JSONObject jsonObject1 = JSONObject.parseObject(mqttMessage); MessageVo messageVo =  JSONObject.toJa ...

  3. Go实现KMP和Sunday算法

    KMP 1 func KMP(str, substr string) int { 2 if substr == "" { 3 return 0 4 } 5 strLen := le ...

  4. schemer校验器的简单应用

    from schemer import Schema def func(account, password): request_params = { 'account': account, 'pass ...

  5. 多线程学习(第二天)Java内存模型

    一.内存模型基础 Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明. 如果编写多线程程序的Java程序员不理解隐式进行的线程之间通信的工作机制,很可 ...

  6. 2170. 使数组变成交替数组的最少操作数 (Medium)

    问题描述 2170. 使数组变成交替数组的最少操作数 (Medium) 给你一个下标从 0 开始的数组 nums ,该数组由 n 个正整数组成. 如果满足下述条件,则数组 nums 是一个 交替数组 ...

  7. 高精度计算_vector

    #include<bits/stdc++.h> using namespace std; // return a+b; vector<int> add(vector<in ...

  8. 杭电oj 水仙花数

    Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身 ...

  9. locust socektio协议压测

    # -*-coding:UTF-8 -*- from locust import HttpLocust, TaskSet, task, TaskSequence, Locust, events imp ...

  10. spider_使用request库进行get传参

    """使用requests库 在这里爬取百度搜索的端午节页面(使用request库进行get传参)"""import requestsimp ...