Advertisement
Cinestra

URL2

Oct 15th, 2013
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.77 KB | None | 0 0
  1. """url2 by Nick Ku"""
  2.  
  3. def number_to_character( number ):
  4. #Note: <10: 0-9, 10-35: A-Z, 36-61: a-z, 62: -, 63: +, reject out of range
  5.     if number < 10:
  6.         return chr( number + 48)
  7.     elif 10 <= number <= 35:
  8.         return chr( number + 55 )
  9.     elif 35 < number <= 61:
  10.         return chr( number + 61 )
  11.     elif number == 62:
  12.         return chr( 45 )
  13.     elif number == 63:
  14.         return chr( 43 )
  15.     else:
  16.         print ('Invalid number')
  17.  
  18. def character_to_number( character ):
  19. #Note: Inverse function. Transform letter to its order then subtract.
  20.     number = ord( character )
  21.     if 48 <= number <= 57:
  22.         return number-48
  23.     elif 65 <= number <= 90:
  24.         return number - 55
  25.     elif 97 <= number <= 122:
  26.         return number - 61
  27.     elif number == 45:
  28.         return 62
  29.     elif number == 43:
  30.         return 63
  31.     else:
  32.         print ('Invalid character')
  33.  
  34. def encode( number ):
  35. #converts number into 6 characters, must convert into base 64 first
  36.     new_number = ""
  37.     if number < 0:
  38.         print ('Negative numbers are invalid')
  39.     while number !=0:
  40.         remainder = number % 64
  41.         new_number += number_to_character(remainder)
  42.         number //= 64
  43.     while len(new_number) < 6:
  44.         new_number += '0'
  45.     new_number = new_number[:6]
  46.     return new_number
  47.  
  48. def decode( number ):
  49. #inverse of encode
  50.     result = 0
  51.     exponent = 0
  52.     for item in number:
  53.         result += character_to_number(item) * (64**exponent)
  54.         exponent += 1
  55.     return result
  56.  
  57. def newencode( number ):
  58.     bit_shift = [5, 1, 4, 2, 3, 0]
  59.     count = 0
  60.     new_number = 0
  61.     for x in bit_shift:
  62.         new_number += (((number>>(x*6))&0b111111)<<count)
  63.         count += 6
  64.  
  65.     return encode(new_number)
  66.  
  67. def newdecode( number ):
  68.     old_number = decode(number)
  69.     bit_shift = [5, 1, 4, 2, 3, 0]
  70.     count = 0
  71.     new_number = 0
  72.     for x in bit_shift:
  73.         new_number += (((old_number>>count)&0b111111)<<(x*6))
  74.         count += 6
  75.     return new_number
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement