chat_link_code.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. """
  2. @project: MaxKB
  3. @Author: niu
  4. @file: chat_link_code.py
  5. @date: 2026/2/9 11:31
  6. @desc:
  7. """
  8. from typing import Union
  9. import uuid_utils.compat as uuid
  10. class UUIDEncoder:
  11. BASE62_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  12. BASE62_LEN = 62
  13. @staticmethod
  14. def encode(uuid_obj: Union[uuid.UUID, str] = None) -> str:
  15. if uuid_obj is None:
  16. uuid_obj = uuid.uuid7()
  17. elif isinstance(uuid_obj, str):
  18. uuid_obj = uuid.UUID(uuid_obj)
  19. num = int(uuid_obj.hex, 16)
  20. if num == 0:
  21. return UUIDEncoder.BASE62_ALPHABET[0]
  22. result = []
  23. while num:
  24. num, rem = divmod(num,62)
  25. result.append(UUIDEncoder.BASE62_ALPHABET[rem])
  26. return ''.join(reversed(result))
  27. @staticmethod
  28. def decode(encoded: str) -> uuid.UUID:
  29. num = 0
  30. for char in encoded:
  31. num = num * UUIDEncoder.BASE62_LEN + UUIDEncoder.BASE62_ALPHABET.index(char)
  32. return uuid.UUID(int=num)
  33. @staticmethod
  34. def decode_to_str(encoded: str) -> str:
  35. return str(UUIDEncoder.decode(encoded))