2010年3月10日 星期三

ValidateUtil

import java.util.regex.Matcher;import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
public class ValidateUtil {
public static boolean validateChineseWords(String chineseWords) { if ( StringUtils.isBlank(chineseWords) ) { return false; } return chineseWords.matches("^[^a-zA-Z0-9_\\s]+$"); }
public static boolean validateCellphone(String cellphone) { if ( StringUtils.isBlank(cellphone) ) { return false; } return cellphone.length() == 10; }
public static boolean validateEmail(String email) { if ( StringUtils.isBlank(email) ) { return false; } return email.toLowerCase().matches("mailto:.+@.+//.[a-z]+"); } public static boolean validateIDNO(String idno) { if (StringUtils.isBlank(idno) ) { return false; } idno = idno.toUpperCase(); boolean isTaiwanIDNO = validateTaiwanIDNO(idno); if ( isTaiwanIDNO ) { return isTaiwanIDNO; } return validatePassportIDNO( idno ); }
/** 檢核是否為正確的護照號碼 */ private static boolean validatePassportIDNO(String idno) { if (StringUtils.isBlank(idno)) { return false; } char[] idnoChars = idno.toCharArray(); int[] passportCheckNumbers = toPassportCheckNumbers( idnoChars ); if ( passportCheckNumbers.length != 11 ) { return false; } int lastPassportNumber = passportCheckNumbers[passportCheckNumbers.length - 1]; int checkSum = toCheckSum( passportCheckNumbers ); return checkSum == 0 ? lastPassportNumber == 0 : 10 - checkSum == lastPassportNumber; }
/** 計算 idno 轉成的數字套公式得到的檢核碼(此檢核碼取 10 的餘數後會與 idno 的尾數相同) */ private static int toCheckSum(int[] checkNumber) { if ( checkNumber == null checkNumber.length != 11 ) { return Integer.MAX_VALUE; } return (checkNumber[0] * 1 + checkNumber[1] * 9 + checkNumber[2] * 8 + checkNumber[3] * 7 + checkNumber[4] * 6 + checkNumber[5] * 5 + checkNumber[6] * 4 + checkNumber[7] * 3 + checkNumber[8] * 2 + checkNumber[9] * 1) % 10; }
/** * 把護照號碼轉成的 char[] 轉為 int[], 轉換英文維數字與轉換 char 數字為 int 數字 * @return new int[0] if idnoChars is null or idnoChars.length is not ten or any unexpected problem happens. */ private static int[] toPassportCheckNumbers(char[] idnoChars) { if ( idnoChars == null idnoChars.length != 10 ) { return new int[0]; } int[] result = new int[11]; String firstEngCharNumberString = String.valueOf(engToNumber(idnoChars[0])); char[] firstEngCharNumberChars = firstEngCharNumberString.toCharArray(); String secondEngCharNumberString = String.valueOf(engToNumber(idnoChars[1])); char[] secondEngCharNumberChars = secondEngCharNumberString.toCharArray(); if ( firstEngCharNumberChars.length != 2 secondEngCharNumberChars.length != 2 ) { return new int[0]; } result[0] = Character.digit(firstEngCharNumberChars[0], 10); result[1] = Character.digit(firstEngCharNumberChars[1], 10); result[2] = Character.digit(secondEngCharNumberChars[1], 10); for ( int i = 3; i < 11; i++ ) { result[i] = Character.digit(idnoChars[i - 1], 10); } return result; }
/** @return true if idno is validate taiwan idno */ private static boolean validateTaiwanIDNO(String idno) { if (idno == null) { return false; } String tmpStr = idno; int checksum = 0; int L = 0; int x[] = new int[3]; int d[] = new int[10]; if (tmpStr.length() != 10) { return false; } L = engToNumber( tmpStr.charAt(0) ); if ( L == 0 ) { return false; } x[1] = L / 10; x[2] = L % 10; for (int i = 1; i <= 9; i++) { d[i] = Character.digit(tmpStr.charAt(i), 10); }
checksum = x[1] + 9 * x[2] + 8 * d[1] + 7 * d[2] + 6 * d[3] + 5 * d[4] + 4 * d[5] + 3 * d[6] + 2 * d[7] + d[8] + d[9]; return checksum % 10 == 0; }
/** 區域碼轉成對應之二碼數字(身分證號與護照共用的對應表) */ private static int engToNumber(char eng) { int L = 0; switch (eng) { case 65: // 'A' L = 10; break;
case 66: // 'B' L = 11; break;
case 67: // 'C' L = 12; break;
case 68: // 'D' L = 13; break;
case 69: // 'E' L = 14; break;
case 70: // 'F' L = 15; break;
case 71: // 'G' L = 16; break;
case 72: // 'H' L = 17; break;
case 74: // 'J' L = 18; break;
case 75: // 'K' L = 19; break;
case 76: // 'L' L = 20; break;
case 77: // 'M' L = 21; break;
case 78: // 'N' L = 22; break;
case 80: // 'P' L = 23; break;
case 81: // 'Q' L = 24; break;
case 82: // 'R' L = 25; break;
case 83: // 'S' L = 26; break;
case 84: // 'T' L = 27; break;
case 85: // 'U' L = 28; break;
case 86: // 'V' L = 29; break;
case 88: // 'X' L = 30; break;
case 89: // 'Y' L = 31; break;
case 87: // 'W' L = 32; break;
case 90: // 'Z' L = 33; break;
case 73: // 'I' L = 34; break;
case 79: // 'O' L = 35; break; } return L; } public static boolean checkEmail(String email) {
String regex; Pattern p; Matcher m; regex = "^[a-zA-Z0-9_.]+@([a-zA-Z0-9][a-zA-Z0-9]+.([a-zA-Z0-9.]*)[a-zA-Z]{2,5})$";
p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); m = p.matcher(email);
if (!m.find()) { return false; }
return true; } public static boolean checkAccount(String account) {
String regex; Pattern p; Matcher m; regex = "^[A-Z0-9a-z]{4,10}+$";
p = Pattern.compile(regex); m = p.matcher(account);
if (!m.find()) { return false; } return true; }
}

