Skip to content

Instantly share code, notes, and snippets.

@fabiolimace
Last active April 28, 2021 00:01
Show Gist options
  • Save fabiolimace/0001fb4bf98ef0d906b70210cbc0eacc to your computer and use it in GitHub Desktop.
Save fabiolimace/0001fb4bf98ef0d906b70210cbc0eacc to your computer and use it in GitHub Desktop.
Generate a list of UUIDs in base-16, base-32 or base-64
#!/bin/env python3
import string
from uuid import uuid4
alphabet_b16 = "0123456789abcdef" # base-16
alphabet_b32 = "abcdefghijklmnopqrstuvwxyz234567" # base-32
alphabet_b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # base-64
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 = length
padding_char = alphabet[0]
for i in range(0, 1000):
uuid = uuid4()
number = uuid.int
encoded = ""
if base == 32:
padding = 32
number = number << (8 * 4) # padding with 32 bits (4 bytes)
if base == 64:
padding = 24
number = number << 16 # padding with 16 bits (2 bytes)
encoded = basen(number, base, alphabet)
print('{"' + str(uuid) + '", "' + encoded.rjust(padding, padding_char)[:length] + '"}, //')
# CHOOSE ONE OPTION:
print_list(16, 32, alphabet_b16) # base-16
# print_list(32, 26, alphabet_b32) # base-32
# print_list(64, 22, alphabet_b64) # base-64
@fabiolimace
Copy link
Author

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

base-16

{"7707388c-e508-4565-9963-77a6f592741c", "7707388ce5084565996377a6f592741c"}, //
{"7324c591-5d29-4e9b-85e8-2302a52903bf", "7324c5915d294e9b85e82302a52903bf"}, //
{"449ea876-f40b-4ae2-9a0d-8605372aa00a", "449ea876f40b4ae29a0d8605372aa00a"}, //
{"43386ccb-edd3-4759-8bfd-23a705794cd6", "43386ccbedd347598bfd23a705794cd6"}, //
{"8ed4c08f-a0ce-435a-969f-76cabb1924ba", "8ed4c08fa0ce435a969f76cabb1924ba"}, //
{"0ed715aa-ab15-425b-9b39-4df3035def0b", "0ed715aaab15425b9b394df3035def0b"}, //
{"5d6f78f9-07d7-4517-b0ce-153b773de21b", "5d6f78f907d74517b0ce153b773de21b"}, //
{"2fc58f03-c9dc-4597-976c-b957146134ba", "2fc58f03c9dc4597976cb957146134ba"}, //
{"8670ff73-ef3d-45ac-85d9-0c9a56e1a93c", "8670ff73ef3d45ac85d90c9a56e1a93c"}, //
{"18d0b988-b004-46ae-896c-e62a9923cfa7", "18d0b988b00446ae896ce62a9923cfa7"}, //

base-32

{"178adb4a-f650-4693-af85-2f87e6300f0e", "c6fnwsxwkbdjhl4ff6d6mmapby"}, //
{"8a9980af-6dc8-431b-8d11-c1431264ad02", "rkmybl3nzbbrxdiryfbrezfnai"}, //
{"e0d47c80-71b1-438d-a3b5-4ea52d5564d9", "4dkhzadrwfby3i5vj2ss2vle3e"}, //
{"d94eca70-8b38-43c0-8f12-6d34619f4be6", "3fhmu4elhbb4bdysnu2gdh2l4y"}, //
{"d4163fb2-22f7-45a3-b168-fd0934dc35f6", "2qld7mrc65c2hmli7uetjxbv6y"}, //
{"188abcbe-676e-430d-9a1d-6fb789054350", "dcflzpthnzbq3gq5n63ysbkdka"}, //
{"78f90c81-bc8f-4978-9143-de86c3474918", "pd4qzan4r5exrekd32dmgr2jda"}, //
{"945440d0-4c8c-41af-ad56-49f5bbb7f584", "srkebucmrra27lkwjh23xn7vqq"}, //
{"40d0fca9-c280-48b3-86a7-8619184b8c95", "idipzkocqbelhbvhqymrqs4msu"}, //
{"2f951d13-360e-49ea-bc71-6b848203b09e", "f6kr2ezwbze6vpdrnociea5qty"}, //

base-64

{"aa3801c7-3d26-4f76-91a0-c69cb8004e86", "qjgBxz0mT3aRoMacuABOhg"}, //
{"b1d794bf-e9f5-47c1-8eda-6ba6728fbc19", "sdeUv+n1R8GO2mumco+8GQ"}, //
{"b344a912-5fcb-45ca-8545-dd50d60f2036", "s0SpEl/LRcqFRd1Q1g8gNg"}, //
{"17361b90-ac95-433d-ae79-831403f24636", "FzYbkKyVQz2ueYMUA/JGNg"}, //
{"ae50fe38-a203-4682-a5df-a8d2e7d7ea82", "rlD+OKIDRoKl36jS59fqgg"}, //
{"95b34e0b-b49f-41d7-9323-f8095ce6ebf5", "lbNOC7SfQdeTI/gJXObr9Q"}, //
{"ac0e949c-6aed-44ee-a240-fe3adb6ad608", "rA6UnGrtRO6iQP4622rWCA"}, //
{"e37792b8-4eee-43d2-8845-fbbcc8f797ea", "43eSuE7uQ9KIRfu8yPeX6g"}, //
{"fa38f185-1c94-472b-b610-3de307521830", "+jjxhRyURyu2ED3jB1IYMA"}, //
{"303e1869-d95a-407f-9bf6-494081489410", "MD4YadlaQH+b9klAgUiUEA"}, //

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