diff --git a/src/Exceptions/InvalidNumber.php b/src/Exceptions/InvalidNumber.php index ad6a94f..13d12aa 100644 --- a/src/Exceptions/InvalidNumber.php +++ b/src/Exceptions/InvalidNumber.php @@ -1,4 +1,5 @@ process = new ProcessNumber; - $this->date = new ProcessDate; + $this->process = new ProcessNumber(); + $this->date = new ProcessDate(); } public function bnNum($number) @@ -22,26 +22,23 @@ public function bnNum($number) return $this->process->bnNum($number); } - public function bnWord($number) - { + { return $this->process->bnWord($number); } public function bnMoney($number) - { + { return $this->process->bnMoney($number); } public function bnCommaLakh($number) { - return $this->process->bnCommaLakh($number); + return $this->process->bnCommaLakh($number); } - public function bnMonth($number) + public function bnMonth($number) { return $this->date->bnMonth($number); - } - } diff --git a/src/NumberToBanglaServiceProvider.php b/src/NumberToBanglaServiceProvider.php index ad5a2e3..1aaa392 100644 --- a/src/NumberToBanglaServiceProvider.php +++ b/src/NumberToBanglaServiceProvider.php @@ -15,7 +15,7 @@ class NumberToBanglaServiceProvider extends ServiceProvider public function register() { $this->app->singleton(NumberToBangla::class); - + $this->app->alias(NumberToBangla::class, 'bangla-number'); } diff --git a/src/ProcessDate.php b/src/ProcessDate.php index 776a158..3a71f6d 100644 --- a/src/ProcessDate.php +++ b/src/ProcessDate.php @@ -7,48 +7,55 @@ class ProcessDate { - - protected $bn_month = array( - '1' => 'জানুয়ারি', - '2' => 'ফেব্রুয়ারি', - '3' => 'মার্চ', - '4' => 'এপ্রিল', - '5' => 'মে', - '6' => 'জুন', - '7' => 'জুলাই', - '8' => 'আগস্ট', - '9' => 'সেপ্টেম্বর', - '10' => 'অক্টোবর', - '11' => 'নভেম্বর', - '12' => 'ডিসেম্বর' - ); - - protected $numbers = array('০','১','২','৩','৪','৫','৬','৭','৮','৯'); - - - public function isValid($number) + protected $bn_month = [ + '1' => 'জানুয়ারি', + '2' => 'ফেব্রুয়ারি', + '3' => 'মার্চ', + '4' => 'এপ্রিল', + '5' => 'মে', + '6' => 'জুন', + '7' => 'জুলাই', + '8' => 'আগস্ট', + '9' => 'সেপ্টেম্বর', + '10' => 'অক্টোবর', + '11' => 'নভেম্বর', + '12' => 'ডিসেম্বর' + ]; + + protected $numbers = [ + '০', + '১', + '২', + '৩', + '৪', + '৫', + '৬', + '৭', + '৮', + '৯' + ]; + + + public function isValid($number) { - if(!is_numeric($number)){ + if (!is_numeric($number)) { throw InvalidNumber::message(); } - if($number > 999999999999999 || strpos($number, 'E') !== false){ + if ($number > 999999999999999 || strpos($number, 'E') !== false) { throw InvalidRange::message(); } } - public function bnMonth($number) + public function bnMonth($number) { $this->isValid($number); - if($number >= 1 && $number <= 12 ){ + if ($number >= 1 && $number <= 12) { return $this->bn_month[(int)$number]; - }else{ - throw InvalidRange::message(12); } - - } - -} \ No newline at end of file + throw InvalidRange::message(12); + } +} diff --git a/src/ProcessNumber.php b/src/ProcessNumber.php index 69332bb..50b43c2 100644 --- a/src/ProcessNumber.php +++ b/src/ProcessNumber.php @@ -7,23 +7,143 @@ class ProcessNumber { - - protected $words = array( - '', 'এক', 'দুই', 'তিন', 'চার', 'পাঁচ', 'ছয়', 'সাত', 'আট', 'নয়', 'দশ', 'এগারো', 'বারো', 'তেরো', 'চৌদ্দ', 'পনেরো', 'ষোল', 'সতেরো', 'আঠারো', 'উনিশ','বিশ','একুশ', 'বাইশ', 'তেইশ', 'চব্বিশ', 'পঁচিশ', 'ছাব্বিশ', 'সাতাশ', 'আঠাশ', 'ঊনত্রিশ', 'ত্রিশ', 'একত্রিশ', 'বত্রিশ', 'তেত্রিশ', 'চৌত্রিশ', 'পঁয়ত্রিশ', 'ছত্রিশ', 'সাঁইত্রিশ', 'আটত্রিশ', 'ঊনচল্লিশ','চল্লিশ','একচল্লিশ', 'বিয়াল্লিশ', 'তেতাল্লিশ', 'চুয়াল্লিশ', 'পঁয়তাল্লিশ', 'ছেচল্লিশ', 'সাতচল্লিশ', 'আটচল্লিশ', 'ঊনপঞ্চাশ', 'পঞ্চাশ', 'একান্ন','বাহান্ন', 'তিপ্পান্ন', 'চুয়ান্ন', 'পঞ্চান্ন', 'ছাপ্পান্ন', 'সাতান্ন', 'আটান্ন', 'ঊনষাট','ষাট','একষট্টি', 'বাষট্টি', 'তেষট্টি', 'চৌষট্টি', 'পঁয়ষট্টি', 'ছেষট্টি', 'সাতষট্টি', 'আটষট্টি', 'ঊনসত্তর', 'সত্তর', 'একাত্তর','বাহাত্তর', 'তিয়াত্তর', 'চুয়াত্তর', 'পঁচাত্তর', 'ছিয়াত্তর', 'সাতাত্তর', 'আটাত্তর', 'ঊনআশি','আশি','একাশি', 'বিরাশি', 'তিরাশি', 'চুরাশি','পঁচাশি', 'ছিয়াশি', 'সাতাশি', 'আটাশি', 'ঊননব্বই', 'নব্বই', 'একানব্বই','বিরানব্বই', 'তিরানব্বই', 'চুরানব্বই', 'পঁচানব্বই', 'ছিয়ানব্বই', 'সাতানব্বই', 'আটানব্বই', 'নিরানব্বই' - ); - - protected $bn_num = array('শূন্য', 'এক', 'দুই', 'তিন', 'চার', 'পাঁচ', 'ছয়', 'সাত', 'আট', 'নয়'); - - protected $numbers = array('০','১','২','৩','৪','৫','৬','৭','৮','৯'); - - - public function isValid($number) + protected $words = [ + '', + 'এক', + 'দুই', + 'তিন', + 'চার', + 'পাঁচ', + 'ছয়', + 'সাত', + 'আট', + 'নয়', + 'দশ', + 'এগারো', + 'বারো', + 'তেরো', + 'চৌদ্দ', + 'পনেরো', + 'ষোল', + 'সতেরো', + 'আঠারো', + 'উনিশ', + 'বিশ', + 'একুশ', + 'বাইশ', + 'তেইশ', + 'চব্বিশ', + 'পঁচিশ', + 'ছাব্বিশ', + 'সাতাশ', + 'আঠাশ', + 'ঊনত্রিশ', + 'ত্রিশ', + 'একত্রিশ', + 'বত্রিশ', + 'তেত্রিশ', + 'চৌত্রিশ', + 'পঁয়ত্রিশ', + 'ছত্রিশ', + 'সাঁইত্রিশ', + 'আটত্রিশ', + 'ঊনচল্লিশ', + 'চল্লিশ', + 'একচল্লিশ', + 'বিয়াল্লিশ', + 'তেতাল্লিশ', + 'চুয়াল্লিশ', + 'পঁয়তাল্লিশ', + 'ছেচল্লিশ', + 'সাতচল্লিশ', + 'আটচল্লিশ', + 'ঊনপঞ্চাশ', + 'পঞ্চাশ', + 'একান্ন', + 'বাহান্ন', + 'তিপ্পান্ন', + 'চুয়ান্ন', + 'পঞ্চান্ন', + 'ছাপ্পান্ন', + 'সাতান্ন', + 'আটান্ন', + 'ঊনষাট', + 'ষাট', + 'একষট্টি', + 'বাষট্টি', + 'তেষট্টি', + 'চৌষট্টি', + 'পঁয়ষট্টি', + 'ছেষট্টি', + 'সাতষট্টি', + 'আটষট্টি', + 'ঊনসত্তর', + 'সত্তর', + 'একাত্তর', + 'বাহাত্তর', + 'তিয়াত্তর', + 'চুয়াত্তর', + 'পঁচাত্তর', + 'ছিয়াত্তর', + 'সাতাত্তর', + 'আটাত্তর', + 'ঊনআশি', + 'আশি', + 'একাশি', + 'বিরাশি', + 'তিরাশি', + 'চুরাশি', + 'পঁচাশি', + 'ছিয়াশি', + 'সাতাশি', + 'আটাশি', + 'ঊননব্বই', + 'নব্বই', + 'একানব্বই', + 'বিরানব্বই', + 'তিরানব্বই', + 'চুরানব্বই', + 'পঁচানব্বই', + 'ছিয়ানব্বই', + 'সাতানব্বই', + 'আটানব্বই', + 'নিরানব্বই' + ]; + + protected $bn_num = [ + 'শূন্য', + 'এক', + 'দুই', + 'তিন', + 'চার', + 'পাঁচ', + 'ছয়', + 'সাত', + 'আট', + 'নয়' + ]; + + protected $numbers = [ + '০', + '১', + '২', + '৩', + '৪', + '৫', + '৬', + '৭', + '৮', + '৯' + ]; + + + public function isValid($number) { - if(!is_numeric($number)){ + if (!is_numeric($number)) { throw InvalidNumber::message(); } - if($number > 999999999999999 || strpos($number, 'E') !== false){ + if ($number > 999999999999999 || strpos($number, 'E') !== false) { throw InvalidRange::message(); } } @@ -32,118 +152,129 @@ public function bnNum($number) { $this->isValid($number); - return strtr($number,$this->numbers); + return strtr($number, $this->numbers); } - public function bnWord($number) + public function bnWord($number) { - $valid = $this->isValid($number); - - if($number == 0){ + + if ($number == 0) { return 'শূন্য'; } - if(is_float($number)){ - $decimal = explode(".", $number); - $text = $this->toWord($decimal[0]); - if(isset($decimal[1])){ - $text .= ' দশমিক '.$this->toDecimalWord((string)$decimal[1]); - } - return $text; - }else{ - return $this->toWord($number); + if (is_float($number)) { + return $this->convertFloatNumberToWord($number); } - + return $this->toWord($number); } - public function bnMoney($number) + public function bnMoney($number) { $this->isValid($number); - if($number == 0){ + if ($number == 0) { return 'শূন্য টাকা'; } - if(is_float($number)){ - $money = number_format((float)$number, 2, '.', ''); - $decimal = explode(".", $money); - $text = $this->toWord($decimal[0]).' টাকা '; - if(isset($decimal[1])){ - $text .= $this->words[(int)$decimal[1]].' পয়সা'; - } - return $text; - }else{ - return $this->toWord($number).' টাকা '; + if (is_float($number)) { + return $this->convertFloatNumberToMoneyFormat($number); } - + return $this->toWord($number) . ' টাকা '; } - protected function bnCommaLakh($number) + public function bnCommaLakh($number) { $this->isValid($number); $n = preg_replace("/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/i", "$1,", $number); - - return strtr($n,$this->numbers); - + + return strtr($n, $this->numbers); } - protected function toWord($num) + protected function toWord($num) { - $text = ''; - - $crore = (int) ($num/10000000); - if($crore != 0){ - if($crore > 99){ - $text .= $this->bnWord($crore).' কোটি '; - }else{ - $text .= $this->words[$crore].' কোটি '; + $crore = (int) ($num / 10000000); + if ($crore != 0) { + if ($crore > 99) { + $text .= $this->bnWord($crore) . ' কোটি '; + } else { + $text .= $this->words[$crore] . ' কোটি '; } } - - $crore_div = $num%10000000; + $crore_div = $num % 10000000; - $lakh = (int) ($crore_div/100000); - if($lakh > 0){ - $text .= $this->words[$lakh].' লক্ষ '; + $lakh = (int) ($crore_div / 100000); + if ($lakh > 0) { + $text .= $this->words[$lakh] . ' লক্ষ '; } - $lakh_div = $crore_div%100000; + $lakh_div = $crore_div % 100000; - $thousand = (int) ($lakh_div/1000); - if($thousand > 0){ - $text .= $this->words[$thousand].' হাজার '; + $thousand = (int) ($lakh_div / 1000); + if ($thousand > 0) { + $text .= $this->words[$thousand] . ' হাজার '; } - $thousand_div = $lakh_div%1000; + $thousand_div = $lakh_div % 1000; - $hundred = (int) ($thousand_div/100); - if($hundred > 0){ - $text .= $this->words[$hundred].' শত '; + $hundred = (int) ($thousand_div / 100); + if ($hundred > 0) { + $text .= $this->words[$hundred] . ' শত '; } - $hundred_div = (int) ($thousand_div%100); - if($hundred_div > 0){ + $hundred_div = (int) ($thousand_div % 100); + if ($hundred_div > 0) { $text .= $this->words[$hundred_div]; } return $text; - } - protected function toDecimalWord($num) + protected function toDecimalWord($num) { $text = ''; - $decimals = str_split($num); - foreach ($decimals as $key => $decimal) { - $text .= $this->bn_num[$decimal].' '; + $decimalParts = str_split($num); + foreach ($decimalParts as $key => $decimalPart) { + $text .= $this->bn_num[$decimalPart] . ' '; } + + return $text; + } + + /** + * Convert float number to text + * + */ + private function convertFloatNumberToWord($number) + { + $decimalPart = explode(".", $number); + $text = $this->toWord($decimalPart[0]); + if (isset($decimalPart[1])) { + $text .= ' দশমিক ' . $this->toDecimalWord((string)$decimalPart[1]); + } + + return $text; + } + + /** + * Convert float number to money format + * + */ + private function convertFloatNumberToMoneyFormat($number) + { + $money = number_format((float)$number, 2, '.', ''); + $decimalPart = explode(".", $money); + $text = $this->toWord($decimalPart[0]) . ' টাকা '; + if (isset($decimalPart[1])) { + $text .= $this->words[(int)$decimalPart[1]] . ' পয়সা'; + } + return $text; } -} \ No newline at end of file +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index 4ae02bc..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,21 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/tests/Feature/NumberTest.php b/tests/Feature/NumberTest.php new file mode 100644 index 0000000..b0fd82f --- /dev/null +++ b/tests/Feature/NumberTest.php @@ -0,0 +1,19 @@ +