ランダムパスワードの生成
電子カルテの利用者IDの初期パスワードとして、大文字アルファベットと数字で構成された6桁のランダムパスワードを設定する方針が決定されました。え!今更かよ!
さて生成コードをPythonで実装してみます。
import string from random import choice def get_PW(figures): pw = ''.join([choice(string.ascii_uppercase.replace('I','').replace('O','').replace('Z','')+string.digits.replace('0','').replace('1','').replace('2','')) for i in range(figures)]) if pw.isdigit():#数字だけの場合 return 'A'+pw[1:] elif set(pw).issubset(set(string.ascii_uppercase)):#文字だけの場合 return "9"+pw[1:] else:#数字と文字ともに含有している場合 return pw get_PW(6)
数字だけの場合はint(pw)としても良いです。文字だけの場合はどうするか悩みましたが、文字列を集合に変換し、集合「パスワード」が集合「大文字アルファベット」のサブセット(部分集合)であればすなわちパスワードが全て大文字アルファベットで構成されていることになる、という性質を利用することにしました。 あとは、紛らわしい文字と数字の組み合わせ(1とI, 0とO,2とZ)を除外しておいて視認性を高める工夫をしています。 後はこれをVBAで実装し直すだけですね(笑)!