From ae02aab15e66ae7e7ffb420b1ffe4cd60a44931d Mon Sep 17 00:00:00 2001 From: Calvin Date: Mon, 26 Mar 2012 22:45:30 +0800 Subject: [PATCH] =?UTF-8?q?Identities=E5=A2=9E=E5=8A=A0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=9A=8F=E6=9C=BABase62=E7=BC=96=E7=A0=81=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/springside/modules/utils/Encodes.java | 38 ------------------- .../springside/modules/utils/Identities.java | 18 +++++++-- .../springside/modules/utils/EncodesTest.java | 12 +----- .../modules/utils/IdentitiesTest.java | 15 ++++++++ 4 files changed, 30 insertions(+), 53 deletions(-) create mode 100644 modules/core/src/test/java/org/springside/modules/utils/IdentitiesTest.java diff --git a/modules/core/src/main/java/org/springside/modules/utils/Encodes.java b/modules/core/src/main/java/org/springside/modules/utils/Encodes.java index 991cd2d4..ff3d55b9 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Encodes.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Encodes.java @@ -13,20 +13,17 @@ import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.Validate; /** * 封装各种格式的编码解码工具类. * * 1.Commons-Codec的 hex/base64 编码 - * 2.自行编写的,将long进行base62编码以缩短其长度 * 3.Commons-Lang的xml/html/csv escape * 4.JDK提供的URLEncoder * * @author calvin */ public class Encodes { - private static final String ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; private static final String DEFAULT_URL_ENCODING = "UTF-8"; @@ -72,41 +69,6 @@ public class Encodes { return Base64.decodeBase64(input); } - /** - * Base62(0_9A_Za_z)编码数字, long->String. - */ - public static String encodeNumberToBase62(long num) { - return alphabetEncode(num, 62); - } - - /** - * Base62(0_9A_Za_z)解码数字, String->long. - */ - public static long decodeBase62ToNumber(String str) { - return alphabetDecode(str, 62); - } - - private static String alphabetEncode(long num, int base) { - num = Math.abs(num); - StringBuilder sb = new StringBuilder(); - for (; num > 0; num /= base) { - sb.append(ALPHABET.charAt((int) (num % base))); - } - - return sb.toString(); - } - - private static long alphabetDecode(String str, int base) { - Validate.notBlank(str); - - long result = 0; - for (int i = 0; i < str.length(); i++) { - result += ALPHABET.indexOf(str.charAt(i)) * Math.pow(base, i); - } - - return result; - } - /** * Html 转码. */ diff --git a/modules/core/src/main/java/org/springside/modules/utils/Identities.java b/modules/core/src/main/java/org/springside/modules/utils/Identities.java index 0fa278e2..d557c5c0 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Identities.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Identities.java @@ -17,6 +17,9 @@ public class Identities { private static SecureRandom random = new SecureRandom(); + private static final char[] ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + .toCharArray(); + private Identities() { } @@ -38,13 +41,20 @@ public class Identities { * 使用SecureRandom随机生成Long. */ public static long randomLong() { - return random.nextLong(); + return Math.abs(random.nextLong()); } /** - * 基于Base62编码的SecureRandom随机生成Long. + * 基于Base62编码的SecureRandom随机生成bytes. */ - public static String randomBase62() { - return Encodes.encodeNumberToBase62(random.nextLong()); + public static String randomBase62(int length) { + byte[] randomBytes = new byte[length]; + random.nextBytes(randomBytes); + + char[] chars = new char[length]; + for (int i = 0; i < length; i++) { + chars[i] = ALPHABET[((randomBytes[i] & 0xFF) % ALPHABET.length)]; + } + return new String(chars); } } diff --git a/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java b/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java index d2b72676..d38fa804 100644 --- a/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java +++ b/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java @@ -1,9 +1,8 @@ package org.springside.modules.utils; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; import org.junit.Test; -import org.springside.modules.utils.Encodes; public class EncodesTest { @@ -28,15 +27,6 @@ public class EncodesTest { assertEquals(input, new String(Encodes.decodeBase64(result))); } - @Test - public void base62Encode() { - long num = 63; - - String result = Encodes.encodeNumberToBase62(num); - assertEquals("11", result); - assertEquals(num, Encodes.decodeBase62ToNumber(result)); - } - @Test public void urlEncode() { String input = "http://locahost/?q=中文&t=1"; diff --git a/modules/core/src/test/java/org/springside/modules/utils/IdentitiesTest.java b/modules/core/src/test/java/org/springside/modules/utils/IdentitiesTest.java new file mode 100644 index 00000000..81c7cadf --- /dev/null +++ b/modules/core/src/test/java/org/springside/modules/utils/IdentitiesTest.java @@ -0,0 +1,15 @@ +package org.springside.modules.utils; + +import org.junit.Test; + +public class IdentitiesTest { + + @Test + public void demo() { + System.out.println("uuid: " + Identities.uuid()); + System.out.println("uuid2:" + Identities.uuid2()); + System.out.println("randomLong: " + Identities.randomLong()); + System.out.println("randomBase62:" + Identities.randomBase62(6)); + } + +}