| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """
- @project: MaxKB
- @Author: niu
- @file: chat_link_code.py
- @date: 2026/2/9 11:31
- @desc:
- """
- from typing import Union
- import uuid_utils.compat as uuid
- class UUIDEncoder:
- BASE62_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- BASE62_LEN = 62
- @staticmethod
- def encode(uuid_obj: Union[uuid.UUID, str] = None) -> str:
- if uuid_obj is None:
- uuid_obj = uuid.uuid7()
- elif isinstance(uuid_obj, str):
- uuid_obj = uuid.UUID(uuid_obj)
- num = int(uuid_obj.hex, 16)
- if num == 0:
- return UUIDEncoder.BASE62_ALPHABET[0]
- result = []
- while num:
- num, rem = divmod(num,62)
- result.append(UUIDEncoder.BASE62_ALPHABET[rem])
- return ''.join(reversed(result))
- @staticmethod
- def decode(encoded: str) -> uuid.UUID:
- num = 0
- for char in encoded:
- num = num * UUIDEncoder.BASE62_LEN + UUIDEncoder.BASE62_ALPHABET.index(char)
- return uuid.UUID(int=num)
- @staticmethod
- def decode_to_str(encoded: str) -> str:
- return str(UUIDEncoder.decode(encoded))
|