Skip to content

Instantly share code, notes, and snippets.

@mverleg
Created February 26, 2018 22:07
Show Gist options
  • Save mverleg/853350da706d426108593e343e1725cb to your computer and use it in GitHub Desktop.
Save mverleg/853350da706d426108593e343e1725cb to your computer and use it in GitHub Desktop.
Encode/decode an incrementing integers as an alphanumeric identifier
"""
Encode/decode an incrementing integers as an alphanumeric identifier.
Uses digits and case-insensitive letters (produces caps, accepts both), minimum length 3.
Does not cryptographically hide the original id.
"""
def to_code(nr):
assert nr >= 0
nr *= 7
code = ''
while nr > 0:
letter = ALPHABET[nr % len(ALPHABET)]
code = letter + code
nr //= len(ALPHABET)
while len(code) < 3:
code = ALPHABET[0] + code
return code
def from_code(code):
code = code.upper()
nr = 0
mult = 1
for letter in reversed(code):
nr += mult * REVERSE_ALPHABET[letter]
mult *= len(ALPHABET)
assert nr % 7 == 0
return nr // 7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment