Files
eapim-admin-djb/src/main/java/com/eactive/ext/kjb/ums/UUIDBase62Util.java
T
Rinjae c204bbf106 init
2025-10-16 11:53:45 +09:00

71 lines
2.6 KiB
Java

package com.eactive.ext.kjb.ums;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.util.UUID;
public class UUIDBase62Util {
private static final String BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
public static String uuidStringToBase62(String uuidStr) {
UUID uuid = UUID.fromString(uuidStr);
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
BigInteger bigInt = new BigInteger(1, bb.array());
return toBase62(bigInt);
}
public static String base62ToUuidString(String base62Str) {
BigInteger bigInt = fromBase62(base62Str);
byte[] bytes = toByteArray(bigInt, 16);
ByteBuffer bb = ByteBuffer.wrap(bytes);
long msb = bb.getLong();
long lsb = bb.getLong();
return new UUID(msb, lsb).toString();
}
private static String toBase62(BigInteger value) {
StringBuilder sb = new StringBuilder();
while (value.compareTo(BigInteger.ZERO) > 0) {
BigInteger[] divRem = value.divideAndRemainder(BigInteger.valueOf(62));
sb.append(BASE62.charAt(divRem[1].intValue()));
value = divRem[0];
}
// pad to 22 chars for consistent length
while (sb.length() < 22) sb.append('0');
return sb.reverse().toString();
}
private static BigInteger fromBase62(String base62) {
BigInteger result = BigInteger.ZERO;
for (char c : base62.toCharArray()) {
int digit = BASE62.indexOf(c);
if (digit == -1) throw new IllegalArgumentException("Invalid Base62 character: " + c);
result = result.multiply(BigInteger.valueOf(62)).add(BigInteger.valueOf(digit));
}
return result;
}
private static byte[] toByteArray(BigInteger bigInt, int size) {
byte[] src = bigInt.toByteArray();
byte[] dst = new byte[size];
int srcPos = Math.max(0, src.length - size);
int dstPos = Math.max(0, size - src.length);
int length = Math.min(size, src.length);
System.arraycopy(src, srcPos, dst, dstPos, length);
return dst;
}
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString();
String base62 = uuidStringToBase62(uuid);
String decoded = base62ToUuidString(base62);
System.out.println("UUID : " + uuid);
System.out.println("Base62: " + base62 + " (" + base62.length() + ")");
System.out.println("Decoded: " + decoded);
System.out.println("Same? " + uuid.equals(decoded));
}
}