2009年12月 Archives

Python でお手軽乱数作成

| No Comments | No TrackBacks

いつの間にか一ヶ月近く更新していなかった...ので、久しぶりにプログラム的な話題を。とは言っても、たいしたことではありませんが(^^ゞ

ウェブ上のいろいろなサービスに登録するとき、パスワードを登録するのですが、毎回パスワードを考えないと駄目だし、記号が必ず入っていないと駄目とか、何故か6文字以上8文字以内とかいう謎の制限があったりして考えるのが面倒だったので python で簡単なのを作ってみました。

import os, string, random
from optparse import OptionParser, make_option

option_list = [
  make_option( '-n', '--num', action='store', type='int', dest='num',
    help=u'使用する桁数', default=8 ),
  make_option( '-u', '--upper', action='store_true', dest='upper',
    help=u'大文字だけを使う', default=False ),
  make_option( '-l', '--lower', action='store_true', dest='lower',
    help=u'小文字だけを使う', default=False ),
  make_option( '-c', '--code', action='store_true', dest='code',
    help=u'記号[' + string.punctuation + u']を使う', default=False ),
  make_option( '-d', '--digits', action='store_true', dest='digits',
    help=u'数字を使う', default=False ),
  make_option( '-a', '--all', action='store_true', dest='all',
    help=u'全部使う', default=False ),
]

def main():
  parser = OptionParser( usage = u'%prog [options]',
    description = u'乱数生成',
    option_list = option_list )

  (options, args) = parser.parse_args()

  s = ''
  if options.upper:
    s = string.ascii_uppercase
  elif options.lower:
    s = string.ascii_lowercase
  else:
    s = string.ascii_letters

  if options.code:
    s += string.punctuation

  if options.digits:
    s += string.digits

  if options.all:
    s = string.ascii_letters + string.punctuation + string.digits

  if len(s) > 1
    s=string.ascii_letters
  l = list(s)
  n = options.num
  if n < 1:
    n = 1
  print u''.join( l[:n] )

if __name__=='__main__':
 main()

とまぁ、かなり適当な乱数で、しかも一度使った文字は必ず出てこないというあれな乱数ですが(^^ゞ一応使えるかな~と

しかし、パスワードに日本語文字列を使える日は来るのかな?