Skip to content

Commit

Permalink
fix: Generate valid BIC/SWIFT numbers (#902)
Browse files Browse the repository at this point in the history
- swiftBicNumber now accepts an optional $countryCode argument to localize the generated value
- using Symfony Validator in tests
  • Loading branch information
vjandrea committed Dec 9, 2024
1 parent bbc79fe commit f1e26fa
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 5 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

- Removed domain `gmail.com.au` from `Provider\en_AU\Internet` (#886)
- Refreshed ISO currencies (#919)
-
- Generate valid BIC/SWIFT numnbers (#902)

## [2024-11-09, v1.24.0](https://github.com/FakerPHP/Faker/compare/v1.23.1..v1.24.0)

- Fix internal deprecations in Doctrine's populator by @gnutix in (#889)
Expand Down
2 changes: 1 addition & 1 deletion src/Faker/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@
*
* @property string $swiftBicNumber
*
* @method string swiftBicNumber()
* @method string swiftBicNumber($countryCode = null)
*
* @property string $name
*
Expand Down
12 changes: 9 additions & 3 deletions src/Faker/Provider/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -297,16 +297,22 @@ public static function iban($countryCode = null, $prefix = '', $length = null)
}

/**
* Return the String of a SWIFT/BIC number
* Return the String of a SWIFT/BIC number.
*
* @example 'RZTIAT22263'
*
* @see http://en.wikipedia.org/wiki/ISO_9362
*
* @param null|string $countryCode ISO 3166-1 alpha-2 country code
*
* @return string Swift/Bic number
*/
public static function swiftBicNumber()
public static function swiftBicNumber($countryCode = null)
{
return self::regexify('^([A-Z]){4}([A-Z]){2}([0-9A-Z]){2}([0-9A-Z]{3})?$');
if (!is_null($countryCode) && 1 !== preg_match('/^[A-Z]{2}$/', $countryCode)) {
throw new \InvalidArgumentException('Invalid country code.');
}

return self::regexify('^([A-Z]){4}' . ($countryCode ?? Miscellaneous::countryCode()) . '([0-9A-Z]){2}([0-9A-Z]{3})?$');
}
}
18 changes: 18 additions & 0 deletions test/Faker/Provider/PaymentTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
use Faker\Provider\Payment as PaymentProvider;
use Faker\Provider\Person as PersonProvider;
use Faker\Test\TestCase;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validation;

/**
* @group legacy
Expand Down Expand Up @@ -197,4 +199,20 @@ protected function getProviders(): iterable

yield new PaymentProvider($this->faker);
}

public function testSwiftBicNumber(): void
{
self::assertMatchesRegularExpression(
'/^([A-Z]){4}([A-Z]){2}([0-9A-Z]){2}([0-9A-Z]{3})?$/',
$this->faker->swiftBicNumber()
);
}

public function testLocalizedSwiftBicNumber(): void
{
self::assertMatchesRegularExpression(
'/^([A-Z]){4}DE([0-9A-Z]){2}([0-9A-Z]{3})?$/',
$this->faker->swiftBicNumber('DE')
);
}
}

0 comments on commit f1e26fa

Please sign in to comment.