php从字符串中提取身份证号(代码汇总)

15位数身份证验证正则表达式:
$sfzh=preg_match(“/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/
”,"字符串");
$sfzh=preg_match(“/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/”,"字符串");

======================

echo preg_match("/[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}/",'asdfsd撒旦法撒旦法撒旦法撒旦法撒旦法撒旦法撒旦法撒旦法131327198611121810撒旦法撒旦法岁的斯蒂芬撒旦法',$arr);
echo "";
var_dump($arr);
首先,这是一个php正则表达式,第一个参数是身份证号的正则表达式,第二个是你的字符串,如果匹配成功将返回真,第三个参数将匹配到的身份照赋值给$arr,他是个数组格式,$arr[0]就是你完整匹配到的身份证号

========================

全网的方法主要是使用PHP验证身份证而不是从字符串提取(抽取、获取)身份证,错误发生在元符号"^"和"$"上面,删掉这两个元符号即可。
$string='which has id in';
$pattern = '/[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]/';
preg_match($pattern, $string, $matches);
var_dump($matches);
18位的身份证号每一位都代表什么 例如:110102197810272321

echo substr(110102197810272321,0,2)."<br>"; // 省级政府的代码 12 
echo substr(110102197810272321,2,2)."<br>"; // 代表地、市级政府代码。01 
echo substr(110102197810272321,4,2)."<br>"; // 代表县、区级政府代码。 06 
echo substr(110102197810272321,6,8)."<br>"; // 获取身份证的生日 1993/11/09 
echo substr(110102197810272321,14)."<br>"; // 7017 15-18位代表身份证持有人在当地的顺序码,其中奇数为男、偶数为女。

=================

15位身份证每一位都代表什么 例如:230103681116482

echo substr(230103681116482,0,6)."<br>"; // 前6位代表地区代码。 230103 
echo substr(230103681116482,6,6)."<br>";// 7-12位代表出生年、月、日。 
echo substr(230103681116482,12)."<br>";// 13-15位代表身份证持有人在当地的顺序号,其中奇数代表男性,偶数代表女性。
PHP验证身份证号正则表达式代码

$IDCard='';$preg_card='/^\d{15}$)|(^\d{17}([0-9]|X)$/isu';if(preg_match($preg_card,$IDCard)){
    echo 1;}else{
    echo 0;}

注意:这里只是对身份证号中的数字与位数进行的验证,如果想要严格的验证,请参考本博客的关于身份证号码验证的其它文章。
php 身份证的正则表达式怎么写?

$IdCard = "/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/i";
提示 :正则格式: ‘/正则表达式/模式修正符’;
所以 添加 i 是忽略英文字母大小写的

===================

/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/
一般地 身份证有15位或18位  18位的最后一位还有可能是字母X或x  
我直接复制我以前写的函数给你,知道你是伸手党
/**
 * Notes:身份证是否合法
 * User: 
 * Name: 
 * Date: 2020/2/11
 * Time: 2:32
 * copyright: 
 * @param $vStr
 * @return bool
 */
private function isCreditNo($vStr){
    $vCity = array(
        '11','12','13','14','15','21','22',
        '23','31','32','33','34','35','36',
        '37','41','42','43','44','45','46',
        '50','51','52','53','54','61','62',
        '63','64','65','71','81','82','91'
    );
    if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) return false;
    if (!in_array(substr($vStr, 0, 2), $vCity)) return false;
    $vStr = preg_replace('/[xX]$/i', 'a', $vStr);
    $vLength = strlen($vStr);
    if ($vLength == 18) {
        $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2);
    } else {
        $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2);
    }
    if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) return false;
    if ($vLength == 18) {
        $vSum = 0;
        for ($i = 17 ; $i >= 0 ; $i--) {
            $vSubStr = substr($vStr, 17 - $i, 1);
            $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11));
        }
        if($vSum % 11 != 1) return false;
    }
    return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值