/*
         * 身份证15位编码规则:dddddd yymmdd xx p
         * dddddd:6位地区编码
         * yymmdd: 出生年(两位年)月日,如:910215
         * xx: 顺序编码,系统产生,无法确定
         * p: 性别,奇数为男,偶数为女
         *
         * 身份证18位编码规则:dddddd yyyymmdd xxx y
         * dddddd:6位地区编码
         * yyyymmdd: 出生年(四位年)月日,如:19910215
         * xxx:顺序编码,系统产生,无法确定,奇数为男,偶数为女
         * y: 校验码,该位数值可通过前17位计算获得
         *
         * 前17位号码加权因子为 Wi = [ 7,9,10,5,8,4,2,1,6,3,7,2 ]
         * 验证位 Y = [ 1,2 ]
         * 如果验证码恰好是10,为了保证身份证是十八位,那么第十八位将用X来代替
         * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
         * i为身份证号码1...17 位; Y_P为校验码Y所在校验码数组位置
        */
         function validateIdCard(idCard){
            //15位和18位身份证号码的正则表达式
            var regIdCard=/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;

            //如果通过该验证,说明身份证格式正确,但准确性还需计算
            if(regIdCard.test(idCard)){
                if(idCard.length==18){
                    var idCardWi=new Array( 7,2 ); //将前17位加权因子保存在数组里
                    var idCardY=new Array( 1,2 ); //这是除以11后,可能产生的11位余数、验证码,也保存成数组
                    var idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和
                    for(var i=0;i<17;i++){
                        idCardWiSum+=idCard.substring(i,i+1)*idCardWi[i];
                    }

                    var idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
                    var idCardLast=idCard.substring(17);//得到最后一位身份证号码

                    //如果等于2,则说明校验码是10,身份证号码最后一位应该是X
                    if(idCardMod==2){
                        if(idCardLast=="X"||idCardLast=="x"){
                            alert("恭喜通过验证啦!");
                        }else{
                            alert("身份证号码错误!");
                        }
                    }else{
                        //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
                        if(idCardLast==idCardY[idCardMod]){
                            alert("恭喜通过验证啦!");
                        }else{
                            alert("身份证号码错误!");
                        }
                    }
                }
            }else{
                alert("身份证格式不正确!");
            }
        }

身份证号详细验证的正则的更多相关文章

  1. 如何使用Firebase在iOS上验证用户的电子邮件地址?

    我坚持使用firebase进行电子邮件验证.我四处寻找指导但没有帮助.在用户验证他的电子邮件后,我的代码仍然打印出用户尚未验证.我还在尝试习惯firebase的语法.这是我的代码:这是我注册部分的代码:解决方法您在签名之前检查了用户电子邮件是否已经过验证.这对我有用.

  2. xcode – UIAlertController Segue到不同的页面(Swift)

    我能够为我的按钮编写一个UIAlertController,它工作正常,但是当我按下YES或OK按钮时,我不知道如何切换到不同的页面.目前,YES或OK按钮无处可去.解决方法您可以在故事板中创建一个segue,控制从场景顶部的黄色视图控制器拖动到新的视图控制器.然后在检查器中为该segue指定一个标识符.您可以从代码中的处理程序中调用它.

  3. ios – 使用Swift实现应用内邮件失败

    我想使用swift来实现应用内电子邮件.当我点击按钮时,会弹出电子邮件窗口.但是,我无法发送电子邮件.此外,点击取消删除草稿后,我无法返回到原始屏幕.解决方法由于您尚未将当前视图控制器设置为myMail的mailComposeDelegate,因此未调用mailComposeController:didFinishWithResult方法.初始化myMail后,请确保添加:你会很好的去

  4. iOS Swift – 如何以编程方式为所有按钮指定默认操作

    除非通过界面生成器或以编程方式分配其他操作,否则如何为UIButton分配默认操作以显示警报?解决方法那么你想要实现的目标是什么.我已经使用UIViewController扩展并添加了一个闭包作为没有目标的按钮的目标.如果按钮没有动作,则会显示警报.我测试了它.希望这可以帮助.快乐的编码.

  5. iOS如何在任何地方点击UIAlertView?

    我想通过一键轻松将UIAlertView的任何地方关掉.我想显示一个UIAlertView没有任何按钮.我在这里有标准的UIAlertView代码,但我需要输入如何解除它,如果可能的话.用UITouch?

  6. ios – 扩展UIAlertController方便初始化警告

    当我定义一个UIAlertController方便初始化器时:并在我的UIViewController子类中的按钮操作中使用它:然后单击模拟器上的那个按钮,我收到一个警告:Attemptingtoloadtheviewofaviewcontrollerwhileitisdeallocatingisnotallowedandmayresultinundefinedbehavior(UIAlertCo

  7. ios – UIAutomation:任何方式来解雇“想使用您当前的位置”提醒?

    我的应用程序正在使用位置服务,而对于自动测试,我想要能够解除“APP想要使用当前位置”弹出窗口.但是,当我尝试使用UIAutomation脚本在Instruments中执行此操作时,我会收到此错误:这样做是有道理的,因为警报是由不同的过程产生的.但是,在这种情况下,苹果计划如何帮助人们自动化测试?

  8. ios – 如何在警报控制器的文本框中设置数字键盘[swift]

    我试图呼叫一个具有文本字段的警报控制器.但是我想立即显示数字键盘,因为用户只能输入数字.我尝试了以下,但它不工作.解决方法发现自己!这可能对别人有用.

  9. ios – AlertController不在窗口层次结构中

    我该怎么办?

  10. ios – 我可以检查现在是否有任何UIAlertView显示?

    我找到了这段代码但它是私有API,我的应用程序可能会被Apple拒绝.有没有合法的方法来做到这一点?解决方法对于低于iOS7的设备:–当您创建UIAlertView的主体时,[alertViewShow]会在主窗口中添加子视图.因此,要检测UIAlertView,您只需检查当前UIView的子视图,因为UIAlertView继承自UIView.编辑:–适用于使用iOS7的设备和注意:–如果您不能使用第三方API,那么iOS7中唯一真正的选项是实际跟踪您的警报视图.

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部