-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
77 lines (69 loc) · 1.67 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
* CreditCard-Checker.js
*
* @version 1.0.0
* @author M.Katsube <[email protected]>
* @license MIT (see LICENSE)
*/
'use strict';
//---------------------------------------------
// modules
//---------------------------------------------
const checksum = require('./src/checksum')
const cardType = require('./src/cardtype')
const cardSpec = require('./src/cardspec')
//---------------------------------------------
// Global variables
//---------------------------------------------
const ERROR = {
code: null,
message: ''
}
//---------------------------------------------
// functions
//---------------------------------------------
/**
* Check that the format of the card number is correct.
*
* @param {string} number - Card number '4111111111111111'
* @return {boolean}
*/
function check(number) {
const brand = cardType.brand(number)
if( brand === cardType.TYPE.UNKNOWN ){
ERROR.code = 'ER110001'
ERROR.message = 'Unknown card type'
return(false)
}
if( ! checksum.verify(number) ){
ERROR.code = 'ER110002'
ERROR.message = 'Invalid checksum'
return(false)
}
const checklen = cardSpec.getLength(brand)
.some(len => len === number.length)
if( ! checklen ){
ERROR.code = 'ER110003'
ERROR.message = `Invalid length`
return(false)
}
return(true)
}
/**
* return last errr
*
* @returns {object}
*/
function getError(){
return( ERROR )
}
//---------------------------------------------
// exports
//---------------------------------------------
module.exports = {
check,
verify: number => checksum.verify(number),
cardtype: number => cardType.brand(number),
getError,
type: cardType.TYPE
}