VERSION 1.0 引自: http://www.coderanch.com/t/134491/Security/generating-secure-tokens
package
demo;
import
java.util.Random;
/*
* This code is a discussion of an opinion in a technical forum.
* You may develope ideas from this code. You may not use it directly.
*/
public
class
DM
{
String getRandomIdentifier(
int
length)
throws
Exception
{
final
int
limitingValue =
64
;
// Whatever you decide, not me.
if
(length < limitingValue)
{
try
{
// The first step is to get a filename generator
char
lowerBound =
‘a‘
;
char
upperBound =
‘z‘
;
Random randomCharacterGenerator =
new
Random();
// Then get some characters
char
[] identifierBuffer =
new
char
[length];
//
int
index = identifierBuffer.length;
//
final
int
numericLowerBound = (
int
) lowerBound;
final
int
numericUpperBound = (
int
) upperBound;
final
int
range = numericUpperBound - numericLowerBound;
//
do
{
// recoded in mesage edit, original defective
int
getOne = randomCharacterGenerator.nextInt(range);
int
next = numericLowerBound + getOne;
identifierBuffer[--index] = (
char
) next;
}
while
(index >
0x00000000
);
return
new
String(identifierBuffer);
//
}
catch
(ArrayIndexOutOfBoundsException aioobe)
{
System.out.println(aioobe.getMessage());
}
}
else
{
throw
new
Exception(
"Contact system administrator."
);
//
}
return
null
;
}
}
VERSION 2.0 改进型:
package token;
import java.util.Random;
public class DM {
public static void main(String[] args) throws Exception {
System.out.println("1==97===:" + (int) ‘a‘);
System.out.println("2==122===:" + (int) ‘z‘);
System.out.println("3==65===:" + (int) ‘A‘);
System.out.println("4===90==:" + (int) ‘Z‘);
DM mn = new DM();
System.out.println(mn.getRandomIdentifier(26));
}
String getRandomIdentifier(int length) throws Exception {
final int limitingValue = 164;// Whatever you decide, not me.
if (length < limitingValue) {
try {
// 26个小写+26个大小 = 52 字母
final int range = 52;//
char[] charStr = new char[range];
int j = 0;
// A=65, z =122
for (int i = 65; i <= 122; i++) {
// Z--a 之间的跳过
if (i > 90 && i < 97) {
continue;
}
charStr[j] = (char) i; // 这里将保存52个大小字母
j++;
}
// 这里其实可以将 0 - 9 的数字也添加进去
Random randomCharacterGenerator = new Random();
// Then get some characters
char[] identifierBuffer = new char[length];//
int index = identifierBuffer.length;//
do {
// 产生0至51 共52个随机数,用于索引字母数组
int getOne = randomCharacterGenerator.nextInt(range);
identifierBuffer[--index] = charStr[getOne];
} while (index > 0x00000000);
return new String(identifierBuffer);//
} catch (ArrayIndexOutOfBoundsException aioobe) {
System.out.println(aioobe.getMessage());
}
} else {
throw new Exception("Contact system administrator.");//
}
return null;
}
}