1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | export const lettersValuesMap = {
|
8 | ا: 1,
|
9 | آ: 1,
|
10 | أ: 1,
|
11 | إ: 1,
|
12 | ء: 1,
|
13 | ٱ: 1,
|
14 | ب: 2,
|
15 | پ: 2,
|
16 | ج: 3,
|
17 | چ: 3,
|
18 | د: 4,
|
19 | ه: 5,
|
20 | ۂ: 5,
|
21 | و: 6,
|
22 | ؤ: 6,
|
23 | ز: 7,
|
24 | ژ: 7,
|
25 | ح: 8,
|
26 | ط: 9,
|
27 | ی: 10,
|
28 | ي: 10,
|
29 | ئ: 10,
|
30 | ى: 10,
|
31 | ک: 20,
|
32 | ك: 20,
|
33 | گ: 20,
|
34 | ل: 30,
|
35 | م: 40,
|
36 | ن: 50,
|
37 | س: 60,
|
38 | ع: 70,
|
39 | ف: 80,
|
40 | ص: 90,
|
41 | ق: 100,
|
42 | ر: 200,
|
43 | ش: 300,
|
44 | ت: 400,
|
45 | ة: 400,
|
46 | ث: 500,
|
47 | خ: 600,
|
48 | ذ: 700,
|
49 | ض: 800,
|
50 | ظ: 900,
|
51 | غ: 1000,
|
52 | }
|
53 |
|
54 | export const calculateAbjadCode = phrase => {
|
55 | const filteredPhrase = phrase.replace(/[.,/#!$%^&*;:{}=\-_`~()\s]/g, '')
|
56 | let result = 0
|
57 | for (const ch of filteredPhrase) {
|
58 | const chCode = ch.charCodeAt(0)
|
59 | if (chCode < 0x600 || chCode > 0x8FF) {
|
60 | console.debug({filteredPhrase})
|
61 | return NaN
|
62 | }
|
63 |
|
64 | result += lettersValuesMap[ch] ?? 0
|
65 | }
|
66 |
|
67 | console.debug({filteredPhrase, result})
|
68 | return result
|
69 | }
|
70 |
|
71 | export default calculateAbjadCode
|
72 |
|
73 | export const intToFa = (() => {
|
74 | const enDigitToFaDifference = '۰'.charCodeAt(0) - '0'.charCodeAt(0)
|
75 | const enDigitToFa = d => String.fromCharCode(d.charCodeAt(0) + enDigitToFaDifference)
|
76 |
|
77 | return num => [...num.toString()].map(enDigitToFa).join('')
|
78 | })()
|