端くれプログラマの備忘録 C# [C#] 6桁の数字のチェックデジットを計算する

[C#] 6桁の数字のチェックデジットを計算する

LuhnアルゴリズムをC#で実装する方法を紹介します。このコードは、指定された数字列のチェックデジットを計算し、その数字列が有効かどうかを検証するものです。

LuhnアルゴリズムのC#実装

using System;

public class LuhnAlgorithm
{
    // チェックデジットの計算
    public static int CalculateCheckDigit(string number)
    {
        int sum = 0;
        bool alternate = true;

        // 右から左に向かって数字を処理
        for (int i = number.Length - 1; i >= 0; i--)
        {
            int n = int.Parse(number[i].ToString());

            if (alternate)
            {
                n *= 2;
                if (n > 9) // 2桁の場合、桁を足す
                {
                    n = n - 9;
                }
            }
            sum += n;
            alternate = !alternate; // 奇数・偶数の切り替え
        }

        // 次の10の倍数との差を計算(チェックデジット)
        return (10 - (sum % 10)) % 10;
    }

    // 数字列がLuhnアルゴリズムに従って有効かをチェック
    public static bool ValidateLuhn(string number)
    {
        int sum = 0;
        bool alternate = false;

        for (int i = number.Length - 1; i >= 0; i--)
        {
            int n = int.Parse(number[i].ToString());

            if (alternate)
            {
                n *= 2;
                if (n > 9)
                {
                    n = n - 9;
                }
            }
            sum += n;
            alternate = !alternate;
        }

        // 合計が10で割り切れる場合、有効
        return (sum % 10 == 0);
    }

    public static void Main(string[] args)
    {
        // テスト用の6桁の数字
        string number = "123456";

        // チェックデジットの計算
        int checkDigit = CalculateCheckDigit(number);
        Console.WriteLine($"元の番号: {number}, 計算されたチェックデジット: {checkDigit}");

        // 完全な番号を生成して検証
        string completeNumber = number + checkDigit;
        bool isValid = ValidateLuhn(completeNumber);
        Console.WriteLine($"完全な番号: {completeNumber}, 有効性: {isValid}");
    }
}

説明

  1. CalculateCheckDigit メソッド:
    • 6桁の数字を受け取り、Luhnアルゴリズムを適用してチェックデジットを計算します。
    • alternate 変数を使って、右から奇数桁に2倍するかどうかを判断します。
    • 2倍した結果が10以上なら、その桁を足し直します。
  2. ValidateLuhn メソッド:
    • 文字列の番号がLuhnアルゴリズムに基づいて有効かどうかを検証します。
    • チェックデジットも含めた完全な番号を受け取り、その番号が有効かを判断します。
  3. Main メソッド:
    • 123456 という数字に対して、チェックデジットを計算し、その完全な番号の有効性を検証するテストケースです。

これで、Luhnアルゴリズムを使ったチェックデジットの計算と検証が行えます。