package de.zigapeda.flowspring.controller; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Compare { private static final String[] REPLACEMENT = new String[Character.MAX_VALUE]; static { for(int i=Character.MIN_VALUE;i<Character.MAX_VALUE;i++) { REPLACEMENT[i] = Character.toString(Character.toLowerCase((char) i)); } // substitute REPLACEMENT['À'] = "a"; REPLACEMENT['Á'] = "a"; REPLACEMENT['Â'] = "a"; REPLACEMENT['Ã'] = "a"; REPLACEMENT['Ä'] = "a"; REPLACEMENT['Å'] = "a"; REPLACEMENT['Ç'] = "c"; REPLACEMENT['È'] = "e"; REPLACEMENT['É'] = "e"; REPLACEMENT['Ê'] = "e"; REPLACEMENT['Ë'] = "e"; REPLACEMENT['Ì'] = "i"; REPLACEMENT['Í'] = "i"; REPLACEMENT['Î'] = "i"; REPLACEMENT['Ï'] = "i"; REPLACEMENT['Ð'] = "d"; REPLACEMENT['Ñ'] = "n"; REPLACEMENT['Ò'] = "o"; REPLACEMENT['Ó'] = "o"; REPLACEMENT['Ô'] = "o"; REPLACEMENT['Õ'] = "o"; REPLACEMENT['Ö'] = "o"; REPLACEMENT['Ù'] = "u"; REPLACEMENT['Ú'] = "u"; REPLACEMENT['Û'] = "u"; REPLACEMENT['Ü'] = "u"; REPLACEMENT['Ý'] = "y"; REPLACEMENT['ß'] = "s"; REPLACEMENT['à'] = "a"; REPLACEMENT['á'] = "a"; REPLACEMENT['â'] = "a"; REPLACEMENT['ã'] = "a"; REPLACEMENT['ä'] = "a"; REPLACEMENT['å'] = "a"; REPLACEMENT['ç'] = "c"; REPLACEMENT['è'] = "e"; REPLACEMENT['é'] = "e"; REPLACEMENT['ê'] = "e"; REPLACEMENT['ë'] = "e"; REPLACEMENT['ì'] = "i"; REPLACEMENT['í'] = "i"; REPLACEMENT['î'] = "i"; REPLACEMENT['ï'] = "i"; REPLACEMENT['ð'] = "d"; REPLACEMENT['ñ'] = "n"; REPLACEMENT['ò'] = "o"; REPLACEMENT['ó'] = "o"; REPLACEMENT['ô'] = "o"; REPLACEMENT['õ'] = "o"; REPLACEMENT['ö'] = "o"; REPLACEMENT['ù'] = "u"; REPLACEMENT['ú'] = "u"; REPLACEMENT['û'] = "u"; REPLACEMENT['ü'] = "u"; REPLACEMENT['ý'] = "y"; REPLACEMENT['ÿ'] = "y"; REPLACEMENT['²'] = "2"; REPLACEMENT['³'] = "3"; // remove REPLACEMENT['-'] = ""; REPLACEMENT['_'] = ""; REPLACEMENT['.'] = ""; REPLACEMENT[','] = ""; REPLACEMENT[':'] = ""; REPLACEMENT[';'] = ""; REPLACEMENT['!'] = ""; REPLACEMENT['"'] = ""; REPLACEMENT['§'] = ""; REPLACEMENT['$'] = ""; REPLACEMENT['%'] = ""; REPLACEMENT['&'] = ""; REPLACEMENT['/'] = ""; REPLACEMENT['('] = ""; REPLACEMENT[')'] = ""; REPLACEMENT['='] = ""; REPLACEMENT['?'] = ""; REPLACEMENT['`'] = ""; REPLACEMENT['´'] = ""; REPLACEMENT['^'] = ""; REPLACEMENT['°'] = ""; REPLACEMENT['*'] = ""; REPLACEMENT['+'] = ""; REPLACEMENT['#'] = ""; REPLACEMENT['~'] = ""; REPLACEMENT['<'] = ""; REPLACEMENT['>'] = ""; REPLACEMENT['|'] = ""; REPLACEMENT['\\'] = ""; REPLACEMENT['}'] = ""; REPLACEMENT[']'] = ""; REPLACEMENT['['] = ""; REPLACEMENT['{'] = ""; REPLACEMENT['€'] = ""; REPLACEMENT['@'] = ""; REPLACEMENT['\''] = ""; REPLACEMENT[' '] = ""; REPLACEMENT['÷'] = ""; REPLACEMENT['ø'] = ""; REPLACEMENT['×'] = ""; REPLACEMENT['Ø'] = ""; // expand REPLACEMENT['Æ'] = "ae"; REPLACEMENT['æ'] = "ae"; REPLACEMENT['þ'] = "th"; } static final byte[] HEX_CHAR_TABLE = { (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' }; public static String getComparableString(String string) { if(string != null) { StringBuilder sb = new StringBuilder(string.length()); for(int i=0;i<string.length();i++) sb.append(REPLACEMENT[string.charAt(i)]); return sb.toString(); } return null; } public static String getMD5(String string) { if(string != null) { byte[] message = null; MessageDigest md = null; try { message = string.getBytes("UTF-8"); md = MessageDigest.getInstance("MD5"); } catch (Exception e) { e.printStackTrace(); } byte[] md5 = md.digest(message); BigInteger bi=new BigInteger(1, md5); return bi.toString(16); } return null; } public static String getMD5(File file) { try { MessageDigest md = MessageDigest.getInstance("MD5"); InputStream is=new FileInputStream(file); byte[] buffer=new byte[8192]; int read=0; while( (read = is.read(buffer)) > 0) md.update(buffer, 0, read); byte[] md5 = md.digest(); BigInteger bi=new BigInteger(1, md5); is.close(); return bi.toString(16); } catch(NoSuchAlgorithmException e) { e.printStackTrace(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } return null; } }