Skip to content

Instantly share code, notes, and snippets.

@NimaGhaedsharafi
Last active September 30, 2020 15:55
Show Gist options
  • Save NimaGhaedsharafi/c6de0205fb4bc9ef7558b34ff5da6371 to your computer and use it in GitHub Desktop.
Save NimaGhaedsharafi/c6de0205fb4bc9ef7558b34ff5da6371 to your computer and use it in GitHub Desktop.
<?php
function digitToWord($amount)
{
$one = [
'صفر',
'یک',
'دو',
'سه',
'چهار',
'پنج',
'شش',
'هفت',
'هشت',
'نه'
];
$ten = [
'',
'ده',
'بیست',
'سی',
'چهل',
'پنجاه',
'شصت',
'هفتاد',
'هشتاد',
'نود',
];
$hundred = [
'',
'یکصد',
'دویست',
'سیصد',
'چهارصد',
'پانصد',
'ششصد',
'هفتصد',
'هشتصد',
'نهصد',
];
$categories = [
'',
'هزار',
'میلیون',
'میلیارد',
];
$exceptions = [
'',
'یازده',
'دوازده',
'سیزده',
'چهارده',
'پانزده',
'شانزده',
'هفده',
'هجده',
'نوزده',
];
if ((strlen($amount) / 3) > count($categories)) {
throw new \Exception('number is longger!');
}
$letters_separator = ' و ';
$amount = (string)(int)$amount;
$amount_len = strlen($amount);
$persian_letters = '';
for ($i = $amount_len - 1; $i >= 0; $i -= 3) {
$i_one = (int)isset($amount[$i]) ? $amount[$i] : -1;
$i_ten = (int)isset($amount[$i - 1]) ? $amount[$i - 1] : -1;
$i_hundred = (int)isset($amount[$i - 2]) ? $amount[$i - 2] : -1;
$isset_one = false;
$isset_ten = false;
$isset_hundred = false;
$letters = '';
// zero
if ($i_one == 0 && $i_ten < 0 && $i_hundred < 0) {
$letters = $one[$i_one];
}
// one
if (($i >= 0) && $i_one > 0 && $i_ten != 1 && isset($one[$i_one])) {
$letters = $one[$i_one];
$isset_one = true;
}
// ten
if (($i - 1 >= 0) && $i_ten > 0 && isset($ten[$i_ten])) {
if ($isset_one) {
$letters = $letters_separator . $letters;
}
if ($i_one == 0) {
$letters = $ten[$i_ten];
} elseif ($i_ten == 1 && $i_one > 0) {
$letters = $exceptions[$i_one];
} else {
$letters = $ten[$i_ten] . $letters;
}
$isset_ten = true;
}
// hundred
if (($i - 2 >= 0) && $i_hundred > 0 && isset($hundred[$i_hundred])) {
if ($isset_ten || $isset_one) {
$letters = $letters_separator . $letters;
}
$letters = $hundred[$i_hundred] . $letters;
$isset_hundred = true;
}
if ($i_one < 1 && $i_ten < 1 && $i_hundred < 1) {
$letters = '';
} else {
$letters .= ' ' . $categories[($amount_len - $i - 1) / 3];
}
if (!empty($letters) && $i >= 3) {
$letters = $letters_separator . $letters;
}
$persian_letters = $letters . $persian_letters;
}
return $persian_letters;
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment