September 16, 2023
التفقيط يعني تحويل الأرقام إلى حروف عربية، وهذا الكود يقوم بتحويل أي رقم من 0 لغاية 99 تريليونًا إلى حروف عربية. غالبًا ما يتم استخدام التفقيط في المعاملات المالية لتفسير الأرقام بالحروف لمنع التزوير.
1var ones = {
2 0: "صفر",
3 1: "واحد",
4 2: "اثنان",
5 3: "ثلاثة",
6 4: "أربعة",
7 5: "خمسة",
8 6: "ستة",
9 7: "سبعة",
10 8: "ثمانية",
11 9: "تسعة",
12 10: "عشرة",
13 11: "أحد عشر",
14 12: "اثنى عشر"
15}
16
17/*
18القيم الخاصة بقيم العشرات
19* */
20var tens = {
21 1: "عشر",
22 2: "عشرون",
23 3: "ثلاثون",
24 4: "أربعون",
25 5: "خمسون",
26 6: "ستون",
27 7: "سبعون",
28 8: "ثمانون",
29 9: "تسعون"
30}
31
32
33/*
34القيم الخاصة بقيم المئات
35* */
36var hundreds = {
37 0: "صفر",
38 1: "مائة",
39 2: "مئتان",
40 3: "ثلاثمائة",
41 4: "أربعمائة",
42 5: "خمسمائة",
43 6: "ستمائة",
44 7: "سبعمائة",
45 8: "ثمانمائة",
46 9: "تسعمائة"
47}
48
49/*
50القيم الخاصة بقيم الآلاف
51* */
52var thousands = {
53 1: "ألف",
54 2: "ألفان",
55 39: "آلاف",
56 1199: "ألفًا"
57}
58
59/*
60القيم الخاصة بقيم الملايين
61* */
62var millions = {
63 1: "مليون",
64 2: "مليونان",
65 39: "ملايين",
66 1199: "مليونًا"
67}
68
69
70/*
71القيم الخاصة بقيم المليارات
72* */
73var billions = {
74 1: "مليار",
75 2: "ملياران",
76 39: "مليارات",
77 1199: "مليارًا"
78}
79
80/*
81القيم الخاصة بقيم التريليونات
82* */
83var trillions = {
84 1: "تريليون",
85 2: "تريليونان",
86 39: "تريليونات",
87 1199: "تريليونًا"
88}
89
90
91/**
92 *
93 * @param {*} number
94 * هذه هي الدالة الرئيسية
95 * والتي يتم من خلالها تفقيط الأرقام
96 */
97function tafqeet(number) {
98
99 /**
100 * متغير لتخزين النص المفقط بداخله
101 */
102
103 var value = "";
104 number = parseInt (number);
105 //التحقق من أن المتغير يحتوي أرقامًا فقط، وأقل من تسعة وتسعين تريليون
106 if (number.toString ().match(/^[0-9]+$/) != null && number.toString().length <= 14) {
107 switch (number.toString().length) {
108 /**
109 * إذا كان العدد من 0 إلى 99
110 */
111 case 1:
112 case 2:
113 value = oneTen(number);
114 break;
115
116 /**
117 * إذا كان العدد من 100 إلى 999
118 */
119 case 3:
120 value = hundred(number);
121 break;
122
123 /**
124 * إذا كان العدد من 1000 إلى 999999
125 * أي يشمل الآلاف وعشرات الألوف ومئات الألوف
126 */
127 case 4:
128 case 5:
129 case 6:
130 value = thousand(number);
131 break;
132
133 /**
134 * إذا كان العدد من 1000000 إلى 999999999
135 * أي يشمل الملايين وعشرات الملايين ومئات الملايين
136 */
137 case 7:
138 case 8:
139 case 9:
140 value = million(number);
141 break;
142
143 /**
144 * إذا كان العدد من 1000000000 إلى 999999999999
145 * أي يشمل المليارات وعشرات المليارات ومئات المليارات
146 */
147 case 10:
148 case 11:
149 case 12:
150 value = billion(number);
151 break;
152
153 /**
154 * إذا كان العدد من 100000000000 إلى 9999999999999
155 * أي يشمل التريليونات وعشرات التريليونات
156 */
157 case 13:
158 case 14:
159 case 15:
160 value = trillion(number);
161 break;
162
163 }
164
165 }
166
167 /**
168 * هذا السطر يقوم فقط بإزالة بعض الزوائد من النص الأخير
169 * تظهر هذه الزوائد نتيجة بعض الفروق في عملية التفقيط
170 * ولإزالتها يتم استخدام هذا السطر
171 */
172 return value.replace (/وصفر/g,"")
173 .replace (/وundefined/g,"")
174 .replace(/ +(?= )/g,'')
175 .replace (/صفر و/g,"")
176 .replace (/صفر/g,"")
177 .replace (/مئتان أ/,"مائتا أ")
178 .replace (/مئتان م/,"مائتا م");
179}
180
181
182/**
183 *
184 * @param {*} number
185 * الدالة الخاصة بالآحاد والعشرات
186 */
187function oneTen(number) {
188
189 /**
190 * القيم الافتراضية
191 */
192 var value = "صفر";
193
194 //من 0 إلى 12
195 if (number <= 12) {
196 switch (parseInt (number)) {
197 case 0:
198 value = ones["0"];
199 break;
200 case 1:
201 value = ones["1"];
202 break;
203 case 2:
204 value = ones["2"];
205 break;
206 case 3:
207 value = ones["3"];
208 break;
209 case 4:
210 value = ones["4"];
211 break;
212 case 5:
213 value = ones["5"];
214 break;
215 case 6:
216 value = ones["6"];
217 break;
218 case 7:
219 value = ones["7"];
220 break;
221 case 8:
222 value = ones["8"];
223 break;
224 case 9:
225 value = ones["9"];
226 break;
227 case 10:
228 value = ones["10"];
229 break;
230
231 case 11:
232 value = ones["11"];
233 break;
234
235 case 12:
236 value = ones["12"];
237 break;
238
239
240 }
241 }
242
243 /**
244 * إذا كان العدد أكبر من12 وأقل من 99
245 * يقوم بجلب القيمة الأولى من العشرات
246 * والثانية من الآحاد
247 */
248 else {
249 var first = getNth (number, 0,0);
250
251 var second = getNth (number, 1,1);
252
253 if(tens[first] == "عشر"){
254 value = ones[second] + " " + tens[first];
255 }
256 else{
257 value = ones[second] + " و" + tens[first];
258 }
259
260 }
261
262 return value;
263}
264
265
266/**
267 *
268 * @param {*} number
269 * الدالة الخاصة بالمئات
270 */
271function hundred(number) {
272 var value = "";
273
274 /**
275 * إذا كان الرقم لا يحتوي على ثلاث منازل
276 * سيتم إضافة أصفار إلى يسار الرقم
277 */
278 while (number.toString().length !=3){
279 number = "0"+number;
280 }
281
282 var first = getNth (number, 0,0);
283
284 /**
285 * تحديد قيمة الرقم الأول
286 */
287 switch (parseInt(first)) {
288 case 0:
289 value = hundreds["0"];
290 break;
291 case 1:
292 value = hundreds["1"];
293 break;
294 case 2:
295 value = hundreds["2"];
296 break;
297 case 3:
298 value = hundreds["3"];
299 break;
300 case 4:
301 value = hundreds["4"];
302 break;
303 case 5:
304 value = hundreds["5"];
305 break;
306 case 6:
307 value = hundreds["6"];
308 break;
309 case 7:
310 value = hundreds["7"];
311 break;
312 case 8:
313 value = hundreds["8"];
314 break;
315 case 9:
316 value = hundreds["9"];
317 break;
318 }
319
320 /**
321 * إضافة منزلة العشرات إلى الرقم المفقط
322 * باستخدام دالة العشرات السابقة
323 */
324 value = value + " و"+oneTen (parseInt (getNth (number,1,2)));
325 return value;
326}
327
328/**
329 *
330 * @param {*} number
331 * الدالة الخاصة بالآلاف
332 */
333function thousand(number) {
334 return thousandsTrillions (thousands["1"],thousands["2"], thousands["39"], thousands["1199"], 0, parseInt (number), (getNthReverse (number, 4)));
335}
336
337/**
338 *
339 * @param {*} number
340 * الدالة الخاصة بالملايين
341 */
342function million(number) {
343 return thousandsTrillions (millions["1"],millions["2"], millions["39"], millions["1199"], 3, parseInt (number), (getNthReverse (number, 7)));
344}
345
346
347/**
348 *
349 * @param {*} number
350 * الدالة الخاصة بالمليارات
351 */
352function billion(number) {
353 return thousandsTrillions (billions["1"],billions["2"], billions["39"], billions["1199"], 6, parseInt (number), (getNthReverse (number, 10)));
354}
355
356
357/**
358 *
359 * @param {*} number
360 * الدالة الخاصة بالترليونات
361 */
362function trillion(number) {
363 return thousandsTrillions (trillions["1"],trillions["2"], trillions["39"], trillions["1199"], 9, parseInt (number), (getNthReverse (number, 13)));
364}
365
366
367/**
368 * هذه الدالة هي الأساسية بالنسبة للأرقام
369 * من الآلاف وحتى التريليونات
370 * تقوم هذه الدالة بنفس العملية للمنازل السابقة مع اختلاف
371 * زيادة عدد المنازل في كل مرة
372 * @param {*} one
373 * @param {*} two
374 * @param {*} three
375 * @param {*} eleven
376 * @param {*} diff
377 * @param {*} number
378 * @param {*} other
379 */
380function thousandsTrillions (one, two, three, eleven, diff, number, other){
381 /**
382 * جلب المنازل المتبقية
383 */
384 other = parseInt (other);
385 other = tafqeet (other);
386
387 /**
388 * إذا كان المتبقي يساوي صفر
389 */
390 if (other == ""){
391 other = "صفر"
392 }
393
394 var value = "";
395
396 number = parseInt (number);
397
398 /**
399 * التحقق من طول الرقم
400 * لاكتشاف إلى أي منزلة ينتمي
401 */
402 switch (number.toString().length){
403 /**
404 * ألوف، أو ملايين، أو مليارات، أو تريليونات
405 */
406 case 4+diff:
407 var ones = parseInt (getNth (number, 0,0));
408 switch (ones){
409 case 1:
410 value = one + " و"+ (other);
411 break;
412 case 2:
413 value = two + " و"+ (other);
414 break;
415 default:
416 value = oneTen (ones) +" "+ three + " و"+ (other);
417 break;
418 }
419 break;
420
421 /**
422 * عشرات الألوف، أو عشرات الملايين، أو عشرات المليارات، أو عشرات التريليونات
423 */
424 case 5+diff:
425 var tens = parseInt (getNth (number, 0,1));
426 switch (tens){
427 case 10:
428 value = oneTen (tens) +" "+ three + " و"+ (other);
429 break;
430 default:
431 value = oneTen (tens) +" "+ eleven + " و"+ (other);
432 break;
433 }
434 break;
435
436 /**
437 *مئات الألوف، أو مئات الملايين، أو مئات المليارات
438 */
439 case 6+diff:
440 var hundreds = parseInt (getNth (number, 0,2));
441
442 var two = parseInt (getNth (number, 1,2));
443 var th = "";
444 switch (two){
445 case 0:
446 th = one;
447 break;
448
449 default:
450 th = eleven;
451 break;
452 }
453 switch (tens){
454 case 100<=tens<=199:
455 value = hundred (hundreds) +" "+ th + " و"+ (other);
456 break;
457 case 200<=tens<=299:
458 value = hundred (hundreds) +" "+ th + " و"+ (other);
459 break;
460 default:
461 value = hundred (hundreds) +" "+ th + " و"+ (other);
462 break;
463 }
464 break;
465 }
466
467 return value;
468
469}
470
471
472/**
473 * دالة لجلب أجزاء من الرقم المراد تفقيطه
474 */
475function getNth(number, first, end){
476 var finalNumber = "";
477 for (var i=first;i<=end;i++){
478 finalNumber = finalNumber + String (number).charAt(i);
479 }
480 return finalNumber;
481}
482
483/**
484 * دالة تجلب أجزاء من الرقم بالعكس
485 * @param {*} number
486 * @param {*} limit
487 */
488function getNthReverse(number, limit){
489 var finalNumber = "";
490 var x = 1;
491 while (x != limit){
492 finalNumber = String (number).charAt(number.toString().length-x) + finalNumber;
493 x++;
494 }
495
496 return finalNumber;
497}
1function main (){
2 var fraction = document.getElementById("P3_NEW").value.split(".");
3
4 if (fraction.length == 2){
5 document.getElementById ("P3_NEW_1").value = tafqeet (fraction[0]) + " فاصلة " + tafqeet (fraction[1]);
6 }
7 else if (fraction.length == 1){
8 document.getElementById ("P3_NEW_1").value = tafqeet (fraction[0]);
9 }
10 }main()
No posts found in the category "Oracle apex"