conv.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python
  2. # Read the wiki for more infomation
  3. # https://github.com/lennylxx/ipv6-hosts/wiki/sn-domains
  4. import sys
  5. table = '1023456789abcdefghijklmnopqrstuvwxyz'
  6. def iata2sn(iata):
  7. global table
  8. sn = ''
  9. for v in iata[0:3]:
  10. i = ((ord(v) - ord('a')) * 7 + 5) % 36
  11. sn += table[i]
  12. return sn
  13. def sn2iata(sn):
  14. global table
  15. iata = ''
  16. for v in sn:
  17. i = table.index(v)
  18. i = (5 - i % 7) * 5 + i / 7 + 10
  19. iata += table[i]
  20. return iata
  21. def num2code(num):
  22. global table
  23. code = ''
  24. for v in num:
  25. i = ((ord(v) - ord('0') + 1) * 7) % 36
  26. code += table[i]
  27. return code
  28. def code2num(code):
  29. global table
  30. num = ''
  31. for v in code:
  32. i = table.index(v)
  33. i = i / 7 + i % 7 - 1
  34. num += str(i)
  35. return num
  36. def main():
  37. if len(sys.argv) != 3:
  38. print 'usage:\n\t./%s -i iata\n\t./%s -s sn'\
  39. % (sys.argv[0], sys.argv[0])
  40. sys.exit(1)
  41. input = sys.argv[2]
  42. ret = ''
  43. if sys.argv[1] == '-i':
  44. ret += iata2sn(input[0:3])
  45. ret += num2code(input[3:5])
  46. ret += 'n'
  47. ret += num2code(input[6:8])
  48. print ret
  49. elif sys.argv[1] == '-s':
  50. ret += sn2iata(input[0:3])
  51. ret += code2num(input[3:5])
  52. ret += 's'
  53. ret += code2num(input[6:8])
  54. print ret
  55. else:
  56. print 'Unknown option.'
  57. sys.exit(1)
  58. if __name__ == '__main__':
  59. main()