📄 commontools.java
字号:
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 + -