diff --git a/src/modules/finance/index.ts b/src/modules/finance/index.ts index 5d83963bc07..7085ea3654c 100644 --- a/src/modules/finance/index.ts +++ b/src/modules/finance/index.ts @@ -390,29 +390,25 @@ export class Finance { } /** - * Generates a random bic. + * Generates a random SWIFT/BIC code based on the [ISO-9362](https://en.wikipedia.org/wiki/ISO_9362) format. * * @example * faker.finance.bic() // 'WYAUPGX1432' */ bic(): string { - const vowels = ['A', 'E', 'I', 'O', 'U']; - const prob = this.faker.datatype.number(100); - - return [ - this.faker.helpers.replaceSymbols('???'), - this.faker.helpers.arrayElement(vowels), - this.faker.helpers.arrayElement(iban.iso3166), - this.faker.helpers.replaceSymbols('?'), - '1', - prob < 10 - ? this.faker.helpers.replaceSymbols( - `?${this.faker.helpers.arrayElement(vowels)}?` - ) - : prob < 40 - ? this.faker.helpers.replaceSymbols('###') - : '', - ].join(''); + const bankIdentifier = this.faker.random.alpha({ + count: 4, + casing: 'upper', + }); + const countryCode = this.faker.helpers.arrayElement(iban.iso3166); + const locationCode = this.faker.random.alphaNumeric(2, { casing: 'upper' }); + const branchCode = this.faker.datatype.boolean() + ? this.faker.datatype.boolean() + ? this.faker.random.alphaNumeric(3, { casing: 'upper' }) + : 'XXX' + : ''; + + return `${bankIdentifier}${countryCode}${locationCode}${branchCode}`; } /** diff --git a/test/__snapshots__/finance.spec.ts.snap b/test/__snapshots__/finance.spec.ts.snap index f45679f49bf..1e7486db53e 100644 --- a/test/__snapshots__/finance.spec.ts.snap +++ b/test/__snapshots__/finance.spec.ts.snap @@ -16,7 +16,7 @@ exports[`finance > 42 > amount > with min 1`] = `"380.79"`; exports[`finance > 42 > amount > with min and max and dec and symbol 1`] = `"$24.98160"`; -exports[`finance > 42 > bic 1`] = `"UYEOSCP1514"`; +exports[`finance > 42 > bic 1`] = `"JUYEPSSLXXX"`; exports[`finance > 42 > bitcoinAddress 1`] = `"3XbJMAAara64sSkA9HD24YHQWd1b"`; @@ -80,7 +80,7 @@ exports[`finance > 1211 > amount > with min 1`] = `"929.24"`; exports[`finance > 1211 > amount > with min and max and dec and symbol 1`] = `"$47.14081"`; -exports[`finance > 1211 > bic 1`] = `"LXUEBTZ1"`; +exports[`finance > 1211 > bic 1`] = `"YLXUDE4Z"`; exports[`finance > 1211 > bitcoinAddress 1`] = `"1TMe8Z3EaFdLqmaGKP1LEEJQVriSZRZdsA"`; @@ -144,7 +144,7 @@ exports[`finance > 1337 > amount > with min 1`] = `"269.40"`; exports[`finance > 1337 > amount > with min and max and dec and symbol 1`] = `"$20.48098"`; -exports[`finance > 1337 > bic 1`] = `"OEFELYL1032"`; +exports[`finance > 1337 > bic 1`] = `"GOEFFIJG"`; exports[`finance > 1337 > bitcoinAddress 1`] = `"3adhxs2jewAgkYgJi7No6Cn8JZa"`; diff --git a/test/finance.spec.ts b/test/finance.spec.ts index b1aed4ad712..afc671a7628 100644 --- a/test/finance.spec.ts +++ b/test/finance.spec.ts @@ -482,15 +482,10 @@ describe('finance', () => { describe('bic()', () => { it('should return a random yet formally correct BIC number', () => { const bic = faker.finance.bic(); - const expr = new RegExp( - `^[A-Z]{4}(${ibanLib.iso3166.join( - '|' - )})[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?\$`, - 'i' - ); expect(bic).toBeTypeOf('string'); - expect(bic).toMatch(expr); + expect(bic).toMatch(/^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$/); + expect(ibanLib.iso3166).toContain(bic.substring(4, 6)); }); });