إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
* * * * * 1 صوت

وظيفة تحويل الأرقام بالصيغة القياسية إلى الصيغة اللفظية العربية


1 رد (ردود) على هذا الموضوع

#1 محمود ربيع

محمود ربيع

    مشترك

  • فريق الإشراف
  • 177 مشاركة
  • الاسم الأول:Mahmoud
  • اسم العائلة:Rabie
  • البـلـد: Country Flag
  • الاهتمامات:Oracle Database
    Oracle APEX
    Oracle JET
    Oracle ADF
    Oracle Linux
    Java
    J2EE
    JavaScript
    PHP
    Python
    ReactNative
    IONIC
    NativeScript
    Angular
    DevOps
    SCRUM

تاريخ المشاركة 10 November 2018 - 07:15 PM

السلام عليكم ورحمة الله

 

 

اليكم الوظيفة بلغة PL/SQL لتحويل الأرقام بالصيغة القياسية إلى الصيغة اللفظية العربية بشرط أن يكون الرقم أقل من 999999 

create or replace FUNCTION WRITENUMINARABICWORDS
(totnetget in NUMBER)
return VARCHAR2
is
strNum VARCHAR2(10);
numInArabic VARCHAR2(100);
a7ad VARCHAR2(1);
a7adArabic VARCHAR2(50);
asharat VARCHAR2(1);
asharatArabic VARCHAR2(50);
me2at VARCHAR2(1);
me2atArabic VARCHAR2(50);
alaaf VARCHAR2(1);
alaafArabic VARCHAR2(50);
asharatolof VARCHAR2(1);
asharatolofArabic VARCHAR2(50);
me2atolof VARCHAR2(1);
me2atolofArabic VARCHAR2(50);
malayeen VARCHAR2(1);
malayeenArabic VARCHAR2(50);
numLength NUMBER;

begin
strNum := TO_CHAR(totnetget);

-- check a7ad digit
a7ad := substr(strNum,length(strNum),1);
IF a7ad != '0' THEN
IF a7ad = '1' THEN a7adArabic := 'واحد';
ELSIF a7ad = '2' THEN a7adArabic := 'اثنان';
ELSIF a7ad = '3' THEN a7adArabic := 'ثلاثة';
ELSIF a7ad = '4' THEN a7adArabic := 'أربعة';
ELSIF a7ad = '5' THEN a7adArabic := 'خمسة';
ELSIF a7ad = '6' THEN a7adArabic := 'ستة';
ELSIF a7ad = '7' THEN a7adArabic := 'سبعة';
ELSIF a7ad = '8' THEN a7adArabic := 'ثمانية';
ELSIF a7ad = '9' THEN a7adArabic := 'تسعة';
END IF;
numInArabic := a7adArabic;
END IF;
-- check asharat digit
IF(length(strNum)>1) THEN
asharat:= substr(strNum,length(strNum)-1,1);
IF asharat!= '0' THEN
IF asharat = '1' THEN
IF(a7ad = '0') THEN
asharatArabic := 'عشرة';
ELSE
IF a7ad = '1' THEN asharatArabic := 'احد عشر';
ELSIF a7ad = '2' THEN asharatArabic := 'اثنا عشر';
ELSIF a7ad = '3' THEN asharatArabic := 'ثلاثة عشر';
ELSIF a7ad = '4' THEN asharatArabic := 'أربعة عشر';
ELSIF a7ad = '5' THEN asharatArabic := 'خمسة عشر';
ELSIF a7ad = '6' THEN asharatArabic := 'ستة عشر';
ELSIF a7ad = '7' THEN asharatArabic := 'سبعة عشر';
ELSIF a7ad = '8' THEN asharatArabic := 'ثمانية عشر';
ELSIF a7ad = '9' THEN asharatArabic := 'تسعة عشر';
END IF;
END IF;
ELSIF asharat = '2' THEN
asharatArabic := 'عشرون';
ELSIF asharat = '3' THEN
asharatArabic := 'ثلاثون';
ELSIF asharat = '4' THEN
asharatArabic := 'أربعون';
ELSIF asharat = '5' THEN
asharatArabic := 'خمسون';
ELSIF asharat = '6' THEN
asharatArabic := 'ستون';
ELSIF asharat = '7' THEN
asharatArabic := 'سبعون';
ELSIF asharat = '8' THEN
asharatArabic := 'ثمانون';
ELSIF asharat = '9' THEN
asharatArabic := 'تسعون';
END IF;
ELSE
asharatArabic := a7adArabic;
END IF;
IF(a7ad != '0' and asharat != '1') THEN
numInArabic := a7adArabic || ' و ' || asharatArabic;
ELSE
numInArabic := asharatArabic;
END IF;

END IF;
-- check me2at digit
IF(length(strNum) > 2) THEN
me2at := substr(strNum,length(strNum)-2,1);
IF me2at != '0' THEN
IF me2at = '1' THEN me2atArabic := 'مائة';
ELSIF me2at = '2' THEN me2atArabic:= 'مائتان';
ELSIF me2at = '3' THEN me2atArabic:= 'ثلاثمائة';
ELSIF me2at = '4' THEN me2atArabic:= 'أربعمائة';
ELSIF me2at = '5' THEN me2atArabic:= 'خمسمائة';
ELSIF me2at = '6' THEN me2atArabic:= 'ستمائة';
ELSIF me2at = '7' THEN me2atArabic:= 'سبعمائة';
ELSIF me2at = '8' THEN me2atArabic:= 'ثمانمائة';
ELSIF me2at = '9' THEN me2atArabic:= 'تسعمائة';
END IF;

