Dzielenie 30 cyfrowej liczby z modulo ...

0

Dostałem właśnie z banku wytyczne co do generowania ich numerów kont i wygląda to tak:

d93b65cdf9.png

Więc idąc ich tokiem zrobiłem funkcję generującą:

function GenBankAccount() {

$x = '0123456789'; // zakres znaków generowanego ciągu
$A=11401124; //NRB
$S = ''; // numer klienta generowany losowo poniżej

for ($i = 0; $i <= 15; $i++) {
  
  if ($i==0) $S = $x[mt_rand(1, strlen($x)-1)];
  else $S .= $x[mt_rand(0, strlen($x)-1)];
  
}

$t1=$A.$S.'252100'; //30 cyfrowy kod punkty 1,2,3

$NN=$t1 % 97;// reszta z dzielenia punkty 4

$CC=98-$NN; // liczba kontrolna punkt 5

if (strlen($CC)==1) $CC='0'.$CC;

return $CC.$A.$S;

}

Niestety otrzymuję cały czas nieprawidłowy numer i widzę błąd w punkcie 4. Prawdopodobnie kwestia typowania zmiennych.
getttype($t1) zwraca string a jednak do dzielenia potrzeba liczby. Settype($t1) nie daje rady.

Jak mogę to rozwiązać?

Jakieś pomysły?

1

Wykorzystaj gmp.

0

Super, nie znałem tego wcześniej.

Tak na zakończenie gdyby ktoś potrzebował to działający kod:

function GenBankAccount() {
 
$x = '0123456789'; // zakres znaków generowanego ciągu
$A=11401124; //NRB
$S = ''; // numer klienta generowany losowo poniżej
 
for ($i = 0; $i <= 15; $i++) {
 
  if ($i==0) $S = $x[mt_rand(1, strlen($x)-1)];
  else $S .= $x[mt_rand(0, strlen($x)-1)];
 
}
 
$t1=$A.$S.'252100'; //30 cyfrowy kod punkty 1,2,3
 
$NN=gmp_mod($t1, "97");// reszta z dzielenia punkty 4
 
$CC=gmp_sub("98",$NN); // liczba kontrolna punkt 5
 
if (gmp_intval($CC)<9) $CC='0'.gmp_strval($CC); else $CC=gmp_strval($CC);
 
return $CC.$A.$S;
 
}
0
if ($i==0) $S = $x[mt_rand(1, strlen($x)-1)];

Po co to?

1 użytkowników online, w tym zalogowanych: 0, gości: 1