# utils/code_converter.py # Base58 Alphabet (Removes easily confused characters: 0, O, I, l) ALPHABET = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ" BASE = len(ALPHABET) # We add a massive offset so even ID #1 looks like a randomized gacha code OFFSET = 14758923 def encode_id(instance_id: int) -> str: """Converts a database integer ID into a cool alphanumeric string.""" num = instance_id + OFFSET if num == 0: return ALPHABET[0] arr = [] while num: num, rem = divmod(num, BASE) arr.append(ALPHABET[rem]) arr.reverse() return ''.join(arr) def decode_id(code: str) -> int: """Converts the alphanumeric string back into the database integer ID.""" num = 0 for char in code: if char not in ALPHABET: raise ValueError(f"Invalid character in code: {char}") num = num * BASE + ALPHABET.index(char) return num - OFFSET