资讯专栏INFORMATION COLUMN

php 验证 手机号码

Michael_Ding / 1122人阅读

摘要:校验位按照的规定生成,可以认为是数字。如果你只需要简单的校验身份证号码的话,你只需要使用我上面的正则规则进行校验即可,如果需要严格校验的话,可以使用我上面的验证方法来进行校验

最近公司让我将身份证校验改为严格校验,刚开始我使用了网上找到的身份证正则校验进行校验:

/^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$|^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}([0-9]|X)$/

但是,老板说这个校验没有进行严格的身份证校验,这个校验只校验了身份证的格式是否正确,无法判断身份证号码格式是否正确

下面为严格校验身份证号码的校验方法:

/**
     * function: checkNum
     * author: wangjian
     * date: 2019/4/16 15:21
     * 检测身份证号是否正确
     */
    function checkNum($num_id)
    {
        $num_id = strtoupper($num_id);
        $regx = "/^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$|^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}([0-9]|X)$/";
        $arr_split = array();
        if(!preg_match($regx, $num_id))
        {
            return FALSE;//正则校验
        }
        if(15==strlen($num_id)) //检查15位
        {
            $regx = "/^(d{6})+(d{2})+(d{2})+(d{2})+(d{3})$/";
            @preg_match($regx, $num_id, $arr_split);
            //检查生日日期是否正确
            $dtm_birth = "19".$arr_split[2] . "/" . $arr_split[3]. "/" .$arr_split[4];
            if(!strtotime($dtm_birth))
            {
                return FALSE;
            } else {
                return TRUE;
            }
        }
        else      //检查18位
        {
            $regx = "/^(d{6})+(d{4})+(d{2})+(d{2})+(d{3})([0-9]|X)$/";
            @preg_match($regx, $num_id, $arr_split);
            $dtm_birth = $arr_split[2] . "/" . $arr_split[3]. "/" .$arr_split[4];
            if(!strtotime($dtm_birth)) //检查生日日期是否正确
            {
                return FALSE;
            }
            else
            {
                //检验18位身份证的校验码是否正确。
                //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
                $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
                $arr_ch = array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
                $sign = 0;
                for ( $i = 0; $i < 17; $i++ )
                {
                    $b = (int) $num_id{$i};
                    $w = $arr_int[$i];
                    $sign += $b * $w;
                }
                $n = $sign % 11;
                $val_num = $arr_ch[$n];
                if ($val_num != substr($num_id,17, 1))
                {
                    return FALSE;
                }
                else
                {
                    return TRUE;
                }
            }
        }
    }

如果你只需要简单的校验身份证号码的话,你只需要使用我上面的正则规则进行校验即可,如果需要严格校验的话,可以使用我上面的验证方法来进行校验

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31280.html

相关文章

  • 如何优雅的设计PHP异常

    摘要:现在我就用框架来进行实战下在实际业务中是如何优雅的使用异常的场景描述选择一个比较简单的业务场景,以登录模块为例,用户在移动端进行登录时,需要进行登录,注册,忘记密码,获取手机验证码等接口。 前言 刚开始接触PHP的时候没有意识到异常的重要性,有时候出问题很难精确的找到问题点,正确的处理异常也是一门学问 异常的类别 PHP7异常做了很多变动,异常类 Exception 和错误类 Erro...

    wing324 评论0 收藏0
  • 【日常手记】之Laravel5.3

    摘要:个人网站最近刚写了一个手机在线播放的电影站使用日常手记更新使用的的查询作用域的本地作用域去自定义可复用的约束集合,方便链式调用什么是本地查询作用域本地作用域允许我们定义通用的约束集合以便在应用中复用。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:...

    kidsamong 评论0 收藏0
  • Laravel SMS 短信发送包

    摘要:支持短信验证码未验证时,用户再次请求验证码,在有效分钟内验证码保持一致。集成短信发送路由,支持和发送方式。有效期为分钟,请尽快验证。 Laravel Sms Laravel 贴合实际需求同时满足多种通道的短信发送组件 showImg(https://segmentfault.com/img/remote/1460000013101233);showImg(https://segment...

    Seay 评论0 收藏0
  • 如何在 Laravel 中 “规范” 的开发验证码发送功能【社交系统ThinkSNS研发日记十一】

    摘要:需求场景发送验证码或者消息通知,可发送到手机或邮箱中。完成首先,在中的规范就是使用的消息通知,这里基于场景为验证码。所以我们在验证码模型中添加是完全符合通知的正确使用的。 顺便发个小通知:7月15日ThinkSNS+开源版发布,同时非开源的APP也走出内测阶段,体验二维码也全面发布体验。 什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小...

    Flands 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<