验证身份证是否合法算法

可以通过输入身份证的前17位,然后算出18位,与输入的第18位进行校验,判断输入的是否是合法的身份证“

package com.edaixi.testjava;

import java.math.MathContext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestJavaTool {

	private final static int[] FACTOR = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};

    /**
     * 计算前17位身份证号乘以系数后的总和
     * @param id17    前17位身份证号
     * @return
     */
    private static int sumFactor(String id17) {
        if(id17==null || id17.trim().equals("")) {
            return -1; //输入的身份证为空
        }
        int len = id17.length();
        if(len!=17) {
            return -3; //输入的身份证号码不为17位
        }
        int sum = 0;
        for(int i=0; i<len; i++) {
            sum += FACTOR[i] * Integer.parseInt(String.valueOf(id17.charAt(i)));
        }
        return sum;
    }

    /**
     * 根据前17位身份证号,算出第18位的数字
     * @param id17
     * @return
     */
    public static String getLastNumOfID(String id17) {
        int sum = sumFactor(id17);
        String res = "";
        if(sum==-1) {
            return "输入的身份证为空";
        }else if(sum==-3) {
            return "输入的身份证号码不为17位";
        }else {
            int mod = sum % 11;
            switch(mod) {
            case 0:
                res = "1";
                break;
            case 1:
                res = "0";
                break;
            case 2:
                res = "X";
                break;
            case 3:
                res = "9";
                break;
            case 4:
                res = "8";
                break;
            case 5:
                res = "7";
                break;
            case 6:
                res = "6";
                break;
            case 7:
                res = "5";
                break;
            case 8:
                res = "4";
                break;
            case 9:
                res = "3";
                break;
            case 10:
                res = "2";
                break;
            default:
                break;
            }
        }
        return res;
    }

    /**
     * 判断输入的身份证是否合法
     * @param idNum 18位的身份证号
     * @return
     */
    public static boolean isCorrectID(String idNum) {
        boolean flag = false;
        if(idNum==null || idNum.trim().length()!=18) {
            return flag;
        }
        String last = getLastNumOfID(idNum.substring(0, idNum.length()-1));
        if(last.equals(String.valueOf(idNum.charAt(idNum.length()-1)))) {
            flag = true;
        }
        return flag;
    }

    public static void main(String[] args) {
        System.out.println("身份证最后一位是:"+getLastNumOfID("41270219910105361"));
        System.out.println("身份证是否合法:"+isCorrectID("41270219910105361"));

    }
}

  

时间: 2024-10-12 14:49:02

验证身份证是否合法算法的相关文章

验证身份证是否合法

验证输入的身份证号码是否合法 下面的验证没有包含对月份和日期的验证,我测试了几个,对校验码验证正确了,就是正确的,是否还需要验证月份和日期,这个还有待更多号码的测试 package com.gj.idcardverify; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Gre

C# 验证身份证是否合法的函数

主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证 /// <summary> /// 验证身份证是否合法 /// </summary> /// <param name="idCard">要验证的身份证</param> public static bool IsIdCard(string idCard) { //如果为空,认为验证合格 if (IsNullOrEmpty(idCard)) { retu

java验证身份证号码

package com.blue.common.util; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.Map; import org.apache.commons.lang.StringUtils; /** * 身份证工具类 *

如何用javascript正则表达式验证身份证号码是否合法

在用户注册页面有些需求要求的比较严格,需要对身份证js验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客.下面就此实现方法给大家讲解下. 很多时候我们都是通过一组正则表达式来判断用户输入的身份证是否合法,那在用正则表达式判断之前,你对身份证号的组成有多少了解呢?下面来说说一个身份证号里面包含了多少的信息: 1.号码的结构  公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 2.地址码

JAVA验证身份证号码是否合法

package com.chauvet.utils; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.Map;import java.util.regex.Match

javascript验证身份证

身份证规则 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成. 1.将前面的身份证号码17位数分别乘以不同的系数.身份证号码第i位对应的系数为[2^(18-i)] mod 11(此处^代表指数运算). 2.将这17位数字和系数相乘的结果相加 3.用加出来和除以11,得出余数y. 4.校验码为(12 - y) mod 11 若此结果为10,则以小写字母x代替. 问题分析 依据身份证号码规则,可以初步

JavaScript验证身份证号

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

js验证身份证号

/* * 身份证检测(格式.地区.生日.年龄范围) * code:检测字符串 rangeAge:年龄范围[格式为:25-55] * 返回值 0:为空 ,不为0则验证不通过 */ var cityArr = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "

textbox填入后验证输入的合法或根据输入的内容失去焦点后立即得出其他信息

<x:SimpleForm ID="SimpleForm1" runat="server" EnableBackgroundColor="true" ShowBorder="False" BodyPadding="2px" ShowHeader="False"> <Items> <x:Panel ID="Panel3" ShowHeade