csv

try {
Charset charset = Charset.forName("MS950"); reader = new CsvReader(is, ',', charset);
} catch (Exception ex) { log.error(StringUtil.getStackTraceAsString(ex)); }

try { while (reader.readRecord()) {
try { transCount++;

if (transCount == 1) {

continue;

}

/** 建立model */

TsRaceBulletinHMDTO transModel = new TsRaceBulletinHMDTO();

transModel.setTeam( reader.get(getExcelColumnIndex("A")) );//組別

transModel.setSortno( Long.valueOf( reader.get( getExcelColumnIndex("B") ) ) );//排名

transModel.initInsert("Y", userAccount);

tsRaceBulletinHMDAO.insertAll(transModel);
successCount++;
log.info("trans:" + successCount);
} catch (Exception ex) {

errorCount++; log.error("row " + transCount + " error... \n" + StringUtil.stackTrace(ex));

result += "row " + transCount + " error... \n"; }

}

} catch (Exception e) {

log.error(StringUtil.stackTrace(e));

} finally {
reader.close();
}

private static int getExcelColumnIndex(String columnName) { String allName[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM" };
int index = 0;
for (int i = 0; i < index =" i;">

2010年3月9日 星期二

POI EXCEL轉檔

<pre><code>程式碼

String filePath = "C:\\Tool\\99好一點上傳格式.xls";

File file = new File(filePath); try {

FileInputStream fileInput = new FileInputStream(file);

} catch (Exception ex) {

ex.printStackTrace();

}

POIFSFileSystem fs = null;


try {

fs = new POIFSFileSystem(is);} catch (Exception ex) {

log.error(StringUtil.getStackTraceAsString(ex)); throw ex;

}

HSSFWorkbook wb = null;

try {

wb = new HSSFWorkbook(fs);

} catch (IOException ex) {

log.error(StringUtil.getStackTraceAsString(ex));

throw ex;

}

HSSFSheet sheet = wb.getSheetAt(0); //第一個sheet

HSSFRow row = null; //列

for(int i=3;i

yearPointTransCount ++;

try{ row = sheet.getRow(i);

HSSFCell cell = null;

if(row != null){

cell = row.getCell(getExcelColumnIndex("A"));//區部代碼

agent99YearPointDTO.setRegioncode(getCellValue(cell));

}

}catch (Exception e){

log.error(StringUtil.stackTrace(e));

}

private static int getExcelColumnIndex(String columnName){

String allName[] = {"A","B","C","D","E",

"F","G","H","I","J",

"K","L","M","N","O",

"P","Q","R","S","T",

"U","V","W","X","Y",

"Z","AA","AB","AC","AD"

,"AE","AF","AG","AH","AI"

,"AJ","AK","AL","AM","AN"

,"AO","AP","AQ","AR","AS"

,"AT","AU","AV","AW","AX"

,"AY","AZ","BA","BB","BC"

,"BD","BE","BF","BG","BH" };

int index = 0;

for(int i=0;i

if(columnName.equalsIgnoreCase(allName[i])){

index = i;

}

}

return index;

}


</code></pre>

2010年2月24日 星期三

test

C++ 程式碼放在這裡!!