Skip to content

Commit 9594d0a

Browse files
Generate a valid BE TAX number (#415)
* Generate valid BE VAT number * Add comments Co-authored-by: Rob Van Keilegom <[email protected]>
1 parent 1123bcd commit 9594d0a

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/Faker/Provider/nl_BE/Payment.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
class Payment extends \Faker\Provider\Payment
66
{
77
/**
8-
* International Bank Account Number (IBAN)
8+
* International Bank Account Number (IBAN).
99
*
1010
* @see http://en.wikipedia.org/wiki/International_Bank_Account_Number
1111
*
@@ -21,7 +21,7 @@ public static function bankAccountNumber($prefix = '', $countryCode = 'BE', $len
2121
}
2222

2323
/**
24-
* Value Added Tax (VAT)
24+
* Value Added Tax (VAT).
2525
*
2626
* @example 'BE0123456789', ('spaced') 'BE 0123456789'
2727
*
@@ -37,6 +37,13 @@ public static function vat($spacedNationalPrefix = true)
3737
{
3838
$prefix = $spacedNationalPrefix ? 'BE ' : 'BE';
3939

40-
return sprintf('%s0%d', $prefix, self::randomNumber(9, true));
40+
// Generate 7 numbers of vat.
41+
$firstSeven = self::randomNumber(7, true);
42+
43+
// Generate checksum for number
44+
$checksum = 97 - fmod($firstSeven, 97);
45+
46+
// '0' + 7 numbers + checksum
47+
return sprintf('%s0%s%s', $prefix, $firstSeven, $checksum);
4148
}
4249
}

test/Faker/Provider/nl_BE/PaymentTest.php

+19
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,25 @@ public function testVatIsValid()
1616
$unspacedVat = $this->faker->vat(false);
1717
self::assertMatchesRegularExpression('/^(BE 0\d{9})$/', $vat);
1818
self::assertMatchesRegularExpression('/^(BE0\d{9})$/', $unspacedVat);
19+
20+
$this->validateChecksum($vat);
21+
$this->validateChecksum($unspacedVat);
22+
}
23+
24+
private function validateChecksum($vat)
25+
{
26+
// Remove the "BE " part from the beginning
27+
$numbers = trim(substr($vat, 2));
28+
29+
$len = strlen($numbers);
30+
31+
self::assertEquals(10, $len);
32+
self::assertStringStartsWith('0', $numbers);
33+
34+
// Mod97 check on first 8 digits
35+
$checksum = 97 - fmod(substr($numbers, 0, 8), 97);
36+
37+
self::assertEquals((string) $checksum, substr($numbers, 8, 10));
1938
}
2039

2140
protected function getProviders(): iterable

0 commit comments

Comments
 (0)