これはパスワードを自動生成する処理を書くときだけでなく自分で作る場合にもですが、あまり使わない方がいい記号というのがあります。
USキーボードとJISキーボードとでキー位置が異なるやつです。
位置が異なるとどういう問題が起こってくるかというと、リモードデスクトップやVNCでリモートコンピューターからパスワードを打ち込まないといけなくなったとき、あちらとこちらでキーボードタイプが異なると記号がどう入力されるか混乱しがちとなるからです。
(おまけに、パスワード入力欄はマスクされて目で見えないことが多く混乱に拍車をかけます)
無用なユーザー混乱、さらには無駄なログインロック発生とそのサポートを避けようと思うなら、USキーボードとJISキーボードでキー位置の同じ記号、すなわち
! - , . / ; < > ? # $ % それに半角スペース
だけに限っておくのが無難と存じます。
なお、世界のキーボードはまたそれぞれ記号のキー位置が異なりますので、国際的なWebサービスを作ろうという場合にはもう気にしても仕方がなくなってくるでしょうね。日本ローカルなサービス、ソフトウェアの場合のお話でした。