Skip to content

Commit b35fd89

Browse files
committed
Merge pull request #7 from RSully/feature-maskednumber
Add `CreditCard::getNumberMasked()` and tests
2 parents f7d50ce + 7045794 commit b35fd89

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/Omnipay/Common/CreditCard.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,19 @@ public function getNumberLastFour()
197197
return substr($this->getNumber(), -4, 4) ?: null;
198198
}
199199

200+
/**
201+
* Returns a masked credit card number with only the last 4 chars visible
202+
*
203+
* @param string $mask Character to use in place of numbers
204+
* @return string
205+
*/
206+
public function getNumberMasked($mask = 'X')
207+
{
208+
$maskLength = strlen($this->getNumber()) - 4;
209+
210+
return str_repeat($mask, $maskLength) . $this->getNumberLastFour();
211+
}
212+
200213
/**
201214
* Credit Card Brand
202215
*

tests/Omnipay/Common/CreditCardTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,20 @@ public function testGetNumberLastFourNonDigits()
179179
$this->assertSame('1234', $this->card->getNumberLastFour());
180180
}
181181

182+
public function testGetNumberMasked()
183+
{
184+
$this->card->setNumber('4000000000001234');
185+
186+
$this->assertSame('XXXXXXXXXXXX1234', $this->card->getNumberMasked());
187+
}
188+
189+
public function testGetNumberMaskedNonDigits()
190+
{
191+
$this->card->setNumber('4000 0000 0000 12x34');
192+
193+
$this->assertSame('XXXXXXXXXXXX1234', $this->card->getNumberMasked());
194+
}
195+
182196
public function testGetBrandDefault()
183197
{
184198
$card = new CreditCard;

0 commit comments

Comments
 (0)