IdCardValidate

本文介绍了一个用于验证中国身份证号码有效性的Java程序。该程序能够检查15位和18位身份证号码,并通过正则表达式验证格式,对于18位号码还实现了校验码的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.citigroup.ap.rebt.validateion.util;

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

public class IdCardValidate {

 public static void vlidateIdCard(String idCard) {
  if (idCard.length() == 18) {
   String checkCode = idCard.substring(17, 18);
   if (validateNewRegEx(idCard)) {
    if (checkCode(idCard).equals(checkCode)) {
     System.out.println("身份证号码正确");
    } else {
     System.out.println("校验码错误");
    }
   } else {
    System.out.println("身份证号码有误");
   }
  }

  else if (idCard.length() == 15) {
   if (validateOldRegEx(idCard)) {
    System.out.println("身份证号码正确");
   } else {
    System.out.println("身份证号码有误");
   }
  } else {
   System.out.println("身份证号码长度有误");
  }
 }

 public static boolean validateNewRegEx(String idCard) {
  String regEx = "^[1-6]\\d{5}[1-2]\\d{3}((0\\d)|1[0-2])(([0-2]\\d)|(3[0-1]))\\d{3}([0-9]|X)$";
  Pattern pat = Pattern.compile(regEx);
  Matcher mat = pat.matcher(idCard);
  return mat.find();

 }

 public static boolean validateOldRegEx(String idCard) {
  String regEx = "^[1-6]\\d{5}\\d{2}((0\\d)|1[0-2])(([0-2]\\d)|(3[0-1]))\\d{3}$";
  Pattern pat = Pattern.compile(regEx);
  Matcher mat = pat.matcher(idCard);
  return mat.find();

 }

 public static String checkCode(String idCard) {
  int w[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
  int sum = 0;
  int number = 0;
  String num = null;
  for (int i = 0; i < 17; i++) {
   String s = idCard.substring(0, 1);
   sum += Integer.parseInt(s) * w[i];
   idCard = idCard.substring(1, idCard.length());
  }
  number = sum % 11;
  switch (number) {
  case 0:
   num = "1";
   break;
  case 1:
   num = "0";
   break;
  case 2:
   num = "X";
   break;
  case 3:
   num = "9";
   break;
  case 4:
   num = "8";
   break;
  case 5:
   num = "7";
   break;
  case 6:
   num = "6";
   break;
  case 7:
   num = "5";
   break;
  case 8:
   num = "4";
   break;
  case 9:
   num = "3";
   break;
  case 10:
   num = "2";
   break;
  }

  return num;
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值