Skip to content

Commit 2254299

Browse files
author
Dmitry Ovsyanko
committed
+BankCard
1 parent e29a07d commit 2254299

File tree

4 files changed

+67
-7
lines changed

4 files changed

+67
-7
lines changed

__tests__/isBankCard.js

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,35 @@
1-
const {isBankCard} = require ('..')
1+
const {isBankCard, randomBankCard} = require ('..')
2+
3+
const PRE = '2200'
24

35
test ('basic', () => {
46

57
expect (isBankCard ('5062821234567892')).toBeUndefined ()
6-
expect (() => isBankCard ('5062821734567892')).toThrow ()
8+
expect (isBankCard ('5062 8212 3456 7892')).toBeUndefined ()
9+
expect (isBankCard (randomBankCard ())).toBeUndefined ()
710

11+
expect (() => isBankCard ('5062821734567892')).toThrow ()
12+
expect (() => isBankCard ('5062 821234567892')).toThrow ()
13+
expect (() => isBankCard ('5062_8212_3456_7892')).toThrow ()
14+
15+
})
16+
17+
test ('rnd', () => {
18+
19+
const v = randomBankCard ({pre: [PRE]})
20+
21+
expect (v).toHaveLength (16)
22+
expect (v.slice (0, 4)).toBe (PRE)
23+
expect (isBankCard (v)).toBeUndefined ()
24+
25+
})
26+
27+
test ('rnd', () => {
28+
29+
const v = randomBankCard ({pre: [PRE], format: true})
30+
31+
expect (v).toHaveLength (19)
32+
expect (v.slice (0, 4)).toBe (PRE)
33+
expect (isBankCard (v)).toBeUndefined ()
834

935
})

index.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const {OGRN_13, OGRN_15} = require ('./lib/Horner')
33
const {INN_10, INN_12_2, INN_12_1} = require ('./lib/INN')
44
const SNILS = require ('./lib/SNILS')
55
const BankAcct = require ('./lib/BankAcct')
6-
const Luhn = require ('./lib/Luhn')
6+
const BankCard = require ('./lib/BankCard')
77
const {OKPO_8, OKPO_10} = require ('./lib/OKPO')
88
class KPP extends Check {constructor () {super (9)}}
99

@@ -36,9 +36,10 @@ module.exports = {
3636
},
3737
randomINN12: () => new INN_12_2 ().appendCheckSum (new INN_12_1 ().random ()),
3838

39-
isBankAcct : (str, bic) => new BankAcct ().verify (str, bic),
40-
randomBankAcct: (bic, opt) => new BankAcct ().random (bic, opt),
39+
isBankAcct : (str, bic) => new BankAcct ().verify (str, bic),
40+
randomBankAcct : (bic, opt) => new BankAcct ().random (bic, opt),
4141

42-
isBankCard : str => new Luhn (16).verify (str)
42+
isBankCard : str => new BankCard ().verify (str),
43+
randomBankCard : opt => new BankCard ().random (opt),
4344

4445
}

lib/BankCard.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const Luhn = require ('./Luhn')
2+
const CH_SPACE = ' '.charCodeAt (0)
3+
4+
module.exports = class extends Luhn {
5+
6+
constructor () {
7+
8+
super (16)
9+
10+
}
11+
12+
verify (str) {
13+
14+
if (str.length !== 19) return super.verify (str)
15+
16+
for (const pos of [4, 9, 14])
17+
if (str.charCodeAt (pos) !== CH_SPACE)
18+
this.raise ('Wrong format', {code: 'format', pos})
19+
20+
super.verify (str.slice (0, 4) + str.slice (5, 9) + str.slice (10, 14) + str.slice (15))
21+
22+
}
23+
24+
random (options = {}) {
25+
26+
const result = super.random (options)
27+
28+
return !options.format ? result : result.slice (0, 4) + ' ' + result.slice (4, 8) + ' ' + result.slice (8, 12) + ' ' + result.slice (12)
29+
30+
}
31+
32+
}

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"ИНН",
3030
"КПП",
3131
"ОГРН",
32-
"СНИЛС"
32+
"СНИЛС",
33+
"ОКПО"
3334
],
3435
"author": "Dmitry Ovsyanko",
3536
"license": "MIT",

0 commit comments

Comments
 (0)