进制转换工具类
package com;
import java.math.BigInteger;
import java.util.Arrays;
public class baseConversionUtils {
public static String encrypt(String original, baseType baseType) {
if (baseType == null) {
throw new RuntimeException("进制转换类型不能为null");
}
Long length = baseType.getbaseLength();
long value = Long.valueOf(original).longValue();
StringBuilder builder = new StringBuilder();
int i = 0;
while (value != 0) {
long t = value % length;
if (t >= 0 && t < 10) {
builder.append((char) (t + '0'));
} else {
builder.append((char) (t + 'A' - 10));
}
i++;
value = value / length;
}
String num = builder.reverse().toString();
while (num.startsWith("0")){
num = num.substring(1,num.length());
}
return num;
}
public static String encryptByBigInt(String original, baseType baseType) {
if (baseType == null) {
throw new RuntimeException("进制转换类型不能为null");
}
BigInteger length = BigInteger.valueOf(baseType.getbaseLength());
BigInteger value = new BigInteger(original);
StringBuilder builder = new StringBuilder();
int i = 0;
while (!value.toString().equals("0")) {
int t = value.mod(length).intValue();
if (t >= 0 && t < 10) {
builder.append((char) (t + '0'));
} else {
builder.append((char) (t + 'A' - 10));
}
i++;
value = value.divide(length);
}
String num = builder.reverse().toString();
while (num.startsWith("0")){
num = num.substring(1,num.length());
}
return num;
}
public static String encryptToStartZero(String original, baseType baseType) {
if (baseType == null) {
throw new RuntimeException("进制转换类型不能为null");
}
Long length = baseType.getbaseLength();
int a = 0;
while (original.startsWith("0")){
original = original.substring(1,original.length());
a++;
}
long value = Long.valueOf(original).longValue();
StringBuilder builder = new StringBuilder();
int i = 0;
while (value != 0) {
long t = value % length;
if (t >= 0 && t < 10) {
builder.append((char) (t + '0'));
} else {
builder.append((char) (t + 'A' - 10));
}
i++;
value = value / length;
}
String num = builder.reverse().toString();
while (num.startsWith("0")){
num = num.substring(1,num.length());
}
if(a == 0){
num = "1"+num;
}else {
num = "0"+a+num;
}
return num;
}
public static String encryptToStartZeroToBigInt(String original, baseType baseType) {
if (baseType == null) {
throw new RuntimeException("进制转换类型不能为null");
}
BigInteger length = BigInteger.valueOf(baseType.getbaseLength());
int a = 0;
while (original.startsWith("0")){
original = original.substring(1,original.length());
a++;
}
BigInteger value = new BigInteger(original);
StringBuilder builder = new StringBuilder();
int i = 0;
while (!value.toString().equals("0")) {
int t = value.mod(length).intValue();
if (t >= 0 && t < 10) {
builder.append((char) (t + '0'));
} else {
builder.append((char) (t + 'A' - 10));
}
i++;
value = value.divide(length);
}
String num = builder.reverse().toString();
while (num.startsWith("0")){
num = num.substring(1,num.length());
}
if(a == 0){
num = "1"+num;
}else {
num = "0"+a+num;
}
return num;
}
public static String decrypt(String translation,baseType baseType) {
Long length = baseType.getbaseLength();
long result = 0;
long wei = 1;
char[] chars = translation.toCharArray();
for (int i = chars.length - 1; i >= 0; i--) {
int a = 0;
switch (chars[i]){
case 'A': a = 10;break;
case 'B': a = 11;break;
case 'C': a = 12;break;
case 'D': a = 13;break;
case 'E': a = 14;break;
case 'F': a = 15;break;
case 'G': a = 16;break;
case 'H': a = 17;break;
case 'I': a = 18;break;
case 'J': a = 19;break;
case 'K': a = 20;break;
case 'L': a = 21;break;
case 'M': a = 22;break;
case 'N': a = 23;break;
case 'O': a = 24;break;
case 'P': a = 25;break;
case 'Q': a = 26;break;
case 'R': a = 27;break;
case 'S': a = 28;break;
case 'T': a = 29;break;
case 'U': a = 30;break;
case 'V': a = 31;break;
case 'W': a = 32;break;
case 'X': a = 33;break;
case 'Y': a = 34;break;
case 'Z': a = 35;break;
default: a = Integer.valueOf(String.valueOf(chars[i]));break;
}
result += a*wei;
wei*=length;
}
return String.valueOf(result);
}
public static String decryptByBigInt(String translation,baseType baseType) {
BigInteger length = BigInteger.valueOf(baseType.getbaseLength());
BigInteger result = new BigInteger("0");
BigInteger wei = new BigInteger("1");
char[] chars = translation.toCharArray();
for (int i = chars.length - 1; i >= 0; i--) {
long a = 0;
switch (chars[i]){
case 'A': a = 10l;break;
case 'B': a = 11l;break;
case 'C': a = 12l;break;
case 'D': a = 13l;break;
case 'E': a = 14l;break;
case 'F': a = 15l;break;
case 'G': a = 16l;break;
case 'H': a = 17l;break;
case 'I': a = 18l;break;
case 'J': a = 19l;break;
case 'K': a = 20l;break;
case 'L': a = 21l;break;
case 'M': a = 22l;break;
case 'N': a = 23l;break;
case 'O': a = 24l;break;
case 'P': a = 25l;break;
case 'Q': a = 26l;break;
case 'R': a = 27l;break;
case 'S': a = 28l;break;
case 'T': a = 29l;break;
case 'U': a = 30l;break;
case 'V': a = 31l;break;
case 'W': a = 32l;break;
case 'X': a = 33l;break;
case 'Y': a = 34l;break;
case 'Z': a = 35l;break;
default: a = Long.valueOf(String.valueOf(chars[i]));break;
}
BigInteger multiply = wei.multiply(BigInteger.valueOf(a));
result = result.add(multiply);
wei = wei.multiply(length);
}
return result.toString();
}
public static String decryptToStartZero(String translation,baseType baseType) {
Long length = baseType.getbaseLength();
long result = 0;
long wei = 1;
int a1 = 0;
if(translation.startsWith("0")){
char c = translation.charAt(1);
a1 = Integer.valueOf(String.valueOf(c));
translation = translation.substring(2,translation.length());
}else {
translation = translation.substring(1,translation.length());
}
char[] chars = translation.toCharArray();
for (int i = chars.length - 1; i >= 0; i--) {
int a = 0;
switch (chars[i]){
case 'A': a = 10;break;
case 'B': a = 11;break;
case 'C': a = 12;break;
case 'D': a = 13;break;
case 'E': a = 14;break;
case 'F': a = 15;break;
case 'G': a = 16;break;
case 'H': a = 17;break;
case 'I': a = 18;break;
case 'J': a = 19;break;
case 'K': a = 20;break;
case 'L': a = 21;break;
case 'M': a = 22;break;
case 'N': a = 23;break;
case 'O': a = 24;break;
case 'P': a = 25;break;
case 'Q': a = 26;break;
case 'R': a = 27;break;
case 'S': a = 28;break;
case 'T': a = 29;break;
case 'U': a = 30;break;
case 'V': a = 31;break;
case 'W': a = 32;break;
case 'X': a = 33;break;
case 'Y': a = 34;break;
case 'Z': a = 35;break;
default: a = Integer.valueOf(String.valueOf(chars[i]));break;
}
result += a*wei;
wei*=length;
}
if(a1 != 0){
String suffix = "";
for (int i = a1; i > 0; i--) {
suffix+=0;
}
return suffix+String.valueOf(result);
}
return String.valueOf(result);
}
public static String decryptToStartZeroByBigInt(String translation,baseType baseType) {
BigInteger length = BigInteger.valueOf(baseType.getbaseLength());
BigInteger result = BigInteger.valueOf(0l);
BigInteger wei = BigInteger.valueOf(1l);
int a1 = 0;
if(translation.startsWith("0")){
char c = translation.charAt(1);
a1 = Integer.valueOf(String.valueOf(c));
translation = translation.substring(2,translation.length());
}else {
translation = translation.substring(1,translation.length());
}
char[] chars = translation.toCharArray();
for (int i = chars.length - 1; i >= 0; i--) {
long a = 0;
switch (chars[i]){
case 'A': a = 10l;break;
case 'B': a = 11l;break;
case 'C': a = 12l;break;
case 'D': a = 13l;break;
case 'E': a = 14l;break;
case 'F': a = 15l;break;
case 'G': a = 16l;break;
case 'H': a = 17l;break;
case 'I': a = 18l;break;
case 'J': a = 19l;break;
case 'K': a = 20l;break;
case 'L': a = 21l;break;
case 'M': a = 22l;break;
case 'N': a = 23l;break;
case 'O': a = 24l;break;
case 'P': a = 25l;break;
case 'Q': a = 26l;break;
case 'R': a = 27l;break;
case 'S': a = 28l;break;
case 'T': a = 29l;break;
case 'U': a = 30l;break;
case 'V': a = 31l;break;
case 'W': a = 32l;break;
case 'X': a = 33l;break;
case 'Y': a = 34l;break;
case 'Z': a = 35l;break;
default: a = Long.valueOf(String.valueOf(chars[i]));break;
}
result = result.add(wei.multiply(BigInteger.valueOf(a)));
wei = wei.multiply(length);
}
if(a1 != 0){
String suffix = "";
for (int i = a1; i > 0; i--) {
suffix+=0;
}
return suffix+result.toString();
}
return String.valueOf(result);
}
public enum baseType {
base_11(11L),
base_12(12L),
base_13(13L),
base_14(14L),
base_15(15L),
base_16(16L),
base_17(17L),
base_18(18L),
base_19(19L),
base_20(20L),
base_21(21L),
base_22(22L),
base_23(23L),
base_24(24L),
base_25(25L),
base_26(26L),
base_27(27L),
base_28(28L),
base_29(29L),
base_30(30L),
base_31(31L),
base_32(32L),
base_33(33L),
base_34(34L),
base_35(35L);
private Long baseLength;
public Long getbaseLength() {
return baseLength;
}
public void setbaseLength(Long baseLength) {
baseLength = baseLength;
}
baseType(Long baseLength) {
this.baseLength = baseLength;
}
}
}



