UNPKG

1.36 kBJavaScriptView Raw
1// noinspection NonAsciiCharacters
2/**
3 * Created on 1400/2/1 (2021/4/21).
4 * @author {@link https://mirismaili.github.io S. Mahdi Mir-Ismaili}
5 */
6
7export 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
54export const calculateAbjadCode = phrase => {
55 const filteredPhrase = phrase.replace(/[.,/#!$%^&*;:{}=\-_`~()\s]/g, '') // https://stackoverflow.com/a/4328722/5318303
56 let result = 0
57 for (const ch of filteredPhrase) {
58 const chCode = ch.charCodeAt(0)
59 if (chCode < 0x600 || chCode > 0x8FF) { // Any non-{Persian/Arabic} character
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
71export default calculateAbjadCode
72
73export 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})()