C#でマイナンバーのチェックデジットを計算する
こんなのを見かけたので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やめたらちょっとだけ短くなった