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);