Line data Source code
1 : import 'dart:math';
2 :
3 : import 'package:iban_utilities_lib/bank.dart';
4 : import 'package:iban_utilities_lib/enums_countries.dart';
5 :
6 : class Utils {
7 6 : static final Random _random = Random.secure();
8 :
9 : /// Verilen iki rakam arasında random sayı döndürür.
10 1 : static int generateCheckDigits(int min, int max) {
11 4 : return min + _random.nextInt(max - min);
12 : }
13 :
14 : /// A-Z arasındaki büyük harflerden istenilen uzunlukta random bir metin döndürür.
15 1 : static String generateRandomUpperCaseAlpha(int length) {
16 : const availableChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
17 1 : final randomString = List.generate(length,
18 5 : (index) => availableChars[_random.nextInt(availableChars.length)])
19 1 : .join();
20 :
21 : return randomString;
22 : }
23 :
24 : /// 0-9 arasındaki rakamlardan istenilen uzunlukta random bir metin döndürür.
25 1 : static String generateRandomNumeric(int length) {
26 : const availableChars = '1234567890';
27 1 : final randomString = List.generate(length,
28 5 : (index) => availableChars[_random.nextInt(availableChars.length)])
29 1 : .join();
30 :
31 : return randomString;
32 : }
33 : /// Private _getIbanChecksum metodu için TestHelper metodu.
34 1 : static String getIbanChecksumTestHelper(String str){
35 1 : return _getIbanChecksum(str);
36 : }
37 :
38 : /// Verilen bilgilere göre Iban Kontrol Numarasını geri döndürür.
39 2 : static String _getIbanChecksum(String str) {
40 2 : List<String> strArr = [
41 : "A",
42 : "B",
43 : "C",
44 : "D",
45 : "E",
46 : "F",
47 : "G",
48 : "H",
49 : "I",
50 : "J",
51 : "K",
52 : "L",
53 : "M",
54 : "N",
55 : "O",
56 : "P",
57 : "Q",
58 : "R",
59 : "S",
60 : "T",
61 : "U",
62 : "V",
63 : "W",
64 : "X",
65 : "Y",
66 : "Z"
67 : ];
68 2 : List<String> intArr = [
69 : "10",
70 : "11",
71 : "12",
72 : "13",
73 : "14",
74 : "15",
75 : "16",
76 : "17",
77 : "18",
78 : "19",
79 : "20",
80 : "21",
81 : "22",
82 : "23",
83 : "24",
84 : "25",
85 : "26",
86 : "27",
87 : "28",
88 : "29",
89 : "30",
90 : "31",
91 : "32",
92 : "33",
93 : "34",
94 : "35"
95 : ];
96 :
97 6 : var iban = str.substring(4) + str.substring(0, 4);
98 :
99 6 : for (int i = 0; i < strArr.length; i++) {
100 6 : iban = iban.replaceAll(strArr[i], intArr[i]);
101 : }
102 :
103 2 : var ibanInt = BigInt.parse(iban);
104 6 : var remainder = ibanInt.remainder(BigInt.from(97)).toInt();
105 : var temp = "";
106 8 : ((98 - remainder).toString().length == 1)
107 1 : ? temp = "0${98 - remainder}"
108 5 : : temp = (98 - remainder).toString();
109 : return temp;
110 : }
111 :
112 : /// Ülkeye göre banka listesinden, banka kodu döndürür.
113 1 : static String generateBankCode(Country country) {
114 : switch (country) {
115 1 : case Country.turkish:
116 : {
117 1 : List<Bank> bankListTR = getBankObjectList(country);
118 :
119 1 : final Random random = Random.secure();
120 3 : var bank = bankListTR[random.nextInt(bankListTR.length)];
121 :
122 1 : return bank.bankCode;
123 : }
124 :
125 : default:
126 : {
127 : return "00061";
128 : }
129 : }
130 : }
131 :
132 : /// Ülkeye ve banka koduna göre bir Bank nesnesi döndürür.
133 1 : static Bank getBankObject(Country country, String activeBankCode) {
134 6 : List<Bank> bankObjectList = getBankObjectList(country).where((element) => element.bankCode == activeBankCode).toList();
135 : Bank bankObj;
136 1 : if (bankObjectList.isNotEmpty) {
137 1 : bankObj = bankObjectList[0];
138 : }else{
139 1 : bankObj = Bank("","","");
140 : }
141 :
142 : return bankObj;
143 : }
144 :
145 : /// Ülkeye göre Banka Kodu, Banka İsmi ve Banka Resim ismini List<Bank> döndürür. Yoksa boş Array döndürür.
146 2 : static List<Bank> getBankObjectList(Country country) {
147 : switch (country) {
148 2 : case Country.turkish:
149 : {
150 2 : List<Bank> bankListTR = [
151 2 : Bank("00209", "Ziraat Katılım Bankası", "ziraat-katilim-bankasi"),
152 2 : Bank("00206", "Türkiye Finans", "turkiye-finans"),
153 2 : Bank("00205", "Kuveyt Türk", "kuveyt-turk"),
154 2 : Bank("00203", "Albaraka Türk", "albaraka-turk"),
155 2 : Bank("00146", "Odea Bank", "odea-bank"),
156 2 : Bank("00143", "Aktif Bank", "aktif-yatirim-bankasi"),
157 2 : Bank("00142", "BankPozitif", "bankpozitif"),
158 2 : Bank("00135", "Anadolu Bank", "anadolu-bank"),
159 2 : Bank("00134", "Denizbank", "denizbank"),
160 2 : Bank("00125", "Burgan Bank", "burgan-bank"),
161 2 : Bank("00124", "ABank", "alternatif-bank"),
162 2 : Bank("00123", "HSBC", "hsbc"),
163 2 : Bank("00111", "Finansbank", "finansbank"),
164 2 : Bank("00109", "Tekstilbank", "tekstil-bankasi"),
165 2 : Bank("00108", "T-Bank", "turkland-bank"),
166 2 : Bank("00103", "Fibabanka", "fibabanka"),
167 2 : Bank("00100", "Adabank", "adabank"),
168 2 : Bank("00099", "ING Bank", "ing-bank"),
169 2 : Bank("00096", "Turkish Bank", "turkish-bank"),
170 2 : Bank("00092", "Citibank", "citibank"),
171 2 : Bank("00091", "A&T Bank", "arap-turk-bankasi"),
172 2 : Bank("00071", "Fortis", "fortis"),
173 2 : Bank("00067", "Yapı ve Kredi Bankası", "yapi-ve-kredi-bankasi"),
174 2 : Bank("00064", "İş Bankası", "is-bankasi"),
175 2 : Bank("00062", "Garanti Bankası", "garanti-bankasi"),
176 2 : Bank("00059", "Şekerbank", "sekerbank"),
177 2 : Bank("00046", "Akbank", "akbank"),
178 2 : Bank("00032", "Türk Ekonomi Bankası (TEB)", "turk-ekonomi-bankasi"),
179 2 : Bank("00015", "VakıfBank", "vakiflar-bankasi"),
180 2 : Bank("00012", "Halkbank", "halkbank"),
181 2 : Bank("00010", "Ziraat Bankası", "ziraat-bankasi"),
182 : ];
183 :
184 : return bankListTR;
185 : }
186 :
187 : default:
188 : {
189 1 : return [];
190 : }
191 : }
192 : }
193 :
194 : /// Bir Iban numarasını oluşturarak geri döndürür.
195 1 : static String generateIban(Country country) {
196 1 : String bankCode = generateBankCode(country);
197 : switch (country) {
198 1 : case Country.turkish:
199 : {
200 1 : String lastPart = Utils.generateRandomNumeric(16);
201 : //print("----------------------------------");
202 : //print("lastPart(16): ${lastPart.length}");
203 2 : String template = _getIbanChecksum("TR00${bankCode}0$lastPart");
204 : //print("template(2): $template");
205 1 : var newIban = "TR$template${bankCode}0$lastPart";
206 : //print("newIban: $newIban");
207 : //print("----------------------------------");
208 : return newIban;
209 : }
210 :
211 : default:
212 : {
213 : return "Generate sırasında bir hata oluştu.";
214 : }
215 : }
216 : }
217 : }
|