package commonjava;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import db.DBManager;
/**
* 常用的一些通用方法
*
* @author Administrator
*
*/
public class CommonFunction {
public static DateFormat f1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static DateFormat f2 = new SimpleDateFormat("yyyy");
public static DateFormat f3 = new SimpleDateFormat("MM");
/**
* 将字符串进行加密和解密(采用和某个字符串进行异或,异或的字符串“mayuanzhi”)
*
* @param str
* @return
*/
public static String returnXORString(String str) {
int l, m, t1, t2, t3;
String strKey = "mayuanzhi";
String s1, s2, Coding;
try {
Coding = "";
m = str.length();
l = strKey.length();
for (int i = 0; i < m; i++) {
s1 = str.substring(i, i + 1);
s2 = strKey.substring(i % l, (i % l) + 1);
t1 = (int) s1.charAt(0);
t2 = (int) s2.charAt(0);
t3 = t1 ^ t2;
Coding = Coding + String.valueOf((char) t3);
}
return Coding;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将字符串进行加密和解密(采用和某个字符串进行异或)
*
* @param str
* @return
*/
public static String returnXORString(String str, String XORString) {
int l, m, t1, t2, t3;
String strKey = XORString;
String s1, s2, Coding;
try {
Coding = "";
m = str.length();
l = strKey.length();
for (int i = 0; i < m; i++) {
s1 = str.substring(i, i + 1);
s2 = strKey.substring(i % l, (i % l) + 1);
t1 = (int) s1.charAt(0);
t2 = (int) s2.charAt(0);
t3 = t1 ^ t2;
Coding = Coding + String.valueOf((char) t3);
}
return Coding;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 判断是否为日期型
*
* @param year
* @param month
* @param day
* @return
*/
public static boolean isDate(int year, int month, int day) {
Calendar calendar = new GregorianCalendar(year, month - 1, day);
// 指定日期/时间解析是否不严格。进行不严格解析时,
// 解析程序可以使用启发式的方法来解释与此对象的格式不精确匹配的输入。
// 进行严格解析时,输入必须匹配此对象的格式。
// lenient - 为 true 时,解析过程是不严格的
// 严格控制输入 比如2006-02-31,根本没有这一天 ,也会认为时间格式不对
calendar.setLenient(false);
try {
calendar.getTime();
} catch (IllegalArgumentException iae) {
return false;
} finally {
calendar = null;
}
return true;
}
// '---此函数用来检验身份证号码的正确性(15位或18位都可以)
// '---此函数的参数:e为输入要检验的身份证号码,ee返回正确的身份证号码,如果输入的身份证号码不正确,则ee返回空值,Birth返回出生日期
// '---此函数带有返回值,输入要检验的身份证号码正确,则返回True,否则返回False
// 返回:=0表示 正确
// =1表示 身份证号码不是15位或18位
// =2表示 身份证除最后一位外,必须为数字!
// =3表示 身份证的出生日期不正确
// =4表示 身份证号码输入错误
public static int checkCardID(String e) {
String arrVerifyCode[];
String wi[];
// String checker[];
String str;
String ai = null;
// '---身份证的校验码(要记住,不能写错)
str = "1,0,X,9,8,7,6,5,4,3,2";
arrVerifyCode = str.split(",");
str = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2";
wi = str.split(",");
str = "1,9,8,7,6,5,4,3,2,1,1";
// checker = str.split(",");
e = e.trim();
// '---判断身份证号码的长度为15位或18位
if ((e.length() < 15) || (e.length() == 16) || (e.length() == 17)
|| (e.length() > 18)) {
return 1;
}
if (18 == e.length()) {
ai = e.substring(0, 17);
} else if (15 == e.length()) {
ai = e;
ai = ai.substring(0, 6) + "19" + ai.substring(6, 15);
}
// '---判断身份证除最后一位外,必须为数字
if (!isNumberic(ai)) {
// MsgBox "身份证除最后一位外,必须为数字!"
return 2;
}
int strYear;
int strMonth;
int strDay;
strYear = Integer.parseInt(ai.substring(6, 10));
strMonth = Integer.parseInt(ai.substring(10, 12));
strDay = Integer.parseInt(ai.substring(12, 14));
if (!isDate(strYear, strMonth, strDay)) {
return 3;
}
int totalmulAiWi = 0;
for (int i = 0; i <= 16; i++) {
totalmulAiWi = totalmulAiWi
+ Integer.parseInt(ai.substring(i, i + 1))
* Integer.parseInt(wi[i]);
}
int modValue;
modValue = totalmulAiWi % 11;
String strVerifyCode;
strVerifyCode = arrVerifyCode[modValue];
ai = ai + strVerifyCode;
if ((18 == e.length()) && (!e.equals(ai))) {
// MsgBox "身份证号码输入错误!"
return 4;
}
return 0;
}
// '---此函数用来检验身份证号码的正确性并返回出生日期(15位或18位都可以)
// '---此函数的参数:e为输入要检验的身份证号码,ee返回正确的身份证号码,如果输入的身份证号码不正确,则ee返回空值,Birth返回出生日期
// '---此函数带有返回值,输入要检验的身份证号码正确,则返回True,否则返回False
public static String checkCardIDReturnBirth(String e) {
String arrVerifyCode[];
String wi[];
// String checker[];
String birthDay;
String str;
String ai = null;
// '---身份证的校验码(要记住,不能写错)
str = "1,0,X,9,8,7,6,5,4,3,2";
arrVerifyCode = str.split(",");
str = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2";
wi = str.split(",");
str = "1,9,8,7,6,5,4,3,2,1,1";
// checker = str.split(",");
birthDay = "";
e = e.trim();
// '---判断身份证号码的长度为15位或18位
if ((e.length() < 15) || (e.length() == 16) || (e.length() == 17)
|| (e.length() > 18)) {
return "";
}
if (18 == e.length()) {
ai = e.substring(0, 17);
} else if (15 == e.length()) {
ai = e;
ai = ai.substring(0, 6) + "19" + ai.substring(6, 15);
}
// '---判断身份证除最后一位外,必须为数字
if (!isNumberic(ai)) {
// MsgBox "身份证除最后一位外,必须为数字!"
return "";
}
int strYear;
int strMonth;
int strDay;
strYear = Integer.parseInt(ai.substring(6, 10));
strMonth = Integer.parseInt(ai.substring(10, 12));
strDay = Integer.parseInt(ai.substring(12, 14));
birthDay = strYear + "-" + strMonth + "-" + strDay;
if (!isDate(strYear, strMonth, strDay)) {
return "";
}
int totalmulAiWi = 0;
for (int i = 0; i <= 16; i++) {
totalmulAiWi = totalmulAiWi
+ Integer.parseInt(ai.substring(i, i + 1))
* Integer.parseInt(wi[i]);
}
int modValue;
modValue = totalmulAiWi % 11;
String strVerifyCode;
strVerifyCode = arrVerifyCode[modValue];
ai = ai + strVerifyCode;
if ((18 == e.length()) && (!e.equals(ai))) {
// MsgBox "身份证号码输入错误!"
return "";
}
return birthDay;
}
// '---此函数用来检验身份证号码的正确性并返回18身份证(15位或18位都可以)
// '---此函数的参数:e为输入要检验的身份证号码,ee返回正确的身份证号码,如果输入的身份证号码不正确,则ee返回空值,Birth返回出生日期
// '---此函数带有返回值,输入要检验的身份证号码正确,则返回True,否则返回False
pu