Skip to content
This repository has been archived by the owner on Dec 11, 2020. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #763 from mikk150/master
add DNI generator to spanis person
  • Loading branch information
fzaninotto committed Feb 23, 2016
2 parents e0ee315 + 2b01252 commit 61cb184
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/Faker/Provider/es_ES/Person.php
Expand Up @@ -4,6 +4,8 @@

class Person extends \Faker\Provider\Person
{
private static $crcMap=array('T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E', 'T');

protected static $maleNameFormats = array(
'{{firstNameMale}} {{lastName}}',
'{{firstNameMale}} {{lastName}}',
Expand Down Expand Up @@ -68,4 +70,12 @@ public static function suffix()
{
return static::randomElement(static::$suffix);
}

public static function dni()
{
$number=static::numerify('########');

$letter=self::$crcMap[$number%23];
return $number.$letter;
}
}
38 changes: 38 additions & 0 deletions test/Faker/Provider/es_ES/PersonTest.php
@@ -0,0 +1,38 @@
<?php

namespace Faker\Test\Provider\es_ES;

use Faker\Generator;
use Faker\Provider\es_ES\Person;

class PersonTest extends \PHPUnit_Framework_TestCase
{
public function setUp()
{
$faker = new Generator();
$faker->seed(1);
$faker->addProvider(new Person($faker));
$this->faker = $faker;
}

public function testDNI()
{
$dni = $this->faker->dni;
$this->assertTrue($this->isValidDNI($dni));
}

// validation taken from http://kiwwito.com/php-function-for-spanish-dni-nie-validation/
public function isValidDNI($string)
{
if (strlen($string) != 9 ||
preg_match('/^[XYZ]?([0-9]{7,8})([A-Z])$/i', $string, $matches) !== 1) {
return false;
}

$map = 'TRWAGMYFPDXBNJZSQVHLCKE';

list(, $number, $letter) = $matches;

return strtoupper($letter) === $map[((int) $number) % 23];
}
}

0 comments on commit 61cb184

Please sign in to comment.