|
package de.uhilger.filecms.web;
|
|
/*
|
* ShortURL (https://github.com/delight-im/ShortURL)
|
* Copyright (c) delight.im (https://www.delight.im/)
|
* Licensed under the MIT License (https://opensource.org/licenses/MIT)
|
*/
|
|
/**
|
* ShortURL: Bijective conversion between natural numbers (IDs) and short strings
|
*
|
* ShortURL.encode() takes an ID and turns it into a short string
|
* ShortURL.decode() takes a short string and turns it into an ID
|
*
|
* Features:
|
* + large alphabet (51 chars) and thus very short resulting strings
|
* + proof against offensive words (removed 'a', 'e', 'i', 'o' and 'u')
|
* + unambiguous (removed 'I', 'l', '1', 'O' and '0')
|
*
|
* Example output:
|
* 123456789 <=> pgK8p
|
*/
|
public class ShortURL {
|
|
public static final String ALPHABET = "23456789bcdfghjkmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ-_";
|
public static final int BASE = ALPHABET.length();
|
|
public static String encode(int num) {
|
StringBuilder str = new StringBuilder();
|
while (num > 0) {
|
str.insert(0, ALPHABET.charAt(num % BASE));
|
num = num / BASE;
|
}
|
return str.toString();
|
}
|
|
public static int decode(String str) {
|
int num = 0;
|
for (int i = 0; i < str.length(); i++) {
|
num = num * BASE + ALPHABET.indexOf(str.charAt(i));
|
}
|
return num;
|
}
|
|
}
|