ランダムパスワードの生成

電子カルテの利用者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で実装し直すだけですね(笑)!