From 86e8ad2c083fdfb2c44904a00eca5f7ee8d25be7 Mon Sep 17 00:00:00 2001 From: John Was <janek.jan@gmail.com> Date: Tue, 11 Mar 2014 00:54:15 +0100 Subject: [PATCH 1/2] add ean barcode provider --- src/Faker/Factory.php | 2 +- src/Faker/Generator.php | 3 +++ src/Faker/Provider/Barcode.php | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/Faker/Provider/Barcode.php diff --git a/src/Faker/Factory.php b/src/Faker/Factory.php index 53b82260..09e440c3 100644 --- a/src/Faker/Factory.php +++ b/src/Faker/Factory.php @@ -6,7 +6,7 @@ class Factory { const DEFAULT_LOCALE = 'en_US'; - protected static $defaultProviders = array('Address', 'Color', 'Company', 'DateTime', 'File', 'Image', 'Internet', 'Lorem', 'Miscellaneous', 'Payment', 'Person', 'PhoneNumber', 'Text', 'UserAgent', 'Uuid'); + protected static $defaultProviders = array('Address', 'Barcode', 'Color', 'Company', 'DateTime', 'File', 'Image', 'Internet', 'Lorem', 'Miscellaneous', 'Payment', 'Person', 'PhoneNumber', 'Text', 'UserAgent', 'Uuid'); public static function create($locale = self::DEFAULT_LOCALE) { diff --git a/src/Faker/Generator.php b/src/Faker/Generator.php index 9ca58a03..a37481b7 100644 --- a/src/Faker/Generator.php +++ b/src/Faker/Generator.php @@ -19,6 +19,9 @@ namespace Faker; * @property float latitude * @property float longitude * + * @property string ean13 + * @property string ean8 + * * @property string phoneNumber * * @property string company diff --git a/src/Faker/Provider/Barcode.php b/src/Faker/Provider/Barcode.php new file mode 100644 index 00000000..105fcad2 --- /dev/null +++ b/src/Faker/Provider/Barcode.php @@ -0,0 +1,37 @@ +<?php + +namespace Faker\Provider; + +/** + * @see http://en.wikipedia.org/wiki/EAN-13 + */ +class Barcode extends \Faker\Provider\Base +{ + private function ean($length=13) + { + $code = array(); + for($i = 0; $i < $length - 1; $i++) { + $code[] = static::randomDigit(); + } + + $sequence = $length == 8 ? array(3, 1) : array(1, 3); + + $sums = 0; + foreach($code as $n => $digit) { + $sums += $digit * $sequence[$n % 2]; + } + + $checksum = (10 - $sums % 10) % 10; + return implode('', $code) . $checksum; + } + + public function ean13() + { + return $this->ean(13); + } + + public function ean8() + { + return $this->ean(8); + } +} From dd9ba3eb542eb98d69d03faa33081604d905d674 Mon Sep 17 00:00:00 2001 From: John Was <janek.jan@gmail.com> Date: Tue, 11 Mar 2014 16:27:17 +0100 Subject: [PATCH 2/2] add phpdoc comments and updated readme.md --- readme.md | 5 +++++ src/Faker/Provider/Barcode.php | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/readme.md b/readme.md index 1c81a696..8a479054 100644 --- a/readme.md +++ b/readme.md @@ -226,6 +226,11 @@ Each of the generator properties (like `name`, `address`, and `lorem`) are calle imageUrl($width, $height) // 'http://lorempixel.com/800/600/' imageUrl($width, $height, $category) // 'http://lorempixel.com/800/600/person/' +### `Faker\Provider\Barcode` + + ean13 // '4006381333931' + ean8 // '73513537' + ## Unique and Optional modifiers Faker provides two special providers, `unique()` and `optional()`, to be called before any provider. `optional()` can be useful for seeding non-required fields, like a mobile telephone number ; `unique()` is required to populate fields that cannot accept twice the same value, like primary identifiers. diff --git a/src/Faker/Provider/Barcode.php b/src/Faker/Provider/Barcode.php index 105fcad2..c5d88000 100644 --- a/src/Faker/Provider/Barcode.php +++ b/src/Faker/Provider/Barcode.php @@ -25,11 +25,21 @@ class Barcode extends \Faker\Provider\Base return implode('', $code) . $checksum; } + /** + * Get a random EAN13 barcode. + * @return string + * @example '4006381333931' + */ public function ean13() { return $this->ean(13); } + /** + * Get a random EAN8 barcode. + * @return string + * @example '73513537' + */ public function ean8() { return $this->ean(8);