New file |
| | |
| | |
|
| | | 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;
|
| | | }
|
| | |
|
| | | } |