Issues (73)

src/Rules/ValidIban.php (2 issues)

Severity
1
<?php
2
3
namespace Milwad\LaravelValidate\Rules;
4
5
use Illuminate\Contracts\Validation\Rule;
6
use Milwad\LaravelValidate\Traits\IbanTrait;
7
use Milwad\LaravelValidate\Utils\Country;
8
9
class ValidIban implements Rule
10
{
11
    use IbanTrait;
12
13
    /**
14
     * Character map
15
     *
16
     * @var array|int[]
17
     */
18
    protected array $characterMap = [
19
        'A' => 10,
20
        'B' => 11,
21
        'C' => 12,
22
        'D' => 13,
23
        'E' => 14,
24
        'F' => 15,
25
        'G' => 16,
26
        'H' => 17,
27
        'I' => 18,
28
        'J' => 19,
29
        'K' => 20,
30
        'L' => 21,
31
        'M' => 22,
32
        'N' => 23,
33
        'O' => 24,
34
        'P' => 25,
35
        'Q' => 26,
36
        'R' => 27,
37
        'S' => 28,
38
        'T' => 29,
39
        'U' => 30,
40
        'V' => 31,
41
        'W' => 32,
42
        'X' => 33,
43
        'Y' => 34,
44
        'Z' => 35,
45
    ];
46
47
    /**
48
     * Get country code with length.
49
     *
50
     * @var array|int[]
51
     */
52
    private array $ibanLengthByCountry = [
0 ignored issues
show
The private property $ibanLengthByCountry is not used, and could be removed.
Loading history...
53
        Country::ALBANIA => 28,
54
        Country::ALGERIA => 26,
55
        Country::ANDORRA => 24,
56
        Country::ANGOLA => 25,
57
        Country::AUSTRIA => 20,
58
        Country::AZERBAIJAN => 28,
59
        Country::BAHRAIN => 22,
60
        Country::BELARUS => 28,
61
        Country::BELGIUM => 16,
62
        Country::BENIN => 28,
63
        Country::BOSNIA_HERZEGOVINA => 20,
64
        Country::BRAZIL => 29,
65
        Country::BULGARIA => 22,
66
        Country::BURKINA_FASO => 28,
67
        Country::BURUNDI => 28,
68
        Country::CAMEROON => 27,
69
        Country::CAPE_VERDE => 25,
70
        Country::CENTRAL_AFRICAN_REPUBLIC => 27,
71
        Country::CHAD => 27,
72
        Country::COMOROS => 27,
73
        Country::CONGO => 27,
74
        Country::COSTA_RICA => 22,
75
        Country::CROATIA => 21,
76
        Country::CYPRUS => 28,
77
        Country::CZECH_REPUBLIC => 24,
78
        Country::DENMARK => 18,
79
        Country::DJIBOUTI => 27,
80
        Country::DOMINICAN_REPUBLIC => 28,
81
        Country::EGYPT => 29,
82
        Country::EL_SALVADOR => 28,
83
        Country::EQUATORIAL_GUINEA => 27,
84
        Country::ESTONIA => 20,
85
        Country::FAROE_ISLANDS => 18,
86
        Country::FINLAND => 18,
87
        Country::FRANCE => 27,
88
        Country::GABON => 27,
89
        Country::GEORGIA => 22,
90
        Country::GERMANY => 22,
91
        Country::GIBRALTAR => 23,
92
        Country::GREECE => 27,
93
        Country::GREENLAND => 18,
94
        Country::GUATEMALA => 28,
95
        Country::GUINEA_BISSAU => 25,
96
        Country::HOLY_SEE => 22,
97
        Country::HONDURAS => 28,
98
        Country::HUNGARY => 28,
99
        Country::ICELAND => 26,
100
        Country::IRAN => 26,
101
        Country::IRAQ => 23,
102
        Country::IRELAND => 22,
103
        Country::ISRAEL => 23,
104
        Country::ITALY => 27,
105
        Country::IVORY_COAST => 28,
106
        Country::JORDAN => 30,
107
        Country::KAZAKHSTAN => 20,
108
        Country::KOSOVO => 20,
109
        Country::KUWAIT => 30,
110
        Country::LATVIA => 21,
111
        Country::LEBANON => 28,
112
        Country::LIBYA => 25,
113
        Country::LIECHTENSTEIN => 21,
114
        Country::LITHUANIA => 20,
115
        Country::LUXEMBOURG => 20,
116
        Country::MADAGASCAR => 27,
117
        Country::MALI => 28,
118
        Country::MALTA => 31,
119
        Country::MAURITANIA => 27,
120
        Country::MAURITIUS => 30,
121
        Country::MOLDOVA => 24,
122
        Country::MONACO => 27,
123
        Country::MONGOLIA => 20,
124
        Country::MONTENEGRO => 22,
125
        Country::MOROCCO => 28,
126
        Country::MOZAMBIQUE => 25,
127
        Country::NETHERLANDS => 18,
128
        Country::NICARAGUA => 32,
129
        Country::NIGER => 28,
130
        Country::NORTH_MACEDONIA => 19,
131
        Country::NORWAY => 15,
132
        Country::PAKISTAN => 24,
133
        Country::PALESTINE => 29,
134
        Country::POLAND => 28,
135
        Country::PORTUGAL => 25,
136
        Country::QATAR => 29,
137
        Country::ROMANIA => 24,
138
        Country::RUSSIA => 33,
139
        Country::SAINT_LUCIA => 32,
140
        Country::SAN_MARINO => 27,
141
        Country::SAO_TOME_PRINCIPE => 25,
142
        Country::SAUDI_ARABIA => 24,
143
        Country::SENEGAL => 28,
144
        Country::SERBIA => 22,
145
        Country::SEYCHELLES => 31,
146
        Country::SLOVAKIA => 24,
147
        Country::SLOVENIA => 19,
148
        Country::SOMALIA => 23,
149
        Country::SPAIN => 24,
150
        Country::SUDAN => 18,
151
        Country::SWEDEN => 24,
152
        Country::SWITZERLAND => 21,
153
        Country::TIMOR_LESTE => 23,
154
        Country::TOGO => 28,
155
        Country::TUNISIA => 24,
156
        Country::TURKEY => 26,
157
        Country::UKRAINE => 29,
158
        Country::UNITED_ARAB_EMIRATES => 23,
159
        Country::UNITED_KINGDOM => 22,
160
        Country::VIRGIN_ISLANDS_BRITISH => 24,
161
    ];
162
163
    /**
164
     * Set multiple country codes to validate IBAN (Optional).
165
     */
166
    private ?array $countries;
0 ignored issues
show
The private property $countries is not used, and could be removed.
Loading history...
167
168
    public function __construct(array|string $countries = [])
169
    {
170
        $this->setCountries(func_get_args());
171
    }
172
173
    /**
174
     * Check IBAN is valid.
175
     *
176
     * @see https://en.wikipedia.org/wiki/International_Bank_Account_Number
177
     */
178
    public function passes($attribute, $value): bool
179
    {
180
        return $this->isIbanValid($value);
181
    }
182
183
    /**
184
     * Get the validation error message.
185
     */
186
    public function message(): string
187
    {
188
        return __('validate.iban');
189
    }
190
}
191