├── bangla_faker.jpg ├── .styleci.yml ├── config └── config.php ├── CHANGELOG.md ├── .gitignore ├── Lib ├── Utils.php ├── Phone.php ├── Number.php ├── Company.php ├── Person.php ├── Color.php ├── Date.php ├── Lorem.php └── Address.php ├── src ├── Facade │ └── BanglaFaker.php ├── BanglaFaker.php ├── BanglaFakerServiceProvider.php └── BaseFaker.php ├── tests ├── Feature │ ├── FunctionTest.php │ ├── FacadeTest.php │ └── ObjectReferenceTest.php └── TestCase.php ├── .github ├── workflows │ ├── greetings.yml │ ├── versionTest.yml │ └── laravel.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── phpunit.xml ├── LICENSE.md ├── composer.json ├── CONTRIBUTING.md └── README.md /bangla_faker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tusharkhan/banglafaker/HEAD/bangla_faker.jpg -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | preset: laravel 2 | 3 | disabled: 4 | - single_class_element_per_statement 5 | -------------------------------------------------------------------------------- /config/config.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./src 18 | 19 | 20 | -------------------------------------------------------------------------------- /Lib/Company.php: -------------------------------------------------------------------------------- 1 | assertIsArray(BanglaFaker::words(6)); 18 | } 19 | 20 | 21 | public function test_paragraph() 22 | { 23 | $this->assertIsString(BanglaFaker::paragraph(80, false)); 24 | } 25 | 26 | public function test_date() 27 | { 28 | $this->assertEquals("১২-০৯-২০২১ ০০:০০:০০", BanglaFaker::banglaDate('12-09-2021')); 29 | } 30 | 31 | 32 | public function test_country() 33 | { 34 | $this->assertIsString(BanglaFaker::country()); 35 | } 36 | 37 | 38 | public function test_first_name() 39 | { 40 | $this->assertIsString(BanglaFaker::firstNameMale()); 41 | } 42 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Tushar Khan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /.github/workflows/versionTest.yml: -------------------------------------------------------------------------------- 1 | name: Laravel Package Tests 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | test: 11 | name: Test Laravel ${{ matrix.laravel }} on PHP ${{ matrix.php }} 12 | runs-on: ubuntu-latest 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | php: ['8.2', '8.3'] 17 | laravel: ['^11.0', '^12.0'] 18 | include: 19 | - laravel: '^11.0' 20 | stability: 'dev' 21 | - laravel: '^12.0' 22 | stability: 'dev' 23 | 24 | steps: 25 | - name: Checkout code 26 | uses: actions/checkout@v4 27 | 28 | - name: Setup PHP 29 | uses: shivammathur/setup-php@v2 30 | with: 31 | php-version: ${{ matrix.php }} 32 | extensions: mbstring, xml, ctype, fileinfo, dom, curl 33 | coverage: none 34 | 35 | - name: Install dependencies 36 | run: | 37 | composer require "laravel/framework:${{ matrix.laravel}}" --no-interaction --no-update 38 | composer update --prefer-dist --no-interaction --no-suggest 39 | 40 | - name: Execute tests 41 | run: composer test -------------------------------------------------------------------------------- /.github/workflows/laravel.yml: -------------------------------------------------------------------------------- 1 | name: Laravel Package Tests 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | test: 11 | name: Test Laravel ${{ matrix.laravel }} on PHP ${{ matrix.php }} 12 | runs-on: ubuntu-latest 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | php: ['8.2', '8.3'] 17 | laravel: ['^11.0', '^12.0'] 18 | include: 19 | - laravel: '^11.0' 20 | stability: 'dev' 21 | - laravel: '^12.0' 22 | stability: 'dev' 23 | 24 | steps: 25 | - name: Checkout code 26 | uses: actions/checkout@v4 27 | 28 | - name: Setup PHP 29 | uses: shivammathur/setup-php@v2 30 | with: 31 | php-version: ${{ matrix.php }} 32 | extensions: mbstring, xml, ctype, fileinfo, dom, curl 33 | coverage: none 34 | 35 | - name: Install dependencies 36 | run: | 37 | composer require "laravel/framework:${{ matrix.laravel}}" --no-interaction --no-update 38 | composer update --prefer-dist --no-interaction --no-suggest 39 | 40 | - name: Execute tests 41 | run: composer test 42 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tusharkhan/banglafaker", 3 | "description": "A Bangla tusharKhan/Faker Library for Laravel", 4 | "keywords": [ 5 | "tusharkhan", 6 | "banglafaker", 7 | "laravel-bangla-faker" 8 | ], 9 | "homepage": "https://github.com/tusharkhan/banglafaker", 10 | "license": "MIT", 11 | "type": "library", 12 | "authors": [ 13 | { 14 | "name": "Tushar Khan", 15 | "email": "tushar.khan0122@gmail.com", 16 | "role": "Developer" 17 | } 18 | ], 19 | "require": { 20 | "php": "^7.4|^8.0|^8.3", 21 | "illuminate/support": "^9.48|^10.0|^11.0|^12.0" 22 | }, 23 | "require-dev": { 24 | "orchestra/testbench": "^7.19|^8.0|^9.0", 25 | "phpunit/phpunit": "^9.5|^10.0" 26 | }, 27 | "autoload": { 28 | "psr-4": { 29 | "Tusharkhan\\BanglaFaker\\": "src", 30 | "Tusharkhan\\BanglaFaker\\Lib\\" : "Lib" 31 | } 32 | }, 33 | "autoload-dev": { 34 | "psr-4": { 35 | "TusharKhan\\BanglaFaker\\Tests\\": "tests" 36 | }, 37 | "classmap": [ 38 | "tests" 39 | ] 40 | }, 41 | "scripts": { 42 | "test": "vendor/bin/phpunit", 43 | "test-coverage": "vendor/bin/phpunit --coverage-html coverage" 44 | 45 | }, 46 | "config": { 47 | "sort-packages": true 48 | }, 49 | "extra": { 50 | "laravel": { 51 | "providers": [ 52 | "\\Tusharkhan\\BanglaFaker\\BanglaFakerServiceProvider" 53 | ], 54 | "aliases": { 55 | "Banglafaker": "\\Tusharkhan\\BanglaFaker\\BanglaFakerFacade" 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /tests/Feature/ObjectReferenceTest.php: -------------------------------------------------------------------------------- 1 | getBanglaFakerReference(); 18 | $this->assertIsArray($banglaFaker->paragraphs(70)); 19 | } 20 | 21 | 22 | 23 | public function test_sentence() 24 | { 25 | $banglaFaker = $this->getBanglaFakerReference(); 26 | 27 | $this->assertIsString($banglaFaker->sentence(2)); 28 | } 29 | 30 | 31 | public function test_postcode() 32 | { 33 | $banglaFaker = $this->getBanglaFakerReference(); 34 | 35 | $this->assertIsString($banglaFaker->postcode()); 36 | } 37 | 38 | 39 | public function test_bangla_date() 40 | { 41 | $banglaFaker = $this->getBanglaFakerReference(); 42 | $this->assertEquals("১২-০৯-২০২১ ০০:০০:০০", $banglaFaker->banglaDate('12-09-2021')); 43 | } 44 | 45 | 46 | public function test_sentences() 47 | { 48 | $faker = $this->getBanglaFakerReference(); 49 | 50 | $this->assertIsArray($faker->sentences(7)); 51 | } 52 | 53 | 54 | public function test_paragraphs() 55 | { 56 | $faker = $this->getBanglaFakerReference(); 57 | 58 | $this->assertIsArray($faker->paragraphs(9, false)); 59 | } 60 | 61 | 62 | private function getBanglaFakerReference(){ 63 | return new BanglaFaker(); 64 | } 65 | } -------------------------------------------------------------------------------- /src/BanglaFaker.php: -------------------------------------------------------------------------------- 1 | loadTranslationsFrom(__DIR__.'/../resources/lang', 'banglafaker'); 18 | // $this->loadViewsFrom(__DIR__.'/../resources/views', 'banglafaker'); 19 | // $this->loadMigrationsFrom(__DIR__.'/../database/migrations'); 20 | // $this->loadRoutesFrom(__DIR__.'/routes.php'); 21 | 22 | // if ($this->app->runningInConsole()) { 23 | // $this->publishes([ 24 | // __DIR__ . '/../config/config.php' => config_path('banglafaker.php'), 25 | // ], 'config'); 26 | 27 | // Publishing the views. 28 | /*$this->publishes([ 29 | __DIR__.'/../resources/views' => resource_path('views/vendor/banglafaker'), 30 | ], 'views');*/ 31 | 32 | // Publishing assets. 33 | /*$this->publishes([ 34 | __DIR__.'/../resources/assets' => public_path('vendor/banglafaker'), 35 | ], 'assets');*/ 36 | 37 | // Publishing the translation files. 38 | /*$this->publishes([ 39 | __DIR__.'/../resources/lang' => resource_path('lang/vendor/banglafaker'), 40 | ], 'lang');*/ 41 | 42 | // Registering package commands. 43 | // $this->commands([]); 44 | // } 45 | } 46 | 47 | /** 48 | * Register the application services. 49 | */ 50 | public function register() 51 | { 52 | // Automatically apply the package configuration 53 | // $this->mergeConfigFrom(__DIR__ . '/../tusharKhan/Faker/config/config.php', 'banglafaker'); 54 | 55 | // Register the main class to use with the facade 56 | $this->app->singleton('BanglaFaker', function () { 57 | return new BanglaFaker; 58 | }); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /Lib/Person.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'Sat','Sun','Mon','Tue','Wed','Thu','Fri' 19 | ], 20 | 'bn' => [ 21 | 'শনি', 'রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহস্পতি', 'শুক্র' 22 | ] 23 | ]; 24 | 25 | 26 | public const l = [ 27 | 'en' => [ 28 | 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' 29 | ], 30 | 'bn' => [ 31 | 'শনিবার', 'রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পতিবার', 'শুক্রবার' 32 | ] 33 | ]; 34 | 35 | 36 | public const F = [ 37 | 'en' => [ 38 | 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' 39 | ], 40 | 'bn' => [ 41 | 'জানুয়ারি', 'ফেব্রুয়ারি', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর' 42 | ] 43 | ]; 44 | 45 | 46 | 47 | public const M = [ 48 | 'en' => [ 49 | 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' 50 | ], 51 | 'bn' => [ 52 | 'জান', 'ফেব্রুয়ারি', 'মার', 'এপ্রিল', 'মে', 'জুন', 'জুল', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর' 53 | ] 54 | ]; 55 | 56 | 57 | public const a = [ 58 | 'en' => [ 59 | 'am', 'pm' 60 | ], 61 | 'bn' => [ 62 | 'পূর্বাহ্ণ', 'অপরাহ্ণ' 63 | ] 64 | ]; 65 | 66 | 67 | public const A = [ 68 | 'en' => [ 69 | 'am', 'pm' 70 | ], 71 | 'bn' => [ 72 | 'পূর্বাহ্ণ', 'অপরাহ্ণ' 73 | ] 74 | ]; 75 | 76 | 77 | public const OTHERS = [ 78 | 'en' => [0,1, 2, 3, 4, 5, 6, 7, 8, 9], 79 | 'bn' => ['০', '১', '২', '৩', '৪', '৫', '৬', '৭', '৮', '৯'] 80 | ]; 81 | 82 | protected static $search = []; 83 | protected static $replace = []; 84 | 85 | 86 | public static function banglaDate($date = null, $format = 'd-m-Y H:i:s') 87 | { 88 | if ( $date ) $date = Carbon::parse($date)->format($format); 89 | else $date = Carbon::now()->format($format); 90 | 91 | return static::parseDate($date, $format); 92 | } 93 | 94 | 95 | protected static function parseDate($date, $format) 96 | { 97 | $allConstants = static::getConstants(); 98 | $keys = array_keys($allConstants); 99 | 100 | $formatArray = array_unique(str_split($format)); 101 | 102 | foreach ( $formatArray as $letter ){ 103 | if ( preg_match('/^[a-zA-Z]+$/', $letter) ){ 104 | if( in_array($letter, $keys) ){ 105 | static::$search = array_merge_recursive(static::$search, $allConstants[$letter]['en']); 106 | static::$replace = array_merge_recursive(static::$replace, $allConstants[$letter]['bn']); 107 | } 108 | } 109 | } 110 | 111 | return Number::getBanglaNumber(str_replace(self::$search, self::$replace, $date)); 112 | 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /Lib/Lorem.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | # A Laravel Bangla Faker Generator followed by [PHP Faker](https://fakerphp.github.io/) 4 | 5 | [![Latest Version on Packagist](https://img.shields.io/packagist/v/tusharkhan/chatbot.svg?style=flat-square)](https://packagist.org/packages/tusharkhan/chatbot) 6 | [![Total Downloads](https://img.shields.io/github/downloads/tusharkhan/banglafaker/total)](https://packagist.org/packages/tusharkhan/banglafaker) 7 | ![Contributions](https://img.shields.io/github/contributors/tusharkhan/banglafaker) 8 | ![codesize](https://img.shields.io/github/languages/code-size/tusharkhan/banglafaker) 9 | ![license](https://img.shields.io/github/license/tusharkhan/banglafaker) 10 | ![php-version](https://img.shields.io/packagist/php-v/tusharkhan/banglafaker) 11 | 12 | 13 | This is a Bangla Faker generator for [Laravel](https://laravel.com/) projects . This is my first package , so if you found any bug or any issue . Please let me know . So that we can debug together. 14 | 15 | This package is for Laravel Version >= 9.x 16 | 17 | ## Installation 18 | 19 | You can install the package via composer: 20 | 21 | ```bash 22 | composer require tusharkhan/banglafaker 23 | ``` 24 | 25 | ## Usage 26 | 27 | 28 | Use Facade 29 | ```php 30 | // Address 31 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::city() //city name 32 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::state() //state 33 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::street() //street 34 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::address() //address 35 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::country() //country 36 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::postcode() //postcode 37 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::cityPrefix() //cityPrefix 38 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::streetName() //streetName 39 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::citySuffix() //citySuffix 40 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::streetSuffix() //streetSuffix 41 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::streetNumber() //streetNumber 42 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::streetAddress() //streetAddress 43 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::banglaStreetName() //banglaStreetName 44 | 45 | 46 | 47 | // Color Names 48 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::colorName() //colorName 49 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::safeColorName() //safeColorName 50 | 51 | 52 | // Company 53 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::companyType() //companyType 54 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::companyName() //companyName 55 | 56 | // Date 57 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::banglaDate($date = now(), $format = 'd-m-Y H:i:s') //banglaDate 58 | 59 | // Bangla Lorem Ipsum 60 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::word() //word 61 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::text($maxNbChars = 200) //text 62 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::words($nb = 3, $asText = false) //words 63 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::sentence($nbWords = 6, $variableNbWords = true) //sentence 64 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::sentences($nb = 3, $asText = false) //sentences 65 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::paragraphs($nb = 3, $asText = false) //paragraphs 66 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::paragraph($nbSentences = 3, $variableNbSentences = true) //paragraph 67 | 68 | // Numbers 69 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::getBanglaNumber($number) //getBanglaNumber 70 | 71 | // Person 72 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::maleName() // maleName 73 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::lastName() // last name 74 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::titleMale() // titleMale 75 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::femaleName() // femaleName 76 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::titleFemale() // titleFemale 77 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::firstNameMale() // male first name 78 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::firstNameFemale() // firstNameFemale 79 | 80 | // Phone 81 | \Tusharkhan\BanglaFaker\Facade\BanglaFaker::phone() // Phone 82 | ``` 83 | 84 | 85 | 86 | All Methods with object reference 87 | ```php 88 | use Tusharkhan\BanglaFaker\BanglaFaker; 89 | 90 | $banglaFaker = new BanglaFaker(); 91 | 92 | // Address 93 | $banglaFaker->city() //city name 94 | $banglaFaker->state() //state 95 | $banglaFaker->street() //street 96 | $banglaFaker->address() //address 97 | $banglaFaker->country() //country 98 | $banglaFaker->postcode() //postcode 99 | $banglaFaker->cityPrefix() //cityPrefix 100 | $banglaFaker->streetName() //streetName 101 | $banglaFaker->citySuffix() //citySuffix 102 | $banglaFaker->streetSuffix() //streetSuffix 103 | $banglaFaker->streetNumber() //streetNumber 104 | $banglaFaker->streetAddress() //streetAddress 105 | $banglaFaker->banglaStreetName() //banglaStreetName 106 | 107 | 108 | 109 | // Color Names 110 | $banglaFaker->colorName() //colorName 111 | $banglaFaker->safeColorName() //safeColorName 112 | 113 | 114 | // Company 115 | $banglaFaker->companyType() //companyType 116 | $banglaFaker->companyName() //companyName 117 | 118 | // Date 119 | $banglaFaker->banglaDate($date = now(), $format = 'd-m-Y H:i:s') //banglaDate 120 | 121 | // Bangla Lorem Ipsum 122 | $banglaFaker->word() //word 123 | $banglaFaker->text($maxNbChars = 200) //text 124 | $banglaFaker->words($nb = 3, $asText = false) //words 125 | $banglaFaker->sentences($nb = 3, $asText = false) //sentences 126 | $banglaFaker->paragraphs($nb = 3, $asText = false) //paragraphs 127 | $banglaFaker->sentence($nbWords = 6, $variableNbWords = true) //sentence 128 | $banglaFaker->paragraph($nbSentences = 3, $variableNbSentences = true) //paragraph 129 | 130 | // Numbers 131 | $banglaFaker->getBanglaNumber($number) //getBanglaNumber 132 | 133 | // Person 134 | $banglaFaker->maleName() // maleName 135 | $banglaFaker->lastName() // last name 136 | $banglaFaker->titleMale() // titleMale 137 | $banglaFaker->femaleName() // femaleName 138 | $banglaFaker->titleFemale() // titleFemale 139 | $banglaFaker->firstNameMale() // male first name 140 | $banglaFaker->firstNameFemale() // firstNameFemale 141 | 142 | // Phone 143 | $banglaFaker->phone() // Phone 144 | ``` 145 | 146 | ### Testing 147 | 148 | ```bash 149 | composer test 150 | ``` 151 | 152 | ### Changelog 153 | 154 | Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. 155 | 156 | ## Contributing 157 | 158 | Please see [CONTRIBUTING](CONTRIBUTING.md) for details. 159 | 160 | ### Security 161 | 162 | If you discover any security related issues, please email tushar.khan0122@gmail.com instead of using the issue tracker. 163 | 164 | ## Credits 165 | 166 | - [Tushar Khan](https://github.com/tusharkhan) 167 | - [All Contributors](../../contributors) 168 | 169 | ## License 170 | 171 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information. 172 | 173 | -------------------------------------------------------------------------------- /Lib/Address.php: -------------------------------------------------------------------------------- 1 | = $except) { 33 | ++$result; 34 | } 35 | 36 | return $result; 37 | } 38 | 39 | 40 | public static function randomNumber($nbDigits = null, $strict = false) 41 | { 42 | if (!is_bool($strict)) { 43 | throw new \InvalidArgumentException('randomNumber() generates numbers of fixed width. To generate numbers between two boundaries, use numberBetween() instead.'); 44 | } 45 | 46 | if (null === $nbDigits) { 47 | $nbDigits = static::randomDigitNotNull(); 48 | } 49 | $max = 10 ** $nbDigits - 1; 50 | 51 | if ($max > mt_getrandmax()) { 52 | throw new \InvalidArgumentException('randomNumber() can only generate numbers up to mt_getrandmax()'); 53 | } 54 | 55 | if ($strict) { 56 | return mt_rand(10 ** ($nbDigits - 1), $max); 57 | } 58 | 59 | return mt_rand(0, $max); 60 | } 61 | 62 | 63 | public static function randomFloat($nbMaxDecimals = null, $min = 0, $max = null) 64 | { 65 | if (null === $nbMaxDecimals) { 66 | $nbMaxDecimals = static::randomDigit(); 67 | } 68 | 69 | if (null === $max) { 70 | $max = static::randomNumber(); 71 | 72 | if ($min > $max) { 73 | $max = $min; 74 | } 75 | } 76 | 77 | if ($min > $max) { 78 | $tmp = $min; 79 | $min = $max; 80 | $max = $tmp; 81 | } 82 | 83 | return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $nbMaxDecimals); 84 | } 85 | 86 | 87 | public static function numberBetween($int1 = 0, $int2 = 2147483647) 88 | { 89 | $min = $int1 < $int2 ? $int1 : $int2; 90 | $max = $int1 < $int2 ? $int2 : $int1; 91 | 92 | return mt_rand($min, $max); 93 | } 94 | 95 | 96 | public static function passthrough($value) 97 | { 98 | return $value; 99 | } 100 | 101 | 102 | public static function randomLetter() 103 | { 104 | return chr(mt_rand(97, 122)); 105 | } 106 | 107 | 108 | public static function randomAscii() 109 | { 110 | return chr(mt_rand(33, 126)); 111 | } 112 | 113 | 114 | public static function randomElements($array = ['a', 'b', 'c'], $count = 1, $allowDuplicates = false) 115 | { 116 | $traversables = []; 117 | 118 | if ($array instanceof \Traversable) { 119 | foreach ($array as $element) { 120 | $traversables[] = $element; 121 | } 122 | } 123 | 124 | $arr = count($traversables) ? $traversables : $array; 125 | 126 | $allKeys = array_keys($arr); 127 | $numKeys = count($allKeys); 128 | 129 | if (!$allowDuplicates && $numKeys < $count) { 130 | throw new \LengthException(sprintf('Cannot get %d elements, only %d in array', $count, $numKeys)); 131 | } 132 | 133 | $highKey = $numKeys - 1; 134 | $keys = $elements = []; 135 | $numElements = 0; 136 | 137 | while ($numElements < $count) { 138 | $num = mt_rand(0, $highKey); 139 | 140 | if (!$allowDuplicates) { 141 | if (isset($keys[$num])) { 142 | continue; 143 | } 144 | $keys[$num] = true; 145 | } 146 | 147 | $elements[] = $arr[$allKeys[$num]]; 148 | ++$numElements; 149 | } 150 | 151 | return $elements; 152 | } 153 | 154 | 155 | public static function randomElement($array = ['a', 'b', 'c']) 156 | { 157 | if (!$array || ($array instanceof \Traversable && !count($array))) { 158 | return null; 159 | } 160 | $elements = static::randomElements($array, 1); 161 | 162 | return $elements[0]; 163 | } 164 | 165 | /** 166 | * Returns a random key from a passed associative array 167 | * 168 | * @param array $array 169 | * 170 | * @return int|string|null 171 | */ 172 | public static function randomKey($array = []) 173 | { 174 | if (!$array) { 175 | return null; 176 | } 177 | $keys = array_keys($array); 178 | 179 | return $keys[mt_rand(0, count($keys) - 1)]; 180 | } 181 | 182 | 183 | public static function shuffle($arg = '') 184 | { 185 | if (is_array($arg)) { 186 | return static::shuffleArray($arg); 187 | } 188 | 189 | if (is_string($arg)) { 190 | return static::shuffleString($arg); 191 | } 192 | 193 | throw new \InvalidArgumentException('shuffle() only supports strings or arrays'); 194 | } 195 | 196 | 197 | public static function shuffleArray($array = []) 198 | { 199 | $shuffledArray = []; 200 | $i = 0; 201 | reset($array); 202 | 203 | foreach ($array as $key => $value) { 204 | if ($i == 0) { 205 | $j = 0; 206 | } else { 207 | $j = mt_rand(0, $i); 208 | } 209 | 210 | if ($j == $i) { 211 | $shuffledArray[] = $value; 212 | } else { 213 | $shuffledArray[] = $shuffledArray[$j]; 214 | $shuffledArray[$j] = $value; 215 | } 216 | ++$i; 217 | } 218 | 219 | return $shuffledArray; 220 | } 221 | 222 | 223 | public static function shuffleString($string = '', $encoding = 'UTF-8') 224 | { 225 | if (function_exists('mb_strlen')) { 226 | // UTF8-safe str_split() 227 | $array = []; 228 | $strlen = mb_strlen($string, $encoding); 229 | 230 | for ($i = 0; $i < $strlen; ++$i) { 231 | $array[] = mb_substr($string, $i, 1, $encoding); 232 | } 233 | } else { 234 | $array = str_split($string, 1); 235 | } 236 | 237 | return implode('', static::shuffleArray($array)); 238 | } 239 | 240 | private static function replaceWildcard($string, $wildcard = '#', $callback = 'static::randomDigit') 241 | { 242 | if (($pos = strpos($string, $wildcard)) === false) { 243 | return $string; 244 | } 245 | 246 | for ($i = $pos, $last = strrpos($string, $wildcard, $pos) + 1; $i < $last; ++$i) { 247 | if ($string[$i] === $wildcard) { 248 | $string[$i] = call_user_func($callback); 249 | } 250 | } 251 | 252 | return $string; 253 | } 254 | 255 | 256 | public static function numerify($string = '###') 257 | { 258 | // instead of using randomDigit() several times, which is slow, 259 | // count the number of hashes and generate once a large number 260 | $toReplace = []; 261 | 262 | if (($pos = strpos($string, '#')) !== false) { 263 | for ($i = $pos, $last = strrpos($string, '#', $pos) + 1; $i < $last; ++$i) { 264 | if ($string[$i] === '#') { 265 | $toReplace[] = $i; 266 | } 267 | } 268 | } 269 | 270 | if ($nbReplacements = count($toReplace)) { 271 | $maxAtOnce = strlen((string) mt_getrandmax()) - 1; 272 | $numbers = ''; 273 | $i = 0; 274 | 275 | while ($i < $nbReplacements) { 276 | $size = min($nbReplacements - $i, $maxAtOnce); 277 | $numbers .= str_pad(static::randomNumber($size), $size, '0', STR_PAD_LEFT); 278 | $i += $size; 279 | } 280 | 281 | for ($i = 0; $i < $nbReplacements; ++$i) { 282 | $string[$toReplace[$i]] = $numbers[$i]; 283 | } 284 | } 285 | $string = self::replaceWildcard($string, '%', 'static::randomDigitNotNull'); 286 | 287 | return $string; 288 | } 289 | 290 | /** 291 | * Replaces all question mark ('?') occurrences with a random letter 292 | * 293 | * @param string $string String that needs to bet parsed 294 | * 295 | * @return string 296 | */ 297 | public static function lexify($string = '????') 298 | { 299 | return self::replaceWildcard($string, '?', 'static::randomLetter'); 300 | } 301 | 302 | 303 | public static function bothify($string = '## ??') 304 | { 305 | $string = self::replaceWildcard($string, '*', static function () { 306 | return mt_rand(0, 1) ? '#' : '?'; 307 | }); 308 | 309 | return static::lexify(static::numerify($string)); 310 | } 311 | 312 | 313 | public static function asciify($string = '****') 314 | { 315 | return preg_replace_callback('/\*/u', 'static::randomAscii', $string); 316 | } 317 | 318 | 319 | public static function regexify($regex = '') 320 | { 321 | // ditch the anchors 322 | $regex = preg_replace('/^\/?\^?/', '', $regex); 323 | $regex = preg_replace('/\$?\/?$/', '', $regex); 324 | // All {2} become {2,2} 325 | $regex = preg_replace('/\{(\d+)\}/', '{\1,\1}', $regex); 326 | // Single-letter quantifiers (?, *, +) become bracket quantifiers ({0,1}, {0,rand}, {1, rand}) 327 | $regex = preg_replace('/(?\w+?)\s?}}/u', $format, $matches) ){ 391 | if ( method_exists(new static, $matches[1]) ){ 392 | $callFunction = forward_static_call(array(get_called_class(), $matches[1])); 393 | 394 | $mainString = preg_replace($matches[0], $callFunction, $mainString); 395 | } 396 | } else if ( preg_match('/[#-]+/', $format, $matches) ){ 397 | $strArray = str_split($mainString); 398 | 399 | foreach ($strArray as $ins => $str){ 400 | if ( $str == '#' ) $strArray[$ins] = Number::getBanglaNumber(self::numberBetween(0, 9)); 401 | else continue; 402 | } 403 | 404 | $mainString = implode('', $strArray); 405 | } 406 | } 407 | 408 | return str_replace(['{', '}'], '', $mainString); 409 | } 410 | 411 | public static function getConstants() 412 | { 413 | $oClass = new \ReflectionClass(get_called_class()); 414 | return $oClass->getConstants(); 415 | } 416 | 417 | 418 | public static function removeEmptyArray($array) 419 | { 420 | return array_filter( 421 | array_map( 422 | function($v){ 423 | if( is_array($v) > 0 ) return array_filter($v,'strlen'); 424 | else return $v; 425 | },$array 426 | ) 427 | ); 428 | } 429 | 430 | } 431 | --------------------------------------------------------------------------------