GitHubに上げようかと思いましたが、未だに使い方がよく分からないので、
ブログにそのまま書いちゃいます。
10進はlong, 62進は[0-9a-zA-Z]の62文字です。
作ってて思ったのですが、絶対どこかにある確信があるのですが、
Google先生がうまいこと検索してくれませんので、勝手に作りました。
AlphaNumericConvert.java
package java.util.encryption; import java.util.regex.Pattern; /** convert integer to alphanumeric string or alphanumeric string to integer * * @author dommy <shonan.shachu at gmail.com> * @version 1.0.0 updated on 2012-02-24 */ public class AlphaNumeric { private static final String TABLE = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; /** concatenate integers * * @param digits * @return string value of concatenated integers */ public static long concatnateDigits(int... digits){ StringBuffer sb = new StringBuffer(digits.length); for(int digit: digits){ sb.append(digit); } return Long.parseLong(sb.toString()); } /** convert integer to alphanumeric characters * * @param number * @return encrypted string */ public static String encrypt(long number) { StringBuffer sb = new StringBuffer(); while(number > 0) { sb.insert(0, TABLE.charAt((int)(number % 62))); number = number / 62; } return sb.toString(); } /** convert alphanumeric characters to integer * * @param phrase * @return Integer converted from phrase. * Return -1 if the phrase contains not convertible character. */ public static long decrypt(String phrase) { // validation. // if the phrase has character other than in TABLE // return -1; if(Pattern.compile("[^" + TABLE + "]").matcher(phrase).find()){ return -1; } String reverse = new StringBuffer(phrase).reverse().toString(); long decimal = 0; for(int i = 0; i < reverse.length(); i++){ int digit = TABLE.indexOf(reverse.charAt(i)); decimal = (long) (decimal + digit * Math.pow(62, i)); } return decimal; } }
0 件のコメント:
コメントを投稿