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;
}
}
}
}