File size: 931 Bytes
732ca45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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