NewGaoKaoApi/New_College.Common/Helper/GenerateCardNumberHelper.cs

54 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace New_College.Common
{
public static class GenerateCardNumberHelper
{
public static string GenerateCardNumber(string bin, int length)
{
Random r = new Random() { };
int[] digits = new int[length];
var prefixDigits = bin.Select(p => p - '0').ToArray();
for (var i = 0; i < prefixDigits.Length; i++)
{
digits[i] = prefixDigits[i];
}
for (var i = bin.Length; i < length - 1; i++)
{
var digit = r.Next(0, 10);
digits[i] = digit;
}
digits[length - 1] = GenerateCheckDigit(digits[..(length - 1)]);
return string.Join(null, digits);
}
public static bool IsLuhnValid(int[] digits)
{
var sum = CalculateSum(digits, 1);
return sum % 10 == 0;
}
private static int CalculateSum(int[] digits, int bitShift = 0)
{
var sum = digits.Reverse()
.Select((digit, i) =>
(i + bitShift) % 2 == 0
? digit * 2 > 9 ? digit * 2 - 9 : digit * 2
: digit)
.Sum();
return sum;
}
public static int GenerateCheckDigit(int[] digits)
{
var sum = CalculateSum(digits);
var lastDigit = sum * 9 % 10;
return lastDigit;
}
}
}