Skip to content

Instantly share code, notes, and snippets.

@fabiolimace
Last active April 27, 2021 23:55
Show Gist options
  • Save fabiolimace/508dd2dd9d32fd493b31a5f386d5d4bc to your computer and use it in GitHub Desktop.
Save fabiolimace/508dd2dd9d32fd493b31a5f386d5d4bc to your computer and use it in GitHub Desktop.
Generate a list of UUIDs in base-36, base-58 or base-62
#!/bin/env python3
import string
from uuid import uuid4
alphabet_b36_lower = "0123456789abcdefghijklmnopqrstuvwxyz" # base-36
alphabet_b36_upper = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # base-36
alphabet_b58_lower = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ" # base-58
alphabet_b58_upper = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" # base-58 (used in BTC)
alphabet_b62_lower = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" # base-62
alphabet_b62_upper = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" # base-62
def basen(number, base, alphabet):
'''https://stackoverflow.com/questions/2267362/how-to-convert-an-integer-to-a-string-in-any-base'''
output = ""
while number:
output += alphabet[number % base]
number //= base
return output[::-1] or "0"
def print_list(base, length, alphabet):
padding_char = alphabet[0]
for i in range(0, 1000):
uuid = uuid4()
number = uuid.int
encoded = basen(number, base, alphabet)
print('{"' + str(uuid) + '", "' + encoded.rjust(length, padding_char) + '"}, //')
# CHOOSE ONE OPTION:
print_list(36, 25, alphabet_b36_lower) # base-36 lower
# print_list(36, 25, alphabet_b36_upper) # base-36 upper
# print_list(58, 22, alphabet_b58_lower) # base-58 lower first
# print_list(58, 22, alphabet_b58_upper) # base-58 upper first
# print_list(62, 22, alphabet_b62_lower) # base-62 lower first
# print_list(62, 22, alphabet_b62_upper) # base-62 upper first
@fabiolimace
Copy link
Author

fabiolimace commented Apr 27, 2021

This comment contains 3 lists generated by the script. Each list contains 10 lines.

base-36 (lowercase)

{"af7b0959-d916-40b0-8443-2ef22a6d2557", "adzzfv1klzmpwc55z8o60f68n"}, //
{"1d9772bc-76b5-41eb-9aac-31ed62188eb6", "1r2gd7niddmwltccqexatsl2u"}, //
{"e5408ee6-e185-4d1a-86fa-1f9a239e24a7", "dkloh8pksx09fj23bchsz1l7r"}, //
{"1c0725aa-5226-4782-8eb8-43c423057c3b", "1nqh9fwm77f7l1zd9mt079id7"}, //
{"d7d96d3f-9b24-497f-8b2f-f85484c5068d", "cs1bsvdfss5qrreg0hkswwyh9"}, //
{"2995adfc-9b57-47a3-bffb-b8e73f52376e", "2gmn28uns4s7ozz2mxqvhccj2"}, //
{"2a0ef2f4-799b-4974-8fc5-e56a2f5a4649", "2hmzikfgtphuli87v47ymldmx"}, //
{"16b655b4-4d21-43bb-bed1-a947b3b88621", "1ceml2r1akg4kmfzy53rscw81"}, //
{"fad4614d-6673-4466-bfe3-d51f6a6b6490", "eul8j8lr8ewflhjo4pn431rio"}, //
{"3b7fa836-c487-4bbe-976d-60cb83c12bdc", "3it442kqumpzszbn0mnod6kt8"}, //

base-58 (uppercase first, used in Bitcoin)

{"81e2fd37-01f2-4d78-a736-5a2ee460405a", "H3G4faAGpbMAAAKQSJpXnh"}, //
{"4ca93fe4-df5d-4555-8aba-7fc8c62811b2", "AU47gnTFLMiCNErQFRiWWd"}, //
{"692f8e6a-0db4-4e5d-8192-9104af4aeaa1", "DzMHCCe1FZ9a5dj8UkieSC"}, //
{"60dd7318-5e0c-4d14-9741-cde23ec7e914", "Cxkqgh1YyjdwqtGxpqB2pT"}, //
{"c06706ff-84a6-4762-b88b-11a0776ea692", "Qm1BZsr6bU1LgaXcpPLKeq"}, //
{"92b875b9-a320-40b2-a216-2cd234f91828", "K7psW24MifWcNj794Ggish"}, //
{"21a7b046-b800-4730-aa04-ef8e42c23596", "5A3LXUde9EKckYJ4XWMaXw"}, //
{"111471f3-bc5f-424a-944a-8f597c236e12", "37KzdGj33g6cTg9dv1s9qb"}, //
{"b9b8fb90-132c-4226-b667-b03827ce972f", "PwAMuUQxa8PXuqPaNT7QzS"}, //
{"906a6047-40fa-4614-97e6-da0ccff798e8", "JqKNBGKyZ1K7N4VsqgDwC3"}, //

base-62 (uppercase first)

{"fd7c8e2f-39b9-4875-9351-dc405a779474", "7iJynqEF7uy5D7n3ab1cWK"}, //
{"7f730cb1-0e83-4389-a959-e2eacc7ab62d", "3sUbPCca93IjJmgtx52gOL"}, //
{"d70fb4a8-8f73-406c-a134-c776f578eb4a", "6XoWixeQSEBZVM3dgbv5NS"}, //
{"62ed98f7-3187-45be-83af-201c43e05cb7", "30fpU7IyPH6lr2p6DLACD1"}, //
{"8e0fcdbe-12b0-421a-8de4-9ac2e4a36eb6", "4K48EEPK8gwW70Y7tJyHoc"}, //
{"eb574660-9a61-4ded-9981-706ebba84ded", "7A553cgVbFVylEVGYhqw73"}, //
{"5bc66c19-e478-4d35-8638-e398c86f8c40", "2nAyouaV6pW3hfTV2D3TTE"}, //
{"403d80a5-c92e-4022-94ff-df0ab9909784", "1xDcAbRDGjMcshJypzldIK"}, //
{"373259ea-408c-4103-ae24-b7493dae8b3a", "1g9aUQYvbq58Y2RIk6vNbG"}, //
{"a0c16067-a0f5-4038-a2ea-95831797aa55", "4tL91vRzKn0GYcx0DkwPrh"}, //

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment