# HG changeset patch # User Jeff Hammel # Date 1418234911 28800 # Node ID fc4749433229576f2cddbd072763155ac606579d # Parent 6ba565f996968a0d78d97fb7123f5036e3820001 https://gist.github.com/adyliu/4494223 diff -r 6ba565f99696 -r fc4749433229 python/base_encode.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/base_encode.py Wed Dec 10 10:08:31 2014 -0800 @@ -0,0 +1,43 @@ +#!/usr/bin/env python +#-*- coding:utf-8 -*- +# Base62 tools (convert number <=> string) +# v1.0/20130109 +# python 2.x/3.x supported +# +#author: Ady Liu(imxylz@gmail.com) +#github: github.com/adyliu + +import sys + +basedigits='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' +BASE=len(basedigits) + + +def decode(s): +ret,mult = 0,1 +for c in reversed(s): +ret += mult*basedigits.index(c) +mult *= BASE +return ret + +def encode(num): +if num <0: raise Exception("positive number "+num) +if num ==0: return '0' +ret='' +while num != 0: +ret = (basedigits[num%BASE])+ret +num = int(num/BASE) +return ret + + +if __name__ == '__main__': +if len(sys.argv) < 2: +print("Usage: base62.py ...") +sys.exit(1) +width = max(len(x) for x in sys.argv[1:]) +for argv in sys.argv[1:]: +try: +num = int(argv) +print('%*s %s %s' % (width,argv,'ENCODE',encode(num))) +except ValueError: +print('%*s %s %s' % (width,argv,'DECODE',decode(argv))) \ No newline at end of file