جزوه آموزشی: تبدیل عدد به حروف فارسی در PHP

صفحه اجرای برنامه

https://code.secad.ir/digit_to_text3.php

برای مشاهده کد و دریافت فایل پروژه، به لینک زیر مراجعه کنید:

مشاهده پروژه در GitHub


🔷 توضیح کلی برنامه

این برنامه یک فرم تحت وب است که به زبان PHP نوشته شده و وظیفه آن تبدیل عدد وارد شده توسط کاربر به حروف فارسی است. کاربر عددی را در فرم وارد می‌کند، سپس با زدن دکمه‌ی «تبدیل»، عدد به صورت حروف نمایش داده می‌شود. به‌عنوان مثال اگر کاربر عدد ۱۲۵ را وارد کند، خروجی برنامه می‌شود:

صد و بیست و پنج


🔹 بخش اول: تابع convertNumberToWords

این تابع مهم‌ترین قسمت برنامه است و تمام منطق تبدیل عدد به حروف در آن نوشته شده است.

✅ تعریف آرایه‌ی کلمات ($words)

در ابتدای تابع، آرایه‌ای تعریف شده که عددهای مهم (۰ تا ۱۹، دهگان‌ها، صدگان‌ها، هزار، میلیون و میلیارد) را به صورت حروف نگه می‌دارد:

$words = [
  ۰ => 'صفر',
  ۱ => 'یک',
  ۲ => 'دو',
  ۱۰ => 'ده',
  ۲۰ => 'بیست',
  ۱۰۰ => 'صد',
  ۱۰۰۰ => 'هزار',
  ۱۰۰۰۰۰۰ => 'میلیون',
  ۱۰۰۰۰۰۰۰۰۰ => 'میلیارد'
];

✅ تبدیل عدد بر اساس محدوده‌ها

تابع با توجه به مقدار عدد، چند حالت مختلف دارد:

۱. اعداد کمتر از ۲۰:

مستقیماً از آرایه‌ی $words خوانده می‌شود.

if ($number < 20) {
    return $words[$number];
}

۲. اعداد بین ۲۰ تا ۹۹:

عددی مانند ۴۵ به این صورت تبدیل می‌شود:

چهل و پنج

$tens = floor($number / 10) * 10;
$units = $number % 10;
return $words[$tens] . ($units ? ' و ' . $words[$units] : '');

۳. اعداد بین ۱۰۰ تا ۹۹۹:

اعداد مانند ۳۴۵ به صورت:

سیصد و چهل و پنج

$hundreds = floor($number / 100) * 100;
$remainder = $number % 100;
return $words[$hundreds] . ($remainder ? ' و ' . convertNumberToWords($remainder) : '');

۴. اعداد بزرگ‌تر (هزار، میلیون، میلیارد)

تابع خودش را دوباره فراخوانی می‌کند (بازگشتی است) تا قسمت‌های بزرگ عدد را نیز به حروف تبدیل کند:

if ($number < 1000000) {
    $thousands = floor($number / 1000);
    $remainder = $number % 1000;
    return convertNumberToWords($thousands) . ' هزار' . ($remainder ? ' و ' . convertNumberToWords($remainder) : '');
}


🔹 بخش دوم: دریافت عدد از کاربر

در پایین فایل PHP، بخشی وجود دارد که بررسی می‌کند آیا عددی از فرم ارسال شده یا نه:

if (isset($_POST['number'])) {
    $number = intval($_POST['number']);
    $result = convertNumberToWords($number);
}

  • کاربر عدد را در فرم وارد می‌کند.
  • عدد به تابع فرستاده می‌شود.
  • نتیجه در متغیر $result ذخیره می‌شود.

🔹 بخش سوم: طراحی HTML و استایل صفحه

صفحه‌ی وب با HTML و CSS طراحی شده تا ظاهر زیباتری داشته باشد.

💡 عناصر مهم HTML:

<form method="post">
  <label for="number">عدد را وارد کنید:</label>
  <input type="number" name="number" id="number" required>
  <input type="submit" value="تبدیل">
</form>

  • کاربر عدد را وارد می‌کند.
  • دکمه‌ی «تبدیل» فرم را به همان صفحه ارسال می‌کند.

💅 ظاهر صفحه (CSS)

صفحه دارای فونت فارسی، پس‌زمینه‌ی روشن و طراحی ساده است:

body {
    text-align: center;
    font-family: Rubik;
    background-color: #f4f4f4;
    padding: 20px;
}


🔹 بخش چهارم: نمایش نتیجه

در صورت وجود نتیجه، عدد و حروف آن در صفحه نشان داده می‌شوند:

<?php if ($result): ?>
  <h2>عدد وارد شده: <?php echo htmlspecialchars($number); ?></h2>
  <h2>نتیجه: <?php echo $result; ?></h2>
<?php endif; ?>


🔸 نکات مهم برای دانش‌آموزان

  1. تابع convertNumberToWords() نمونه‌ای از تابع بازگشتی (Recursive Function) است.
  2. استفاده از floor() برای جدا کردن بخش‌های عدد مانند هزارگان یا صدگان است.
  3. از isset() برای بررسی ارسال فرم استفاده شده است.
  4. دستور htmlspecialchars() برای جلوگیری از مشکلات امنیتی (مثل XSS) در هنگام چاپ اطلاعات کاربر استفاده می‌شود.
  5. متغیر $result فقط در صورت ارسال فرم مقداردهی می‌شود.

🧠 تمرین پیشنهادی

  1. تابع را طوری تغییر دهید که بتواند اعشار (مثل ۱۲.۵) را هم به حروف تبدیل کند.
  2. عدد را با GET دریافت کنید و در نوار آدرس نمایش دهید.
  3. ظاهر صفحه را با رنگ‌ها و فونت‌های دیگر زیباتر کنید.

📅 تاریخ: 1403/۰۸/۰۳
✍️ نویسنده: سجاد اسماعیلی
🌐 SECAD.ir