日本でも個人番号制度「マイナンバー制度」が始まる(2015年10月5日)。当ブログでも『個人番号の収集プロセス』について、いくつかのワークフロー(業務プロセス)を例示してきた。
- X. (基本パターン)
- A. 中小企業パターン
- B. 支店毎に本人確認
- C. 本店のみで本人確認
- D. 複雑な申請ルートで本人確認
そして、次週以降は「法人番号」の利活用についても、その事例を紹介していく予定となっている。法人番号システム『Web-API 機能』の活用事例についても、「事前検証環境」にて動作確認でき次第、順次公開していく予定だ。
今回は「マイナンバー」を取り扱う業務でかかせない「誤り検出」についてまとめておく。
以下のワークフロー定義は、入力データの「正確性チェック」を体験できるサンプルだ。[1] 入力中データが自動的にチェックされる仕組み(入力画面での JavaScript)と、[2] サーバ側にてデータチェックされる仕組み(スクリプト工程での JavaScript)の両方が設定されている。
なお、チェックディジットとは「検査用文字」という意味だ。『クレジットカード番号』や『商品コード』(EAN/JANバーコード)や『国際標準図書番号』(ISBN)などでも幅広く活用されている。日本の『マイナンバー』の場合は、
- 法人番号(13桁数字): 左端の数字
- 個人番号(12桁数字): 右端の数字
[Check Digit サンプル:「TEST Form」画面]
[Check Digit サンプル]
この例では、まず『データ入力画面』において、リアルタイムに入力値がチェックされる。(法人番号1・個人番号1)
すなわち「法人番号(13桁)」や「個人番号(12桁)」が入力された瞬間、ブラウザ側の処理(JavaScript 処理)によって「検査用数字」が計算され、検査用文字との照合が行われている。単純な入力ミスであれば、この瞬間に気づくだろう。
また、『スクリプト工程』でのチェックも設定されている。(法人番号2・個人番号2)
これは、別システムから法人番号を受信した場合など、サーバ側で改めて検査/検証すべきケースに有用だ。むろん、別システム側が既に検査していた場合は「無駄な計算」となってしまう可能性もあるが、わずかな計算量であり大きな問題ではない。(「入力画面チェック」と組み合わせても良い)
いずれのケースも、「誤りデータ」を自動的に検知できる仕組みだ。
実際に入力体験してみると実感できるが、「誤入力」は極めて難しい。13桁/12桁のうち2か所以上を間違える必要があるが、すべての誤入力(入力ミス)は検知されるだろう。行政手続書類を作成するワークフローには、積極的に組み込んでいきたい。「呼び出し対応」や「再申請」といった手間を排除できる。延いては、行政コストの削減にもつながる。
◆◆法人番号チェック
※ 「法人番号」は13ケタの数字で構成される。先頭文字(左端)がチェックディジットである。
◆入力画面でのスクリプト設定(法人番号)
<script type="text/javascript"> jQuery('input[name="data[1].input"]').on('keydown keyup keypress change',function(){ //データ項目番号「1」のTextフォーム値に変化があれば、 var thisValueLength = jQuery(this).val().length; //文字数が13桁ならチェックディジットを算出 if( thisValueLength == 13 ){ var mysum = 0; var thisValue = jQuery(this).val(); // for( i=1; i<13; i++){ // mysum += parseInt( thisValue.charAt(i) ) * (i % 2 + 1); // } mysum += parseInt( thisValue.charAt(1) ) * 2; mysum += parseInt( thisValue.charAt(2) ); mysum += parseInt( thisValue.charAt(3) ) * 2; mysum += parseInt( thisValue.charAt(4) ); mysum += parseInt( thisValue.charAt(5) ) * 2; mysum += parseInt( thisValue.charAt(6) ); mysum += parseInt( thisValue.charAt(7) ) * 2; mysum += parseInt( thisValue.charAt(8) ); mysum += parseInt( thisValue.charAt(9) ) * 2; mysum += parseInt( thisValue.charAt(10) ); mysum += parseInt( thisValue.charAt(11) ) * 2; mysum += parseInt( thisValue.charAt(12) ); var checkdigitnum = 9 - mysum % 9; var typedcd = parseInt( thisValue.charAt(0) ); //#mymessage1のHTMLを書き換える if( typedcd == checkdigitnum ){ jQuery( '#mymessage1' ).html("OK"); } else { jQuery( '#mymessage1' ).html("<font color=red>NG</font>"); } } else { jQuery( '#mymessage1' ).html("<font color=blue>13桁の数字を入力してください</font>"); } }); </script>
◆自動工程でのスクリプト検査(法人番号)
//// == 参照 / Retrieving == var mynumber = data.get("3") + ""; //// == 演算 / Calculating == if( mynumber == "null" ){ retVal.put("4", "(null)" ); }else if( mynumber.length == 13 ){ var mysum = 0; for( i=1; i<13; i++){ mysum += parseInt( mynumber.charAt(i) ) * (i % 2 + 1); } var checkdigitnum = 9 - mysum % 9; var typedcd = parseInt( mynumber.charAt(0) ); //// == 代入 / Updating == if( typedcd == checkdigitnum ){ retVal.put("4", "OK" ); } else { retVal.put("4", "Check-Digit ERROR" ); } } else { retVal.put("4", "Number of digits ERROR" ); }
◆◆個人番号チェック
※ 「個人番号」は12ケタの数字で構成される。末尾文字(右端)がチェックディジットである。
◆入力画面でのスクリプト設定(個人番号)
<script type="text/javascript"> jQuery('input[name="data[7].input"]').on('keydown keyup keypress change',function(){ //データ項目番号「7」のTextフォーム値に変化があれば、 var thisValueLength = jQuery(this).val().length; //文字数が12桁ならチェックディジットを算出 if( thisValueLength == 12 ){ var mysum = 0; var thisValue = jQuery(this).val(); for( i=0; i<5; i++){ mysum += (11 - i - 5) * parseInt( thisValue.charAt(i) ); } for( i=5; i<11; i++){ mysum += (11 - i + 1) * parseInt( thisValue.charAt(i) ); } var checkdigitnum = 11 - mysum % 11; if( checkdigitnum > 9 ){ checkdigitnum = 0; } var typedcd = parseInt( thisValue.charAt(11) ); //#mymessage7のHTMLを書き換える if( typedcd == checkdigitnum ){ jQuery( '#mymessage7' ).html("OK"); } else { jQuery( '#mymessage7' ).html("<font color=red>NG</font>"); } } else { jQuery( '#mymessage7' ).html("<font color=blue>12桁の数字を入力してください</font>"); } }); </script>
◆自動工程でのスクリプト設定(個人番号)
//// == 参照 / Retrieving == var mynumber = data.get("8") + ""; //// == 演算 / Calculating == if( mynumber == "null" ){ retVal.put("9", "(null)" ); }else if( mynumber.length == 12 ){ var mysum = 0; for( i=0; i<5; i++){ mysum += parseInt( mynumber.charAt(i) ) * (11 - i - 5); } for( i=5; i<11; i++){ mysum += parseInt( mynumber.charAt(i) ) * (11 - i + 1); } var checkdigitnum = 11 - mysum % 11; if( checkdigitnum > 9 ){ checkdigitnum = 0; } var typedcd = parseInt( mynumber.charAt(11) ); //// == 代入 / Updating == if( typedcd == checkdigitnum ){ retVal.put("9", "OK" ); } else { retVal.put("9", "Check-Digit ERROR" ); } } else { retVal.put("9", "Number of digits ERROR" ); }
<データ項目一覧画面>
[雛形ダウンロード (無料)]
- 業務テンプレート:Check Digit サンプル
- 在宅就労システム、無料クラウドでココまで出来る! (2015-03-16)
- 目指せコンシェルジュサービス! 回答所要時間を自動記録 (2013-10-15)
- 「大分類」を選ぶと選択肢が絞り込まれる様に (2014-05-12)
- M213 入力画面: 処理フォーム画面に “入力ヒント” が表示されるように設定する(HTML/JavaScript) (使い方)
- M230 自動工程: 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト) (使い方)
- M220 自動開始: 公開フォーム画面に入力があった時に自動的に開始されるように設定する (使い方)
- M203 業務の流れ: 処理フロー途中に、同時並行処理、単一選択分岐、複数選択分岐を設定する (使い方)
[英文記事(English Entry)]
0 件のコメント :
コメントを投稿