あったので無くなる前にメモメモ
チェックデジット(C/D)とは データの正確性を保つ為に使用される文字。
計算式に基づき算出されます。 ・モジュラス10/ウェイト3 → JAN、ITF等で使用。 1) 一番右側のキャラクタを奇数として全てのキャラクタを奇数位置と偶数 位置に分けています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ValidateMyNumber
{
class Program
{
static void Main(string[] args)
{
WriteLine(ValidateMyNumber(“123456789010”)); //=>False
WriteLine(ValidateMyNumber(“123456789011”)); //=>False
WriteLine(ValidateMyNumber(“123456789012”)); //=>False
WriteLine(ValidateMyNumber(“123456789013”)); //=>False
WriteLine(ValidateMyNumber(“123456789014”)); //=>False
WriteLine(ValidateMyNumber(“123456789015”)); //=>False
WriteLine(ValidateMyNumber(“123456789016”)); //=>False
WriteLine(ValidateMyNumber(“123456789017”)); //=>False
WriteLine(ValidateMyNumber(“123456789018”)); //=>True
WriteLine(ValidateMyNumber(“123456789019”)); //=>False
WriteLine(ValidateMyNumber(“023456789013”)); //=>True
ReadLine();
}
public static bool ValidateMyNumber(string mynumber)
{
if (mynumber.Length != 12)
throw new ArgumentException(“マイナンバーは12桁です”);
var digits = mynumber.Select(x => int.Parse(x.ToString())).ToArray();
var checkDigit = digits.Last();
var reminder = Enumerable.Range(1, 11)
.Select(n => digits[digits.Length – 1 – n] * (n <= 6 ? n + 1 : n – 5))
.Sum() % 11;
return checkDigit == (reminder <= 1 ? 0 : 11 – reminder);
}
}
}