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