⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commontools.java

📁 个人新旧身份证
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.dtbridge.loan.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.regex.*;
import com.dtbridge.core.struts.ActionContext;

public class CommonTools {

	private static CommonTools instance = null;

	public static synchronized CommonTools getInstance() {
		if (instance == null)
			instance = new CommonTools();
		return instance;
	}

	private CommonTools(){

	}


//	旧身份证转换成新身份证号码
    public static String getNewIdCard(String oldIDCard) throws Exception{
    	oldIDCard = oldIDCard.trim();
    	if(oldIDCard.length() != 15 && oldIDCard.length()!= 18)
    		throw new Exception("参数错误: 15位身份证位数不对, 无法转换!");
    	if(oldIDCard.length() == 18)
    		return oldIDCard;
    	// 身份验证代码块结束
    	String checkMsg = "";
    	boolean isNew = oldIDCard.length()== 18 ? true : false;
		try {
			if(oldIDCard.length() != 15 && oldIDCard.length() != 18)
				return checkMsg += "身份证号的长度错误!";
			//获取出生日期 并验证开始
			String idDate = (isNew? oldIDCard.substring(6,6+8):"19" + oldIDCard.substring(6,6+6));
			String dateStr = idDate.substring(0,4)+"-"+idDate.substring(4,6)+"-"+idDate.substring(6,8);
	        DateFormat df = DateFormat.getDateInstance();
	        df.setLenient(false);
	        try {
	            Date date= df.parse(dateStr);
	            if(date==null)
	            	checkMsg += "身份证号的出生日期错误!";
	        } catch (ParseException e) {
	        	checkMsg += "身份证号的出生日期错误!";
	        }
	        //获取出生日期 并验证开始
		} catch (NumberFormatException ne) {
			checkMsg = "身份证号码中存在非法字符!";
		}
    	if(!checkMsg.equals(""))
    		throw new Exception("验证信息: " + checkMsg);
//    	 身份验证代码块结束

    	byte[] Wi=new byte[17];
        for(int i=0;i<Wi.length;i++){
            int k = (int) Math.pow(2, (Wi.length-i));
            Wi[i] = (byte)(k % 11);
        }
        String newIDCard = oldIDCard.substring(0, 6);
        newIDCard += "19";
        newIDCard += oldIDCard.substring(6, oldIDCard.length());

        int sum = 0;
        byte[] Win=new byte[17];
        for(int i=0; i<17; i++){
            sum += Integer.parseInt(newIDCard.substring(i,i+1)) * Win[i];
        }
        byte iCode = (byte) (sum % 11);
        String ch = "10X98765432".substring(iCode,iCode+1);
        return newIDCard += ch;
    }

    //新身份证转换成旧身份证号码
    public static String toOldIDCard(String newIDCard) throws Exception{
    	newIDCard = newIDCard.trim();
    	String msg = "";
    	if(newIDCard.length() != 18 && newIDCard.length() != 15)
    		throw new Exception("参数错误: 18位身份证位数不对, 无法转换!");
    	if(newIDCard.length() == 15)
    		return newIDCard;
    	String checkMsg = "";
    	boolean isNew = newIDCard.length()== 18 ? true : false;
		try {
			if(newIDCard.length() != 15 && newIDCard.length() != 18)
				return checkMsg += "身份证号的长度错误!";
			String idDate = (isNew? newIDCard.substring(6,6+8):"19" + newIDCard.substring(6,6+6));
			String dateStr = idDate.substring(0,4)+"-"+idDate.substring(4,6)+"-"+idDate.substring(6,8);
	        DateFormat df = DateFormat.getDateInstance();
	        df.setLenient(false);
	        try {
	            Date date= df.parse(dateStr);
	            if(date==null)
	            	checkMsg += "身份证号的出生日期错误!";
	        } catch (ParseException e) {
	        	checkMsg += "身份证号的出生日期错误!";
	        }
		} catch (NumberFormatException ne) {
			checkMsg = "身份证号码中存在非法字符!";
		}
    	if(!checkMsg.equals(""))
    		throw new Exception("验证信息: " + msg);
    	byte[] Wi=new byte[17];
        for(int i=0;i<Wi.length;i++){
            int k = (int) Math.pow(2, (Wi.length-i));
            Wi[i] = (byte)(k % 11);
        }
        return newIDCard.substring(0,6)+newIDCard.substring(6+"19".length(),newIDCard.length()-1);
    }

	/**
	 * 身份证验证
	 * @param idcard
	 * @return
	 */
	public boolean isIdCard(String idcard) {
		final int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,
				1 };
		final int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
		int[] ai = new int[18];
		int remaining = 0;
		String x = null;

