汎用パスワード発行プログラム ソースと解説

前回はマイナンバーカードを受け取るときに必要なふたつのパスワードを作るプログラムを作りました。どのようなパスワードが必要かがすでに指定されていたので、使用する際には何も指定する必要がありませんから、プログラムとしては案外簡単なものでした。

今回は、文字の種類を指定し、さらにパスワードの長さも指定できる汎用のプログラムを作ります。

ユーザーが指定できるということは、入植値をチェックする必要が出て来ますから、それだけプログラムは複雑になります。

さらに今回は何度も実行して確認していたら、数字が含まれない場合も出てくるという事象に出遭いました。なるほど、確かに乱数で文字を選ぶので、たまたま数字にヒットしなかったということです。これを防止する為に、もし数字がふくまれていなかった時は、数字が含まれるまで自動的に繰り返すというしかけも作ります。

プログラム言語 十進BASIC

パソコンで簡単に作れる物というと、以前はDOSベースのBASICがありましたが、今や、Windowsの時代です。そこで、以前も使ったことのある。十進BASICを使うことにしました。もちろんこれもコンパイル不要のインタープリター型です。

これは十進BASICのホームページから無料でダウンロードできます。

文法は十進BASICヘルプ Windows版で解説されています。

要件

文字種は、大文字、小文字、数字の組み合わせで、数字は必須とします。以下の組み合わせから選択できます。

  1. 大文字+数字
  2. 小文字+数字
  3. 大文字+小文字+数字
  4. 数字のみ

パスワードの長さは4〜16文字を入力指定できます。

必ず数字が含まれるようにします。

プログラム・ソース

以下のソースをそのまま十進BASICにコピペすると使えます。

解説

ほとんどソースの中に注釈を入れてありますが、足りない部分をあげておきます。

  1. omoji$(大文字):Oはゼロと紛らわしく、Iは1と紛らわしいので使いません。
  2. komoji$(小文字):lは数字の1と紛らわしいので使いません。
  3. suuji$(数字):0はオーと、1はl,Iと紛らわしいので使いません。
  4. DECLARE EXTERNAL FUNCTION password$:前回、外部関数として作ったので、今回はそれを引き継いで行きます。
  5. SET ECHO "OFF":入力画面の文字を出力画面に表示しないようにします。
  6. DO LOOP UNTIL (j>=1 AND j<=4):入力値が1から4になるまで繰り返します。
  7. LET mode$(1) = "大文字+数字":文字種の文字列は繰り返して表示するので、配列に入れておきます。
  8. EXTERNAL FUNCTION password$( moji$ , nagasa ):外部関数の引数は文字列と文字数の二つで、結果としてパスワードを返します。
  9. MID$(moji$,ichi,1):moji$のichi番目の文字から1文字を返す関数です。
  10. POS(kekka$,b$) :kekka$の中でb$がある位置を返す関数です。無ければゼロになります。すなわち、数字を全部チェックしても、その位置の合計がゼロならば、数字がまったく含まれていないということになります。

実行画面

実行すると、このように結果が表示され、入力プロンプトウィンドウでnを入力すると、何度でも繰り返してパスワードを発行させることができます。

逆スクロールすれば以前の表示をさかのぼって見ることもできます。

2021年6月6日 記