package com.ytf.tool;
import java.util.Arrays;
/**
* �����࣬���������֤���ַ���
* @author Administrator
*
*/
public class SecurityCode {
/**
* ��֤���Ѷȼ���Simpleֻ�������֣�Medium�������ֺ�СдӢ�ģ�Hard�������ֺʹ�СдӢ��
*/
public enum SecurityCodeLevel {Simple,Medium,Hard};
/**
* ����Ĭ����֤�룬4λ�е��Ѷ�
* @return String ��֤��
*/
public static String getSecurityCode() {
return getSecurityCode(4,SecurityCodeLevel.Medium,false);
}
/**
* �������Ⱥ��Ѷ��������֤��
* @param length ����
* @param �Ѷȼ���
* @param isCanRepeate �Ƿ��ܹ������ظ����ַ������Ϊtrue������ܳ��֣�������
* @return String ��֤��
*/
public static String getSecurityCode(int length,SecurityCodeLevel level,boolean isCanRepeate) {
//�����ȡlen���ַ�
int len = length;
//�ַ�����(��ȥ����������0������1����ĸl����ĸo����ĸO)
char[] codes = {'1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i',
'j','k','m','n','p','q','r','s','t',
'u','v','w','x','y','z','A','B','C',
'D','E','F','G','H','I','J','K','L',
'M','N','P','Q','R','S','T','U','V',
'W','X','Y','Z'};
//���߲�ͬ�ѶȽ�ȡ�ַ�����
if (level==SecurityCodeLevel.Simple) {
codes = Arrays.copyOfRange(codes, 0, 9);
}else if(level==SecurityCodeLevel.Medium) {
codes = Arrays.copyOfRange(codes, 0, 33);
}
//�ַ����ͳ���
int n = codes.length;
//�׳�����ʱ�쳣
if(len > n&&isCanRepeate==false) {
throw new RuntimeException(
String.format("����SecurityCode.getSecurityCode(%1$s%2$s%3$s)�����쳣," +
"��isCanRepeateΪ%3$sʱ,�������%1$s���ܴ���%4$s",
len,level,isCanRepeate,n));
}
//��ų�ȡ�������ַ�
char[] result = new char[len];
//�ж��ܷ�����ظ����ַ�
if(isCanRepeate) {
for(int i = 0;i < result.length;i++) {
//����0��n-1�������
int r = (int)(Math.random()*n);
//��result�еĵ�i��Ԫ������Ϊcodes[r]��ŵ���ֵ
result[i]=codes[r];
}
}else{
for(int i = 0;i < result.length;i++) {
//����0��n-1�������
int r = (int)(Math.random()*n);
//��result�еĵ�i��Ԫ������Ϊcodes[r]��ŵ���ֵ
result[i] = codes[r];
//����ȷ�������ٴγ�ȡ��ͬ�����ַ�����Ϊ���е��ַ����벻ͬ
//��ˣ������������е����һ���ַ���дcodes[r],����n��1
codes[r] = codes[n-1];
n--;
}
}
return String.valueOf(result);
}
}