PHP: Formatowanie numeru konta bankowego

2012-06-28 PHP

Załóżmy, że posiadamy 26 cyfrowy numer polskiego konta bankowego. Jego prezentacja w formie znak po znaku jest dobra do przechowywania jednak przy prezentacji warto sformatować numer separując odpowiednie człony numeru dla lepszego odczytu. Umożliwia to poniższy kod.

Posiadamy numer konta zapisany jako:

11222233334444555566667777

Aby w efekcie końcowym otrzymać:

11 2222 3333 4444 5555 6666 7777

musimy umieścić spację po: 2, 6, 10, 14, 18 i 22 znaku.

Użyjemy do tego celu funkcji substr($string, $start, $length);, której zadaniem jest zwrócić fragment łańcucha znaków. Parametry funkcji to:

  • $string – łańcuch znaków z którego wyciągamy interesujący nas fragment,
  • $start – znak początkowy od którego rozpoczynamy wycinanie,
  • $length – ilość znaków, które chcemy otrzymać.

Warto zauważyć prostą zależność – pierwszy fragment składa się z dwóch cyfr a każdy kolejny z czterech. Parametry do funkcji można ciekawie przekazać poprzez tablicę gdzie pary "$start / $length" będą odpowiednio kluczami i wartościami tablicy. Zdefiniujmy zatem tablice:

$parts = array(0 => 2, 2 => 4, 6 => 4, 10 => 4, 14 => 4, 18 => 4, 22 => 4);

Aby przejść przez tablicę użyjemy pętli foreach(); w następujący sposób:

foreach ($parts as $key => $val)
{
  $newNumber .= substr($accountNumber, $key, $val).' ';
}

W ten sposób nasz numer konta jest dzielony na tyle części ile elementów jest w tablicy $parts czyli 7. Na uwagę zwraca sposób generowania nowego numeru. Do zmiennej $newNumber poprzez konkatenację doklejany jest każdy z 7 fragmentów ze spacją na końcu. W ostatnim kroku pętla doda spację za ostatnim znakiem numeru konta. Pozbędziemy się jej używając funkcji trim();.

Całość funkcji wygląda nastepująco:

function formatAccountNumber($accountNumber)
{
  //po ktorym znaku i ile znakow odseparowac dzieki uzyciu spacji
  $parts = array(0 => 2, 2 => 4, 6 => 4, 10 => 4, 14 => 4, 18 => 4, 22 => 4);
  foreach ($parts as $key => $val)
  {
    $newNumber .= substr($accountNumber, $key, $val).' ';
  }
  return trim($newNumber);
}

W efekcie otrzymujemy zapis numeru konta w bardziej przyjaznej formie. Cała porada będzie miała sens jeśli zagwarantujemy, że do funkcji przekazujemy dokładnie 26 cyfr.

Do NOT follow this link or you will be banned from the site!