読者です 読者をやめる 読者になる 読者になる

YDiary

メモ的な

C#でマイナンバーのチェックデジットを計算する

Ruby - マイナンバーのチェックデジットを計算する - Qiita

こんなのを見かけたのでC#で書いてみました。
なるべく短く書こうとしたけど2回Parseしたりしてて無駄があるなーと。
どうにかなりませんかね。

using System;
using System.Linq;

static bool ValidateMyNumber(string input)
{
  //入力チェック
  if (input.Length != 12) return false;
  var checkDigit = 0;
  if (input.Any(n => !int.TryParse($"{n}", out checkDigit))) return false;

  var remainder = input.Take(11).Reverse().Select((v, i) => new { v, i }).Sum(n => (n.v-'0') * (n.i <= 5 ? n.i + 2 : n.i - 4)) % 11;
  return checkDigit == (remainder <= 1 ? 0 : 11 - remainder);
}

追記 Parseやめたらちょっとだけ短くなった