Napisałem w C#. Zdaję sobie sprawę, że przy tak dużych łańcuchach powinno się użyć StringBuildera, ale na tym etapie nauki jeszcze nie potrafię konwersji. :)
static int LuhnCheck(string nr)
{
int weight = 1;
string score = "";
int ratio;
for (int i = nr.Length - 1; i >= 0; i--)
{
if (weight == 1)
{
score += int.Parse(nr[i].ToString());
weight = 2;
}
else
{
ratio = int.Parse((nr[i]).ToString()) * 2;
if (ratio > 9)
{
ratio = (ratio / 10) + ratio % 10;
}
score += ratio;
weight = 1;
}
}
int checksum = 0;
for (int i = 0; i < score.Length; i++)
{
checksum += int.Parse(score[i].ToString());
}
return checksum;
}
static string Search_six(string nr)
{
int guess = 0;
string check = "";
string result = "";
for (int i = 0; i <= 999999; i++)
{
string guesser = guess.ToString();
guesser = i.ToString().PadLeft(6, Char.Parse("0"));
check = nr.Substring(0, 6) + guesser + nr[12..];
long checkLong = (long)Int64.Parse(check);
if (checkLong % 123457 == 0 && LuhnCheck(check) % 10 == 0)
{
result += checkLong + "\n";
}
}
return result;
}
static void Main()
{
string card= "543210******1234";
string card_test = "7155032979402154";
Console.WriteLine(LuhnCheck(card_test));
Console.WriteLine(Search_six(card));
Console.ReadKey();
}