User Image
التفقيط الارقام JavaScript in oracle apex

التفقيط الارقام JavaScript in oracle apex

Hossam Assadallah

Hossam Assadallah

Creating DateSeptember 16, 2023

Oracle apexjQueryJavascript

  التفقيط يعني تحويل الأرقام إلى حروف عربية، وهذا الكود يقوم بتحويل أي رقم من 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()

May you like Heart Icon

No posts found in the category "Oracle apex"

Comments