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
78
79
80
81
82
83
84open ValidationUtils
let splitExpiryDates = val => {
let split = val->String.split("/")
let value = split->Array.map(item => item->String.trim)
let month = value->Array.get(0)->Option.getOr("")
let year = value->Array.get(1)->Option.getOr("")
(month, year)
}
let getCurrentMonthAndYear = (dateTimeIsoString: string) => {
let tempTimeDateString = dateTimeIsoString->String.replace("Z", "")
let tempTimeDate = tempTimeDateString->String.split("T")
let date = tempTimeDate->Array.get(0)->Option.getOr("")
let dateComponents = date->String.split("-")
let currentMonth = dateComponents->Array.get(1)->Option.getOr("")
let currentYear = dateComponents->Array.get(0)->Option.getOr("")
(currentMonth->toInt, currentYear->toInt)
}
//CC -> Validation
//web -> CardUtils
let getExpiryDates = val => {
let date = Date.make()->Date.toISOString
let (month, year) = splitExpiryDates(val)
let (_, currentYear) = getCurrentMonthAndYear(date)
let prefix = currentYear->Int.toString->String.slice(~start=0, ~end=2)
(month, `${prefix}${year}`)
}
let getCurrentMonthAndYear = (dateTimeIsoString: string) => {
let tempTimeDateString = dateTimeIsoString->String.replace("Z", "")
let tempTimeDate = tempTimeDateString->String.split("T")
let date = tempTimeDate->Array.get(0)->Option.getOr("")
let dateComponents = date->String.split("-")
let currentMonth = dateComponents->Array.get(1)->Option.getOr("")
let currentYear = dateComponents->Array.get(0)->Option.getOr("")
(currentMonth->toInt, currentYear->toInt)
}
let getExpiryValidity = cardExpiry => {
let date = Date.make()->Date.toISOString
let (month, year) = getExpiryDates(cardExpiry)
let (currentMonth, currentYear) = getCurrentMonthAndYear(date)
let valid = if currentYear == year->toInt && month->toInt >= currentMonth && month->toInt <= 12 {
true
} else if (
year->toInt > currentYear && year->toInt < 2075 && month->toInt >= 1 && month->toInt <= 12
) {
true
} else {
false
}
valid
}
// //web -> CardUtils (web only)
// let splitExpiryDates = val => {
// let split = val->String.split("/")
// let value = split->Array.map(item => item->String.trim)
// let month = value->Array.get(0)->Option.getOr("")
// let year = value->Array.get(1)->Option.getOr("")
// (month, year)
// }
// let isExpiryComplete = val => {
// let (month, year) = splitExpiryDates(val)
// month->String.length == 2 && year->String.length == 2
// }
// let isExipryValid = val => {
// val->String.length > 0 && getExpiryValidity(val) && isExpiryComplete(val)
// }
// //CC -> Validation (checkCardExpiry)(cc only)
// let checkCardExpiry = expiry => {
// expiry->String.length > 0 && getExpiryValidity(expiry)
// }
let isValidCardExpiry = expiry => {
expiry->String.length > 0 && getExpiryValidity(expiry)
}