汎用パスワード発行プログラム ソースと解説
前回はマイナンバーカードを受け取るときに必要なふたつのパスワードを作るプログラムを作りました。どのようなパスワードが必要かがすでに指定されていたので、使用する際には何も指定する必要がありませんから、プログラムとしては案外簡単なものでした。
今回は、文字の種類を指定し、さらにパスワードの長さも指定できる汎用のプログラムを作ります。
ユーザーが指定できるということは、入植値をチェックする必要が出て来ますから、それだけプログラムは複雑になります。
さらに今回は何度も実行して確認していたら、数字が含まれない場合も出てくるという事象に出遭いました。なるほど、確かに乱数で文字を選ぶので、たまたま数字にヒットしなかったということです。これを防止する為に、もし数字がふくまれていなかった時は、数字が含まれるまで自動的に繰り返すというしかけも作ります。プログラム言語 十進BASIC
パソコンで簡単に作れる物というと、以前はDOSベースのBASICがありましたが、今や、Windowsの時代です。そこで、以前も使ったことのある。十進BASICを使うことにしました。もちろんこれもコンパイル不要のインタープリター型です。
これは十進BASICのホームページから無料でダウンロードできます。
文法は十進BASICヘルプ Windows版で解説されています。
要件
文字種は、大文字、小文字、数字の組み合わせで、数字は必須とします。以下の組み合わせから選択できます。
- 大文字+数字
- 小文字+数字
- 大文字+小文字+数字
- 数字のみ
パスワードの長さは4〜16文字を入力指定できます。
必ず数字が含まれるようにします。
プログラム・ソース
以下のソースをそのまま十進BASICにコピペすると使えます。
解説
ほとんどソースの中に注釈を入れてありますが、足りない部分をあげておきます。
- omoji$(大文字):Oはゼロと紛らわしく、Iは1と紛らわしいので使いません。
- komoji$(小文字):lは数字の1と紛らわしいので使いません。
- suuji$(数字):0はオーと、1はl,Iと紛らわしいので使いません。
- DECLARE EXTERNAL FUNCTION password$:前回、外部関数として作ったので、今回はそれを引き継いで行きます。
- SET ECHO "OFF":入力画面の文字を出力画面に表示しないようにします。
- DO LOOP UNTIL (j>=1 AND j<=4):入力値が1から4になるまで繰り返します。
- LET mode$(1) = "大文字+数字":文字種の文字列は繰り返して表示するので、配列に入れておきます。
- EXTERNAL FUNCTION password$( moji$ , nagasa ):外部関数の引数は文字列と文字数の二つで、結果としてパスワードを返します。
- MID$(moji$,ichi,1):moji$のichi番目の文字から1文字を返す関数です。
- POS(kekka$,b$) :kekka$の中でb$がある位置を返す関数です。無ければゼロになります。すなわち、数字を全部チェックしても、その位置の合計がゼロならば、数字がまったく含まれていないということになります。
実行画面
実行すると、このように結果が表示され、入力プロンプトウィンドウでnを入力すると、何度でも繰り返してパスワードを発行させることができます。
逆スクロールすれば以前の表示をさかのぼって見ることもできます。
2021年6月6日 記