using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApplication1 { public class General { /// /// تفقيط رقم وتحويل أرقامه إلى حروف /// /// الرقم المراد تفقيطه /// ليرة أو دينار أو دولار /// ليرات أو دنانير أو دولارات /// نتيجة التفقيط public static string ConvertToLetters(decimal Number, string Currency, string Currencys) { return ConvertNumberToLetters(Number, Currency, Currencys); } /// /// تفقيط رقم وتحويل أرقامه إلى حروف /// /// الرقم المراد تفقيطه /// نتيجة التفقيط public static string ConvertToLetters(decimal Number) { return ConvertNumberToLetters(Number, null, null); } private static string ConvertNumberToLetters(decimal Number, string Currency, string Currencys) { if (Number > 999999999999 || Number < 0) throw new OverflowException("لا يمكن إدخال رقم أكبر من '999,999,999,999' أو أصغر من الصفر."); string[] Result = new string[4]; string S1 = "", S2 = ""; string strNumber = Number.ToString().Split('.')[0]; if ((int)(strNumber.Length / 3) != (decimal)strNumber.Length / 3) strNumber = strNumber.PadLeft(((int)(strNumber.Length / 3) + 1) * 3, '0'); for (int i = 0; i < strNumber.Length; i += 3) { if (i / 3 == 0) { S1 = Currency; S2 = Currencys; } if (i / 3 == 1) { S1 = "ألف"; S2 = "آلاف"; } if (i / 3 == 2) { S1 = "مليون"; S2 = "ملايين"; } if (i / 3 == 3) { S1 = "مليار"; S2 = "مليارات"; } string strCurNumber = strNumber.Substring(strNumber.Length - 3 - i, 3); if (Convert.ToInt32(strCurNumber) > 0) Result[i / 3] = LettersFrom3Numbers(Convert.ToInt32(strCurNumber.ToString()), S1, S2); } string Results = string.Empty; for (int i = Result.Length - 1; i >= 0; i--) if (Result[i] != null) if (Result[i].Length > 0) if (Results.Length > 0) Results += " و" + Result[i]; else Results += Result[i]; //حساب الفواصل S1 = "فلس"; S2 = "فلس"; if (Number.ToString().IndexOf('.') > 0) strNumber = Number.ToString().Substring(Number.ToString().IndexOf('.'), Number.ToString().Length - Number.ToString().IndexOf('.')).PadRight(3, '0'); if (strNumber == ".00") return Results; string strDecimal = LettersFromDecimal(Convert.ToDecimal(strNumber.ToString()), S1); if (Results.Length > 0 && strDecimal != null) Results += " و" + strDecimal; else Results += strDecimal; return Results; } private static string LettersFromDecimal(decimal Number, string S1) { if (Number * 100 == 1) return " " + ((S1 != null) ? " " + S1 : null); else if (Number * 100 == 2) return " " + ((S1 != null) ? " " + S1 : null); else if (Number * 100 >= 3 && Number * 100 <= 10) return LettersFromNumber(Convert.ToInt32(Number * 100)) + "" + ((S1 != null) ? " " + S1 : null); else if (Number * 100 > 10 && Number * 100 <= 99) return LettersFromNumber(Convert.ToInt32(Number * 100)) + "" + ((S1 != null) ? " " + S1 : null); else return null; } private static string LettersFrom3Numbers(int Number, string S1, string S2) { string Result = string.Empty; int N1 = Convert.ToInt32(Number.ToString().PadLeft(3, '0').Substring(0, 1)); int N2 = Convert.ToInt32(Number.ToString().PadLeft(3, '0').Substring(1, 2)); string Letter1 = null, Letter2 = null; if (N1 > 0) Letter1 = LettersFromNumber(N1 * 100); if (N1 == 2 && N2 == 0) Letter1 = Letter1.Remove(Letter1.Length - 1) + " "; Letter2 = LettersFromNumber(N2); Result += Letter1; if (Letter1 != null && Letter2 != null) Result += " و"; if (N2 >= 3) Result += Letter2; if ((N2 == 1 || N2 == 2) && S1 == null) Result += Letter2; if (N2 <= 1 || N2 > 10) Result += " " + S1; else if (N2 == 2 && S1 != null) Result += " " + S1.Replace('ة', 'ت') + "ان"; else if (N2 >= 3 || N2 <= 10) Result += " " + S2; return Result; } private static string LettersFromNumber(int Number) { switch (Number) { //case 0: return "صفر"; case 1: return "واحد"; case 2: return "اثنان"; case 3: return "ثلاثة"; case 4: return "أربعة"; case 5: return "خمسة"; case 6: return "ستة"; case 7: return "سبعة"; case 8: return "ثمانية"; case 9: return "تسعة"; case 10: return "عشرة"; case 11: return "أحد عشر"; case 12: return "إثنا عشر"; default: if (Number >= 13 && Number <= 99) { int N1 = Convert.ToInt32(Number.ToString()[0].ToString()); int N2 = Convert.ToInt32(Number.ToString()[1].ToString()); string S = null; if (N2 != 0) S = " و"; switch (N1) { case 1: return LettersFromNumber(N2) + " عشر"; case 2: return LettersFromNumber(N2) + S + "عشرون"; case 3: return LettersFromNumber(N2) + S + "ثلاثون"; case 4: return LettersFromNumber(N2) + S + "أربعون"; case 5: return LettersFromNumber(N2) + S + "خمسون"; case 6: return LettersFromNumber(N2) + S + "ستون"; case 7: return LettersFromNumber(N2) + S + "سبعون"; case 8: return LettersFromNumber(N2) + S + "ثمانون"; case 9: return LettersFromNumber(N2) + S + "تسعون"; default: return null; } } else if (Number >= 100 && Number <= 900) { int N = Convert.ToInt32(Number.ToString()[0].ToString()); switch (N) { case 1: return " مئة"; case 2: return " مئتان"; case 3: case 4: case 5: case 6: case 7: case 8: case 9: return LettersFromNumber(N).Remove(LettersFromNumber(N).Length - 1) + "مئة"; default: return null; } } else return null; } } } }