java代码怎么校验身份证号码含有非法字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java代码怎么校验身份证号码含有非法字符相关的知识,希望对你有一定的参考价值。

如果只要判断有非法的字符(除0-9和Xx外)可用正则表达式publicstaticvoidmain(String[]args)//TODOcodeapplicationlogichereStrings="2142213weqrwe32";StringregEx="[^0-9Xx]";Patternpat=Pattern.compile(regEx);Matchermat=pat.matcher(s);booleanrs=mat.find();if(rs)System.out.print("有非法字符");另外,校验身份证号码有专门程序的,可直接校验身份证号是否正确,在自己在网上找下 参考技术A 首先,定义哪些是非法字符,,,,,,,然后使用循环,取各字符判断是否非法字符中的,,,字符串有方法 charAt(int)去获取字符串中的字符。。。。。。。
~~~~~~~~~~~~~~~~~~~~~~~
参考技术B 如果只要判断有非法的字符(除0-9和Xx外)可用正则表达式publicstaticvoidmain(String[]args)//TODOcodeapplicationlogichereStrings="2142213weqrwe32";StringregEx="[^0-9Xx]";Patternpat=Pattern.compile(regEx);Matchermat=pat.matcher(s);booleanrs=mat.find();if(rs)System.out.print("有非法字符");另外,校验身份证号码有专门程序的,可直接校验身份证号是否正确,在自己在网上找下 参考技术C 正则表达式:判定代码如下:if((!Regex.IsMatch(txtID.Text,@"^(^\d15$|^\d18$|^\d17(\d|X|x))$",RegexOptions.IgnoreCase)))MessageBox.Show("请输入正确的身份证号码!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);return;

爆破火车票上的出生日期

# -*- coding: utf-8 -*-
import re
import datetime 
#Errors=[‘验证通过!‘,‘身份证号码位数不对!‘,‘身份证号码出生日期超出范围或含有非法字符!‘,‘身份证号码校验错误!‘,‘身份证地区非法!‘]
def checkIdcard(idcard):
    Errors=[验证通过!,身份证号码位数不对!,身份证号码出生日期超出范围或含有非法字符!,身份证号码校验错误!,身份证地区非法!]
    area={"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":"国外"}
    idcard=str(idcard)
    idcard=idcard.strip()
    idcard_list=list(idcard)
    kk=1
    #地区校验,存在BUG,如果不存在area的话,会报错
    if(not area[(idcard)[0:2]]):
        print Errors[4]

    #15位身份号码检测
    if(len(idcard)==15):
        if((int(idcard[6:8])+1900) % 4 == 0 or((int(idcard[6:8])+1900) % 100 == 0 and (int(idcard[6:8])+1900) % 4 == 0 )):
            erg=re.compile([1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$)#//测试出生日期的合法性
        else:
            ereg=re.compile([1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$)#//测试出生日期的合法性
        if(re.match(ereg,idcard)):
            print Errors[0]
        else:
            print Errors[2]
    #18位身份号码检测
    elif(len(idcard)==18):
        #出生日期的合法性检查
        #闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
        #平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
        if(int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10])%4 == 0 )):
            ereg=re.compile([1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$)#//闰年出生日期的合法性正则表达式
        else:
            ereg=re.compile([1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$)#//平年出生日期的合法性正则表达式
        #//测试出生日期的合法性
        if(re.match(ereg,idcard)):
            #//计算校验位
            S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (int(idcard_list[1]) + int(idcard_list[11])) * 9 + (int(idcard_list[2]) + int(idcard_list[12])) * 10 + (int(idcard_list[3]) + int(idcard_list[13])) * 5 + (int(idcard_list[4]) + int(idcard_list[14])) * 8 + (int(idcard_list[5]) + int(idcard_list[15])) * 4 + (int(idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(idcard_list[8]) * 6 + int(idcard_list[9]) * 3
            Y = S % 11
            M = "F"
            JYM = "10X98765432"
            M = JYM[Y]#判断校验位
            if(M == idcard_list[17]):#检测ID的校验位
                print idcard
                print Errors[0]
            else:
                kk=1 
                 # print Errors[3]
        else:
            kk=1
            # print Errors[2]
    else:
        kk=1
        # print Errors[1]
 
 
if __name__ == "__main__":
        sub=str(raw_input("please input sub 6 num:"))
        check=str(raw_input("please input check num:"))

        start=19970101
        end=19980101

        datestart=datetime.datetime.strptime(start,%Y%m%d) 
        dateend=datetime.datetime.strptime(end,%Y%m%d) 

        while datestart<dateend: 
            datestart+=datetime.timedelta(days=1) 
            CardNum = sub+str(datestart.strftime(%Y%m%d) )+check
            checkIdcard(CardNum)

 

以上是关于java代码怎么校验身份证号码含有非法字符的主要内容,如果未能解决你的问题,请参考以下文章

java身份证号位数校验

python 身份证验证

软工作业PSP与单元测试训练

比较严谨的java验证18位身份证号码

Java实现身份证号码校验

身份证号的末位校验码算法最后一步模11是基于啥考虑?