マイナンバーと法人番号

その是非はともかくとして、そろそろマイナンバーが使われ始める。今頃の恒例行事となっている年末調整にも必要らしい。
マイナンバー 社会保障・税番号制度
個人だけだと思ったら、法人にも番号が振られている。
法人番号公表サイト
ソフト屋の端くれとして、その番号をチェックするロジックがきになる訳で。
でももう色々なサイトに掲載されている。
行政手続における特定の個人を識別するための番号の利用等に関する法律施行令
法人番号の指定等に関する省令
国が書くと、わかりづらいので、個人で掲載している所も探す。
マイナンバーのチェックデジットを計算する
マイナンバー法における法人番号の検査用数
RubyとJavascriptで書かれている。まあ自分用にC#で起こしてみる。


○マイナンバー
using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace TawamureDays {

public static class Utils {

/// <summary>マイナンバー用正規表現</summary>
private static Regex REG_MYNUMBER = new Regex(@"^[0-9]{12}\z");

/// <summary>
/// マイナンバーかどうか
/// </summary>
/// <param name="targetText">検査対象文字列</param>
/// <returns>true:マイナンバーとして正しい</returns>
private static bool IsMyNumberText(string targetText) {

if (string.IsNullOrEmpty(targetText) ||
!REG_MYNUMBER.IsMatch(targetText)) {
//マイナンバーは12桁。
return false;
}

var digit = 1;
var total = 0;

//残り11桁をリバースして集計
foreach (var number in
targetText.Take(11).
Select(ch => Convert.ToInt32(ch.ToString())).
Reverse()) {
total += number * (digit + (digit <= 6 ? 1 : -5));
digit ++;
}

var result = total % 11;

return Convert.ToInt32(targetText.Last().ToString()) ==
((result <= 1) ? 0 : (11 - result));
}
}
}

○法人番号
using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace TawamureDays {

public static class Utils {

/// <summary>法人番号用正規表現</summary>
private static Regex REG_CORPNUMBER = new Regex(@"^[0-9]{13}\z");

/// <summary>
/// 法人番号かどうか
/// </summary>
/// <param name="targetText">検査対象文字列</param>
/// <returns>true:法人番号として正しい</returns>
private static bool IsCorpNumberText(string targetText) {

if (string.IsNullOrEmpty(targetText) ||
!REG_CORPNUMBER.IsMatch(targetText)) {
//法人番号は13桁。
return false;
}

var digit = 1;
var total = 0;

foreach (var number in
targetText.Skip(1).
Select(ch => Convert.ToInt32(ch.ToString())).
Reverse()) {
total += number * (digit % 2 == 0 ? 2 : 1);
digit ++;
}

return Convert.ToInt32(targetText.First().ToString()) == (9 - (total % 9));
}
}
}

法人番号は、公表されているので、マイナンバーと違ってテスト文字列には事欠かない。
国税行 法人番号公表サイト
マイナンバーは、そのチェックロジックより、扱いに関するルールの方が遥かにめんどくさそう。チェックだけでなく、11桁の適当な数値からマイナンバーとして正しい12桁の文字列を作るメソッドなんてのが、テストには必要かもしれない。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m