~mhall119/youoneteeoh/rem-relative-imports

« back to all changes in this revision

Viewing changes to shorturl/cb62.py

  • Committer: john.lenton at canonical
  • Date: 2011-09-06 16:14:52 UTC
  • Revision ID: john.lenton@canonical.com-20110906161452-pa3g10r7rvyvaawy
umm ... I did stuff. Yes, yes, I did.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import string
 
2
import random
 
3
from zipfile import crc32
 
4
 
 
5
DIGITS = string.digits + string.uppercase + string.lowercase
 
6
N = len(DIGITS)
 
7
 
 
8
def _get_digits(username):
 
9
    random.seed(crc32('01dQs' + username))
 
10
    d = bytearray(DIGITS)
 
11
    random.shuffle(d)
 
12
    return str(d)
 
13
 
 
14
 
 
15
def encode(number, username):
 
16
    user_digits = _get_digits(username)
 
17
    encoded = bytearray()
 
18
    q = number
 
19
    while 1:
 
20
        q, r = divmod(q, N)
 
21
        encoded.append(user_digits[r])
 
22
        if not q:
 
23
            break
 
24
    return str(encoded)
 
25
 
 
26
def decode(encoded, username):
 
27
    user_digits = _get_digits(username)
 
28
    number = 0
 
29
    for i, c in enumerate(encoded):
 
30
        number += user_digits.index(c) * N ** i
 
31
    return number
 
32