.NET 2.x Перевести код на PHP в код C#
Формулировка задачи:
Добрый день.
имеется код на PHP, как реализовать точно такой же алгоритм на С#?
<?php
function valid_rnn($rnn)
{
for ($i = 1; $i <= 10; $i++)
{
$s = 0;
$t = $i - 1;
for ($j = 1; $j <= 11; $j++)
{
++$t;
if ($t == 11)
$t = 1;
$s = $s + $t * substr($rnn,$j - 1,1);
}
$k = $s % 11;
if ($k < 10)
break;
}
return ($k == substr($rnn,11,1));
}Описание:
РНН представляет собой 12-тиразрядное число. Первый фасет (2 разряда) - код области. Для кодирования используются 3, 4 разряды кода классификатора "Система обозначения административнотерриториальных органов" (СОАТО). Второй фасет (2 разряда) - код района. Перечень и номера налоговых комитетов соответствуют кодам районов области, принятые в системе Министерства финансов Республики Казахстан. Третий фасет (1 разряд) - имеет значение: 0 - для юридических лиц, с 1 до 9 - для физических лиц. Четвертый фасет (6 разрядов) - порядковый номер налогоплательщика, присваиваемый налоговым органом. Пятый фасет (1 разряд) - контрольный разрядСам алгоритм:
Каждому разряду РНН (счет слева направо), исключая последний 12-ый разряд, присваивается вес от 1 до 10. 11-ый разряд имеет вес равный 1. Определяется сумма произведений значений каждого разряда на его вес (S = r1*1 + r2*2 + ... + r10*10 + r11*1). Полученная сумма делится на 11 и выделяется целая часть C (т.е. максимальное целое число, на которое S делится без остатка). Определяется разница между суммой произведений и целочисленным вхождением по модулю 11 в эту сумму ( i = S - C*11). Если полученная разница меньше 10, то она является значением контрольного разряда. Если после первого прохода контрольное число получается больше или равное 10, расчет повторяется, но каждому разряду вес присваивается, начиная с 2. Для третьего прохода соответственно с 3 и т.д. Если результат при 10 циклах повторения расчета всегда имеет значение большее или равное 10, то данное число для регистрационного номера налогоплательщика исключается.Решение задачи: «.NET 2.x Перевести код на PHP в код C#»
textual
Листинг программы
static bool valid_rnn(long rnn)
{
long k = 0;
for (int i = 1; i <= 10; i++)
{
int s = 0;
int t = i - 1;
for (int j = 1; j <= 11; j++)
{
++t;
if (t == 11)
t = 1;
int e = Convert.ToInt32(rnn.ToString().Substring(j - 1,1));
s = s + t * e;
}
k = s % 11;
if (k < 10)
break;
}
return (k == Convert.ToInt64(rnn.ToString().Substring(1,11)));
}