ELSE
me2atArabic := asharatArabic;
END IF;

IF(a7ad != '0' OR asharat != '0') THEN
numInArabic := me2atArabic || ' و ' || WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-1,2)));
ELSE
numInArabic := me2atArabic;
END IF;

END IF;
-- alaaf digit
IF(length(strNum)>3) THEN
alaaf := substr(strNum,length(strNum)-3,1);
IF alaaf != '0' THEN
IF alaaf = '1' THEN alaafArabic := 'ألف';
ELSIF alaaf = '2' THEN alaafArabic := 'ألفان';
ELSIF alaaf = '3' THEN alaafArabic := 'ثلاثة الاف';
ELSIF alaaf = '4' THEN alaafArabic := 'أربعة الاف';
ELSIF alaaf = '5' THEN alaafArabic := 'خمسة الاف';
ELSIF alaaf = '6' THEN alaafArabic := 'ستة الاف';
ELSIF alaaf = '7' THEN alaafArabic := 'سبعة الاف';
ELSIF alaaf = '8' THEN alaafArabic := 'ثمانية الاف';
ELSIF alaaf = '9' THEN alaafArabic := 'تسعة الاف';
END IF;
ELSE
alaafArabic := me2atArabic;
END IF;

IF(a7ad != '0' OR asharat != '0' OR me2at != '0') THEN
numInArabic := alaafArabic || ' و ' || WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-2,3)));
ELSE
numInArabic := alaafArabic;
END IF;
END IF;
-- asharatolof digit
IF(length(strNum)>4) THEN
asharatolof := substr(strNum,length(strNum)-4,1);
IF asharatolof != '0' THEN
IF asharatolof = '1' THEN asharatolofArabic := 'عشرة آلاف';
ELSIF asharatolof = '2' THEN asharatolofArabic := 'عشرون ألفا';
ELSIF asharatolof = '3' THEN asharatolofArabic := 'ثلاثون ألفا';
ELSIF asharatolof = '4' THEN asharatolofArabic := 'أربعون ألفا';
ELSIF asharatolof = '5' THEN asharatolofArabic := 'خمسون ألفا';
ELSIF asharatolof = '6' THEN asharatolofArabic := 'ستون ألفا';
ELSIF asharatolof = '7' THEN asharatolofArabic := 'سبعون ألفا';
ELSIF asharatolof = '8' THEN asharatolofArabic := 'ثمانون ألفا';
ELSIF asharatolof = '9' THEN asharatolofArabic := 'تسعون ألفا';
END IF;
ELSE
asharatolofArabic := alaafArabic;
END IF;

IF(a7ad != '0' OR asharat != '0' OR me2at != '0' OR alaaf != '0') THEN
numInArabic := WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-4,2)))
|| CASE WHEN (asharatolof = '1' AND alaaf = '0') THEN ' آلاف ' ELSE ' ألف ' END
|| CASE WHEN (a7ad != '0' OR asharat != '0' OR me2at != '0') THEN ' و ' END
|| WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-2,3)));
ELSE
numInArabic := asharatolofArabic;
END IF;
END IF;
-- me2atolof digit
IF(length(strNum)>5) THEN
me2atolof := substr(strNum,length(strNum)-5,1);
IF me2atolof != '0' THEN
IF me2atolof = '1' THEN me2atolofArabic := 'مائة ألف';
ELSIF me2atolof = '2' THEN me2atolofArabic := 'مائتا ألف';
ELSIF me2atolof = '3' THEN me2atolofArabic := 'ثلاثمائة ألف';
ELSIF me2atolof = '4' THEN me2atolofArabic := 'أربعمائة ألف';
ELSIF me2atolof = '5' THEN me2atolofArabic := 'خمسمائة ألف';
ELSIF me2atolof = '6' THEN me2atolofArabic := 'ستمائة ألف';
ELSIF me2atolof = '7' THEN me2atolofArabic := 'سبعمائة ألف';
ELSIF me2atolof = '8' THEN me2atolofArabic := 'ثمانمائة ألف';
ELSIF me2atolof = '9' THEN me2atolofArabic := 'تسعمائة ألف';
END IF;
ELSE
me2atolofArabic := asharatolofArabic ;
END IF;

IF(a7ad != '0' OR asharat != '0' OR me2at != '0' OR alaaf != '0' OR asharatolof != '0') THEN
numInArabic := WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-5,3)))
|| ' ألفا و '
|| WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-2,3)));
ELSE
numInArabic := me2atolofArabic;
END IF;
END IF;

-- more than 999999 is not available in this version
IF(length(strNum)>6) THEN
numInArabic := strNum;
END IF;
RETURN numInArabic;
END;

نأمل من كل شخص يستفيد منها أن لا ينسانا من صالح دعائه

 

ودمتم بخير وعافية


  • Amgad و المبرمج الصاعد معجبون بهذا

Eng. Mahmoud Rabie

 

IT Solution Manager

Senior IT Trainer

 

My OTN Profile

My OTN Blog

My LinkedIn Profile


#2 المبرمج الصاعد

المبرمج الصاعد

    مشرف عام

  • الفريق الإداري
  • 768 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:بكل جديد من التقنية..

تاريخ المشاركة 11 November 2018 - 10:20 AM

مشاركة رائعة مهندس محمود..


  • محمود ربيع معجب بهذا

IT Manager