		if (idcard.trim().length() !=15 && idcard.trim().length() !=18)
			return false;
		if (idcard.trim().length() == 15) {//15位身份证的判断
			for (int j=1;j<=15;j++)
			{
					//if (idcard.substring(j,j+1).indexOf("0123456789")==0)
					//{
					//	return false;
					//}
			}
			String idcardyear="";
			idcardyear="19"+idcard.substring(6,8);//取年份

			if (Integer.parseInt(idcardyear)<=1900 || Integer.parseInt(idcardyear)>=2000)
			{
				return false;
			}
			int idcardmonth=Integer.parseInt(idcard.substring(8,10));   //取月份

			if (idcardmonth==0 || idcardmonth>12)
			{
				return false;
			}
			int y=Integer.parseInt(idcardyear);
			int idcardday=Integer.parseInt(idcard.substring(10,12)); //取日
			switch (idcardmonth)
			{
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				if (idcardday<=0 || idcardday>31)
				{
					return false;

				}
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				if (idcardday<=0 || idcardday>30)
				{
					return false;
				}
				break;
			}
			if ((y%4==0 && y%100!=0)||(y%400==0))//闰年
				{
					if(idcardmonth==2 && (idcardday<=0 || idcardday>29))
					{
						return false;
					}
				}
			else								//平年
				{
					if(idcardmonth==2 && (idcardday<=0 || idcardday>28))
					{
						return false;
					}
				}
				return true;
			}
		else			//18位身份证的判断
		{
			String verify = idcard.substring(17, 18);
			idcard =idcard.substring(0, 17);
			//if (idcard.trim().length() == 17) {
				int sum = 0;
				for (int i = 0; i < 17; i++) {
					String k = idcard.substring(i, i + 1);
					ai[i] = Integer.parseInt(k);
				}
				for (int i = 0; i < 17; i++) {
					sum = sum + wi[i] * ai[i];
				}
				remaining = sum % 11;
			//}
			x = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
			if (!verify.equals(x)) {
				return false;
			}
			return true;
		}
	}


        /**
         * 身份证格式验证
         * @return
         */
        public boolean Verify1(String idcard) {

                final int[] wi = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
                final int[] vi = {1,0,'X',9,8,7,6,5,4,3,2};
                int[] ai = new int[18];
                int remaining = 0;
                String x = null ;
                if (idcard.length()!=0){
                        if (idcard.length() == 15) {
                                String eightcardid = idcard.substring(0,6);
                                eightcardid = eightcardid + "19";
                                eightcardid = eightcardid + idcard.substring(6,15);
                                if (eightcardid.length() == 18) {
                                        eightcardid = eightcardid.substring(0, 17);
                                }

                                if (eightcardid.length() == 17) {
                                        int sum = 0;
                                        for (int i = 0; i < 17; i++) {
                                                String k = eightcardid.substring(i, i + 1);
                                                ai[i] = Integer.parseInt(k);
                                        }

                                        for (int i = 0; i < 17; i++) {
                                                sum = sum + wi[i] * ai[i];
                                        }
                                        remaining = sum % 11;
                                }
                                x = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
                                eightcardid = eightcardid + x;
                        }
                        if (idcard.length() != 18) {
                                ActionContext.getActionContext().addSimpleError("身份证号长度不正确!");
                                return false;
                        } else
                        {
                                String verify = idcard.substring(17, 18);
                                if (idcard.length() == 18) {
                                        idcard = idcard.substring(0, 17);
                                }

                                if (idcard.length() == 17) {
                                        int sum = 0;
                                        for (int i = 0; i < 17; i++) {
                                                String k = idcard.substring(i, i + 1);
                                                ai[i] = Integer.parseInt(k);
                                        }

                                        for (int i = 0; i < 17; i++) {
                                                sum = sum + wi[i] * ai[i];
                                        }
                                        remaining = sum % 11;
                                }
                                x = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
                                if (verify.equals(x)) {
                                        return true;
                                }
                        }
                        ActionContext.getActionContext().addSimpleError("身份证号格式不正确!");
                        return false;
                }
                return true;
        }


  /**
   * isComOrgId
   * 公司组织机构代码验证
   *
   * @param orgId String
   * @return boolean
   */
  public static boolean isComOrgId(String orgId){
          boolean bl = true;
          String errorStr="";
          int sum = 0;
          int[] w = new int[]{3,7,9,10,5,8,4,2};
          String regex = "[A-Z0-9]{8}-[A-Z0-9]{1}";
          bl = Pattern.matches(regex,orgId);
          if(!bl){
            errorStr = "组织机构代码格式不对["+orgId+"]。";
            return bl;
          }

          for(int i=0;i<8;i++){
            int c = orgId.charAt(i);
            if(c <= 57){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -