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

Commit d082b5f

Browse files
committed
Merge pull request #316 from ulrikjohansson/sv_SE
Add Swedish locale
2 parents 41fd7ff + 7ab37ba commit d082b5f

File tree

6 files changed

+459
-0
lines changed

6 files changed

+459
-0
lines changed

readme.md

+12
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,18 @@ echo $faker->tollFreeNumber; // "0800 123 456"
856856
echo $faker->areaCode; // "03"
857857
```
858858

859+
### `Faker\Provider\sv_SE\Person`
860+
```php
861+
<?php
862+
863+
//Generates a valid Swedish personal identity number (in Swedish - Personnummer)
864+
echo $faker->personalIdentityNumber() // '950910-0799'
865+
866+
//Since the numbers are different for male and female persons, optionally you can specify gender.
867+
echo $faker->personalIdentityNumber('female') // '950910-0781'
868+
869+
```
870+
859871
## License
860872

861873
Faker is released under the MIT Licence. See the bundled LICENSE file for details.

src/Faker/Provider/sv_SE/Address.php

+150
Large diffs are not rendered by default.

src/Faker/Provider/sv_SE/Company.php

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Faker\Provider\sv_SE;
4+
5+
class Company extends \Faker\Provider\Company
6+
{
7+
protected static $formats = array(
8+
'{{lastName}} {{companySuffix}}',
9+
'{{lastName}} {{companySuffix}}',
10+
'{{lastName}} {{companySuffix}}',
11+
'{{firstName}} {{lastName}} {{companySuffix}}',
12+
'{{lastName}} & {{lastName}} {{companySuffix}}',
13+
'{{lastName}} & {{lastName}}',
14+
'{{lastName}} och {{lastName}}',
15+
'{{lastName}} och {{lastName}} {{companySuffix}}'
16+
);
17+
18+
protected static $companySuffix = array('AB', 'HB');
19+
}

src/Faker/Provider/sv_SE/Person.php

+174
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
<?php
2+
3+
namespace Faker\Provider\sv_SE;
4+
5+
class Person extends \Faker\Provider\Person
6+
{
7+
protected static $formats = array(
8+
'{{firstName}} {{lastName}}',
9+
'{{firstName}} {{lastName}}',
10+
'{{firstName}} {{lastName}}',
11+
'{{firstName}} {{lastName}}',
12+
'{{firstName}} {{lastName}}',
13+
'{{firstName}} {{firstName}} {{lastName}}',
14+
'{{firstName}} {{firstName}} {{lastName}}',
15+
'{{firstName}} {{firstName}} {{lastName}}',
16+
'{{firstName}} {{lastName}} {{lastName}}',
17+
'{{firstName}} {{lastName}}-{{lastName}}',
18+
'{{firstName}} {{firstName}} {{lastName}}-{{lastName}}',
19+
);
20+
21+
/**
22+
* @var array Swedish female first names
23+
* @link http://spraakbanken.gu.se/statistik/lbfnamnalf.phtml
24+
*/
25+
protected static $firstNameFemale = array(
26+
27+
'Ada', 'Adela', 'Adele', 'Adéle', 'Adelia', 'Adina', 'Adolfina', 'Agda', 'Agnes', 'Agneta', 'Aina', 'Aino', 'Albertina', 'Alexandra', 'Alfhild', 'Alfrida', 'Alice', 'Alida', 'Ally', 'Alma', 'Alva', 'Amalia', 'Amanda', 'Andrea', 'Anette', 'Angela', 'Anita', 'Anja', 'Ann', 'Anna', 'Anna-Carin', 'Anna-Greta', 'Anna-Karin', 'Anna-Lena', 'Anna-Lisa', 'Anna-Maria', 'Anna-Stina', 'Anne', 'Anneli', 'Annelie', 'Annette', 'Anne-Charlotte', 'Anne-Marie', 'Anni', 'Annica', 'Annie', 'Annika', 'Annikki', 'Anny', 'Ann-Britt', 'Ann-Charlott', 'Ann-Charlotte', 'Ann-Christin', 'Ann-Christine', 'Ann-Katrin', 'Ann-Kristin', 'Ann-Louise', 'Ann-Margret', 'Ann-Mari', 'Ann-Marie', 'Ann-Sofi', 'Ann-Sofie', 'Antonia', 'Arvida', 'Asta', 'Astrid', 'Augusta', 'Aurora', 'Axelia', 'Axelina',
28+
'Barbro', 'Beata', 'Beatrice', 'Beda', 'Berit', 'Bernhardina', 'Berta', 'Betty', 'Birgit', 'Birgitta', 'Blenda', 'Bodil', 'Boel', 'Borghild', 'Brita', 'Britt', 'Britta', 'Britt-Inger', 'Britt-Louise', 'Britt-Mari', 'Britt-Marie',
29+
'Camilla', 'Carin', 'Carina', 'Carita', 'Carola', 'Carolina', 'Caroline', 'Catarina', 'Catharina', 'Cathrine', 'Catrin', 'Cecilia', 'Charlott', 'Charlotta', 'Charlotte', 'Christel', 'Christin', 'Christina', 'Christine', 'Clara', 'Clary', 'Constance', 'Cristina',
30+
'Daga', 'Dagmar', 'Dagny', 'Daisy', 'Davida', 'Desideria', 'Desirée', 'Diana', 'Disa', 'Dora', 'Doris', 'Dorotea',
31+
'Ebba', 'Edit', 'Edith', 'Edla', 'Eira', 'Eivor', 'Ejvor', 'Elaine', 'Eleonor', 'Eleonora', 'Elfrida', 'Elida', 'Elin', 'Elina', 'Elinor', 'Elisabet', 'Elisabeth', 'Elise', 'Ella', 'Ellen', 'Ellinor', 'Elly', 'Elma', 'Elna', 'Elsa', 'Else', 'Else-Marie', 'Elsi', 'Elsie', 'Elsy', 'Elvi', 'Elvira', 'Elvy', 'Emelia', 'Emerentia', 'Emilia', 'Emma', 'Emmy', 'Erika', 'Erna', 'Ester', 'Estrid', 'Ethel', 'Eufemia', 'Eugenia', 'Eva', 'Eva-Britt', 'Eva-Lena', 'Eva-Lotta', 'Eva-Marie', 'Evelina', 'Evelyn', 'Evy', 'Ewa',
32+
'Fanny', 'Florence', 'Fredrika', 'Frida', 'Frideborg',
33+
'Gabriella', 'Gerd', 'Gerda', 'Gertie', 'Gertrud', 'Gisela', 'Greta', 'Gudrun', 'Gull', 'Gullan', 'Gullbritt', 'Gulli', 'Gullvi', 'Gully', 'Gull-Britt', 'Gun', 'Gunborg', 'Gunbritt', 'Gunda', 'Gunhild', 'Gunilla', 'Gunn', 'Gunnel', 'Gunni', 'Gunvor', 'Gun-Britt', 'Gurli', 'Gustava', 'Gärd', 'Görel', 'Göta',
34+
'Hanna', 'Harriet', 'Hedvig', 'Helen', 'Helén', 'Helena', 'Helene', 'Heléne', 'Helfrid', 'Helga', 'Helmi', 'Helny', 'Henny', 'Henrietta', 'Henriette', 'Herta', 'Hilda', 'Hildegard', 'Hildur', 'Hillevi', 'Hilma', 'Hjördis', 'Hulda',
35+
'Ida', 'Ines', 'Inez', 'Inga', 'Ingalill', 'Inga-Britt', 'Inga-Lena', 'Inga-Lill', 'Inga-Lisa', 'Inga-Maj', 'Ingbritt', 'Ingeborg', 'Ingegerd', 'Ingegärd', 'Ingela', 'Inger', 'Ingrid', 'Ingvor', 'Ing-Britt', 'Ing-Mari', 'Ing-Marie', 'Iréne', 'Irene', 'Iris', 'Irma', 'Isabella',
36+
'Jane', 'Janet', 'Jeanette', 'Jenny', 'Jessica', 'Johanna', 'Josefina', 'Judit', 'Judith', 'Julia', 'Juliana', 'Justina',
37+
'Kaarina', 'Kajsa', 'Karin', 'Karina', 'Karla', 'Karola', 'Karolina', 'Katarina', 'Katharina', 'Katrin', 'Katrina', 'Kersti', 'Kerstin', 'Klara', 'Konstantia', 'Kornelia', 'Kristin', 'Kristina', 'Kristine',
38+
'Laila', 'Laura', 'Leila', 'Lena', 'Leontina', 'Liisa', 'Lilian', 'Lill', 'Lillemor', 'Lillian', 'Lilly', 'Linda', 'Linnéa', 'Linnea', 'Lisa', 'Lisbet', 'Lisbeth', 'Liselott', 'Liselotte', 'Lise-Lott', 'Lise-Lotte', 'Lizzie', 'Lola', 'Louise', 'Lovisa', 'Lucia', 'Lydia',
39+
'Madeleine', 'Madelene', 'Magda', 'Magdalena', 'Magnhild', 'Maj', 'Maja', 'Majbritt', 'Majken', 'Majlis', 'Majvor', 'Maj-Britt', 'Maj-Lis', 'Malin', 'Malvina', 'Margaret', 'Margareta', 'Margareth', 'Margaretha', 'Margit', 'Margita', 'Margot', 'Margret', 'Margreta', 'Mari', 'Maria', 'Mariana', 'Mariann', 'Marianne', 'Marie', 'Mariette', 'Marie-Louise', 'Marika', 'Marina', 'Marion', 'Marit', 'Marita', 'Mari-Ann', 'Marja', 'Marjatta', 'Marlene', 'Marta', 'Martha', 'Martina', 'Mary', 'Mathilda', 'Matilda', 'Maud', 'May', 'Mia', 'Mildred', 'Mimmi', 'Mirjam', 'Mona', 'Monica', 'Monika', 'Märit', 'Märta', 'Märtha',
40+
'Naemi', 'Naima', 'Nancy', 'Nanna', 'Nanny', 'Natalia', 'Nelly', 'Nina', 'Nora',
41+
'Olga', 'Olivia', 'Ottilia',
42+
'Paula', 'Paulina', 'Pauline', 'Pernilla', 'Petra', 'Petronella', 'Pia',
43+
'Ragna', 'Ragnhild', 'Rakel', 'Rebecka', 'Regina', 'Renée', 'Rigmor', 'Rita', 'Rosa', 'Rose', 'Rose-Marie', 'Rosita', 'Ros-Mari', 'Ros-Marie', 'Runa', 'Rut', 'Ruth',
44+
'Sabina', 'Saga', 'Sally', 'Sara', 'Selma', 'Serafia', 'Sibylla', 'Sigbritt', 'Signe', 'Signhild', 'Sigrid', 'Siri', 'Siv', 'Sofi', 'Sofia', 'Sofie', 'Solbritt', 'Solveig', 'Solvig', 'Sonja', 'Stina', 'Susann', 'Susanna', 'Susanne', 'Suzanne', 'Svea', 'Sylvia', 'Synnöve', 'Syster',
45+
'Tea', 'Tekla', 'Terese', 'Teresia', 'Therése', 'Therese', 'Theresia', 'Thyra', 'Tina', 'Tora', 'Torborg', 'Tove', 'Tyra',
46+
'Ulla', 'Ulla-Britt', 'Ulla-Britta', 'Ulrica', 'Ulrika', 'Ursula',
47+
'Valborg', 'Vanja', 'Vega', 'Vendela', 'Vendla', 'Vera', 'Veronica', 'Veronika', 'Victoria', 'Viktoria', 'Vilhelmina', 'Vilma', 'Viola', 'Virginia', 'Vivan', 'Viveca', 'Viveka', 'Vivi', 'Vivian', 'Viviann', 'Vivianne', 'Vivi-Ann', 'Vivi-Anne',
48+
'Wilhelmina',
49+
'Ylva', 'Yvonne',
50+
'Åsa', 'Åse'
51+
);
52+
53+
/**
54+
* @var array Swedish male first names
55+
* @link http://spraakbanken.gu.se/statistik/lbfnamnalf.phtml
56+
*/
57+
protected static $firstNameMale = array(
58+
'Abraham', 'Adam', 'Adolf', 'Adrian', 'Agaton', 'Agne', 'Albert', 'Albin', 'Aldor', 'Alex', 'Alexander', 'Alexis', 'Alexius', 'Alf', 'Alfons', 'Alfred', 'Algot', 'Allan', 'Alrik', 'Alvar', 'Alve', 'Amandus', 'Anders', 'André', 'Andreas', 'Anselm', 'Anshelm', 'Antero', 'Anton', 'Antonius', 'Arne', 'Arnold', 'Aron', 'Arthur', 'Artur', 'Arvid', 'Assar', 'Astor', 'August', 'Augustin', 'Axel',
59+
'Bengt', 'Bengt-Göran', 'Bengt-Olof', 'Bengt-Åke', 'Benny', 'Berndt', 'Berne', 'Bernhard', 'Bernt', 'Bert', 'Berth', 'Berthold', 'Bertil', 'Bill', 'Billy', 'Birger', 'Bjarne', 'Björn', 'Bo', 'Boris', 'Bror', 'Bruno', 'Brynolf', 'Börje',
60+
'Carl', 'Carl-Axel', 'Carl-Erik', 'Carl-Gustaf', 'Carl-Gustav', 'Carl-Johan', 'Charles', 'Christer', 'Christian', 'Claes', 'Claes-Göran', 'Clarence', 'Clas', 'Conny', 'Crister', 'Curt',
61+
'Dag', 'Dan', 'Daniel', 'David', 'Dennis', 'Dick', 'Donald', 'Douglas',
62+
'Ebbe', 'Eddie', 'Eddy', 'Edgar', 'Edmund', 'Edvard', 'Edvin', 'Efraim', 'Egon', 'Eilert', 'Einar', 'Eje', 'Ejnar', 'Elias', 'Elis', 'Ellert', 'Elmer', 'Elof', 'Elon', 'Elov', 'Elving', 'Elvir', 'Emanuel', 'Emil', 'Enar', 'Engelbert', 'Engelbrekt', 'Enok', 'Erhard', 'Eric', 'Erik', 'Erland', 'Erling', 'Ernfrid', 'Ernst', 'Esbjörn', 'Eskil', 'Eugén', 'Eugen', 'Evald', 'Eve', 'Evert',
63+
'Fabian', 'Felix', 'Ferdinand', 'Filip', 'Fingal', 'Finn', 'Folke', 'Frank', 'Frans', 'Franz', 'Fred', 'Fredrik', 'Fridolf', 'Friedrich', 'Fritiof', 'Fritjof', 'Frits', 'Fritz',
64+
'Gabriel', 'Georg', 'George', 'Gerhard', 'Gert', 'Gideon', 'Gilbert', 'Gillis', 'Glenn', 'Gottfrid', 'Gotthard', 'Greger', 'Gudmund', 'Gunder', 'Gunnar', 'Gustaf', 'Gustav', 'Göran', 'Görgen', 'Gösta', 'Göte',
65+
'Hadar', 'Halvar', 'Halvard', 'Hans', 'Hans-Erik', 'Hans-Olof', 'Hans-Åke', 'Harald', 'Hardy', 'Harry', 'Hartvig', 'Hasse', 'Heinrich', 'Heinz', 'Helge', 'Helmer', 'Henning', 'Henric', 'Henrik', 'Henry', 'Herbert', 'Heribert', 'Herman', 'Hilbert', 'Hilding', 'Hilmer', 'Hjalmar', 'Holger', 'Holmfrid', 'Hubert', 'Hugo', 'Håkan',
66+
'Inge', 'Ingemar', 'Ingmar', 'Ingvald', 'Ingvar', 'Isak', 'Isidor', 'Ivan', 'Ivar',
67+
'Jack', 'Jacob', 'Jakob', 'James', 'Jan', 'Janne', 'Jan-Eric', 'Jan-Erik', 'Jan-Olof', 'Jan-Olov', 'Jan-Ove', 'Jan-Åke', 'Jarl', 'Jean', 'Jens', 'Jerker', 'Jerry', 'Jesper', 'Jim', 'Jimmy', 'Joachim', 'Joacim', 'Joakim', 'Joel', 'Johan', 'Johannes', 'John', 'Johnny', 'Johny', 'Jon', 'Jonas', 'Jonny', 'Josef', 'Juhani', 'Julius', 'Justus', 'Jöns', 'Jörgen',
68+
'Kai', 'Kaj', 'Kalevi', 'Karl', 'Karl-Axel', 'Karl-Erik', 'Karl-Gunnar', 'Karl-Gustaf', 'Karl-Gustav', 'Karl-Johan', 'Kennert', 'Kennet', 'Kenneth', 'Kenny', 'Kent', 'Kenth', 'Kjell', 'Kjell-Åke', 'Klas', 'Knut', 'Konrad', 'Konstantin', 'Krister', 'Kristian', 'Kristoffer', 'Kurt', 'Kåre',
69+
'Lage', 'Lambert', 'Lars', 'Lars-Eric', 'Lars-Erik', 'Lars-Gunnar', 'Lars-Göran', 'Lars-Olof', 'Lars-Olov', 'Lars-Ove', 'Lars-Åke', 'Laurentius', 'Leander', 'Leif', 'Lennart', 'Leo', 'Leon', 'Leonard', 'Leopold', 'Levi', 'Levin', 'Linné', 'Linus', 'Lorentz', 'Louis', 'Ludvig',
70+
'Magni', 'Magnus', 'Malkolm', 'Malte', 'Manfred', 'Manne', 'Marcus', 'Markus', 'Martin', 'Mathias', 'Mats', 'Matti', 'Mattias', 'Matts', 'Maurits', 'Mauritz', 'Max', 'Melker', 'Micael', 'Michael', 'Mickael', 'Mikael', 'Morgan', 'Måns', 'Mårten',
71+
'Napoleon', 'Natanael', 'Nicklas', 'Niclas', 'Niklas', 'Nikolaus', 'Nils', 'Nils-Erik', 'Nore',
72+
'Odd', 'Ola', 'Olaus', 'Olav', 'Olavi', 'Ole', 'Oliver', 'Olle', 'Olof', 'Olov', 'Orvar', 'Oscar', 'Oskar', 'Ossian', 'Osvald', 'Otto', 'Ove', 'Owe',
73+
'Patric', 'Patrick', 'Patrik', 'Paul', 'Peder', 'Per', 'Percy', 'Per-Anders', 'Per-Arne', 'Per-Erik', 'Per-Ola', 'Per-Olof', 'Per-Olov', 'Per-Åke', 'Peter', 'Petrus', 'Petter', 'Pierre', 'Pontus', 'Pär',
74+
'Ragnar', 'Ragnvald', 'Ralf', 'Ralph', 'Raymond', 'Reidar', 'Reine', 'Reinhold', 'Reino', 'Richard', 'Rickard', 'Rikard', 'Robert', 'Roger', 'Roine', 'Roland', 'Rolf', 'Ronald', 'Ronnie', 'Ronny', 'Roy', 'Ruben', 'Rudolf', 'Runar', 'Rune', 'Runo', 'Rutger',
75+
'Salomon', 'Sam', 'Samuel', 'Sanfrid', 'Sebastian', 'Set', 'Seth', 'Seved', 'Severin', 'Sigfrid', 'Sigmund', 'Signar', 'Sigurd', 'Sigvard', 'Simon', 'Sivert', 'Sixten', 'Sonny', 'Staffan', 'Stanley', 'Stefan', 'Stellan', 'Sten', 'Stephan', 'Steve', 'Stig', 'Sture', 'Sune', 'Svante', 'Sven', 'Sven-Erik', 'Sven-Olof', 'Sven-Olov', 'Sven-Åke', 'Sverker', 'Sölve', 'Sören',
76+
'Tage', 'Ted', 'Teodor', 'Theodor', 'Thomas', 'Thor', 'Thorbjörn', 'Thord', 'Thore', 'Thorsten', 'Thorvald', 'Thure', 'Tobias', 'Toivo', 'Tom', 'Tomas', 'Tommy', 'Tonny', 'Tony', 'Tor', 'Torbjörn', 'Tord', 'Tore', 'Torgny', 'Torkel', 'Torsten', 'Torvald', 'Tryggve', 'Ture', 'Tyko',
77+
'Ulf', 'Ulrik', 'Uno', 'Urban',
78+
'Valdemar', 'Valentin', 'Valfrid', 'Vallentin', 'Valter', 'Veine', 'Verner', 'Victor', 'Vidar', 'Viggo', 'Viking', 'Viktor', 'Vilgot', 'Vilhelm', 'Villiam', 'Villy', 'Vincent', 'Vitalis',
79+
'Waldemar', 'Walter', 'Werner', 'Wilhelm', 'William', 'Willy',
80+
'Yngve',
81+
'Åke',
82+
'Örjan', 'Östen'
83+
);
84+
85+
/**
86+
* @var array Swedish common last names
87+
* @link http://www.scb.se/sv_/Hitta-statistik/Statistik-efter-amne/Befolkning/Amnesovergripande-statistik/Namnstatistik/30898/2012A01x/Samtliga-folkbokforda--Efternamn-topplistor/Efternamn-topp-100/
88+
*/
89+
protected static $lastName = array(
90+
91+
'Abrahamsson', 'Andersson', 'Andreasson', 'Arvidsson', 'Axelsson',
92+
'Bengtsson', 'Berg', 'Berggren', 'Berglund', 'Bergman', 'Bergqvist', 'Bergström', 'Björk', 'Björklund', 'Blom', 'Blomqvist',
93+
'Claesson',
94+
'Dahlberg', 'Danielsson',
95+
'Engström', 'Ek', 'Eklund', 'Ekström', 'Eliasson', 'Eriksson',
96+
'Falk', 'Forsberg', 'Fransson', 'Fredriksson',
97+
'Gunnarsson', 'Gustafsson',
98+
'Hansen', 'Hansson', 'Hedlund', 'Hellström', 'Henriksson', 'Hermansson', 'Holm', 'Holmberg', 'Holmgren', 'Holmqvist', 'Håkansson',
99+
'Isaksson', 'Ivarsson',
100+
'Jakobsson', 'Jansson', 'Johansson', 'Jonasson', 'Jonsson', 'Jönsson',
101+
'Karlsson',
102+
'Larsson', 'Lind', 'Lindberg', 'Lindgren', 'Lindholm', 'Lindqvist', 'Lindström', 'Lund', 'Lundberg', 'Lundgren', 'Lundin', 'Lundqvist', 'Lundström', 'Löfgren',
103+
'Magnusson', 'Martinsson', 'Mattsson', 'Månsson', 'Mårtensson',
104+
'Nilsson', 'Norberg', 'Nordin', 'Nordström', 'Nyberg', 'Nyström',
105+
'Olofsson', 'Olsson',
106+
'Persson', 'Pettersson', 'Pålsson',
107+
'Samuelsson', 'Sandberg', 'Sandström', 'Sjöberg', 'Sjögren', 'Ström', 'Strömberg', 'Sundberg', 'Sundqvist', 'Sundström', 'Svensson', 'Söderberg',
108+
'Viklund',
109+
'Wallin', 'Wikström',
110+
'Åberg', 'Åkesson', 'Åström',
111+
'Öberg'
112+
);
113+
114+
/**
115+
* National Personal Identity number (personnummer)
116+
* @link http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden)
117+
* @param \DateTime $birthdate
118+
* @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE
119+
* @return string on format XXXXXX-XXXX
120+
*/
121+
public function personalIdentityNumber(\DateTime $birthdate = null, $gender = null)
122+
{
123+
if (!$birthdate) {
124+
$birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
125+
}
126+
$datePart = $birthdate->format('ymd');
127+
128+
if ($gender && $gender == static::GENDER_MALE) {
129+
$randomDigits = (string)static::numerify('##') . static::randomElement(array(1,3,5,7,9));
130+
} elseif ($gender && $gender == static::GENDER_FEMALE) {
131+
$randomDigits = (string)static::numerify('##') . static::randomElement(array(0,2,4,6,8));
132+
} else {
133+
$randomDigits = (string)static::numerify('###');
134+
}
135+
136+
137+
$checksum = $this->calculateChecksum($datePart . $randomDigits);
138+
139+
return $datePart . '-' . $randomDigits . $checksum;
140+
}
141+
142+
/**
143+
* Luhn algorithm
144+
*
145+
* This is a naive implementation that only works
146+
* specifically for numbered strings of size 9
147+
*
148+
* @link http://en.wikipedia.org/wiki/Luhn_algorithm
149+
* @param string $input
150+
* @return int checksum
151+
*/
152+
protected function calculateChecksum($input)
153+
{
154+
$multiplied = implode(
155+
array_map(
156+
function ($first, $second) {
157+
return $first * $second;
158+
},
159+
str_split($input),
160+
array(2, 1, 2, 1, 2, 1, 2, 1, 2)
161+
)
162+
);
163+
164+
$summed = (int)array_reduce(
165+
str_split($multiplied),
166+
function ($carry, $item) {
167+
return (int)($carry + $item);
168+
}
169+
);
170+
171+
$checksum = 10 - ($summed%10);
172+
return $checksum == 10 ? 0 : $checksum;
173+
}
174+
}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Faker\Provider\sv_SE;
4+
5+
class PhoneNumber extends \Faker\Provider\PhoneNumber
6+
{
7+
/**
8+
* @var array Swedish phone number formats
9+
*/
10+
protected static $formats = array(
11+
'08-### ### ##',
12+
'0%#-### ## ##',
13+
'0%########',
14+
'+46 (0)%## ### ###',
15+
'+46(0)%########',
16+
'+46 %## ### ###',
17+
'+46%########',
18+
19+
'08-### ## ##',
20+
'0%#-## ## ##',
21+
'0%##-### ##',
22+
'0%#######',
23+
'+46 (0)8 ### ## ##',
24+
'+46 (0)%# ## ## ##',
25+
'+46 (0)%## ### ##',
26+
'+46 (0)%#######',
27+
'+46(0)%#######',
28+
'+46%#######',
29+
30+
'08-## ## ##',
31+
'0%#-### ###',
32+
'0%#######',
33+
'+46 (0)%######',
34+
'+46(0)%######',
35+
'+46%######',
36+
);
37+
}
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
namespace Faker\Test\Provider\sv_SE;
4+
5+
use Faker\Generator;
6+
use Faker\Provider\sv_SE\Person;
7+
8+
class PersonTest extends \PHPUnit_Framework_TestCase
9+
{
10+
/** @var Generator */
11+
protected $faker;
12+
13+
public function setUp()
14+
{
15+
$faker = new Generator();
16+
$faker->addProvider(new Person($faker));
17+
$this->faker = $faker;
18+
}
19+
20+
public function provideSeedAndExpectedReturn()
21+
{
22+
return array(
23+
array(1, '720727', '720727-5798'),
24+
array(2, '710414', '710414-5664'),
25+
array(3, '591012', '591012-4519'),
26+
array(4, '180307', '180307-0356'),
27+
array(5, '820904', '820904-7748')
28+
);
29+
}
30+
31+
/**
32+
* @dataProvider provideSeedAndExpectedReturn
33+
*/
34+
public function testPersonalIdentityNumber($seed, $birthdate, $expected)
35+
{
36+
$faker = $this->faker;
37+
$faker->seed($seed);
38+
39+
$this->assertEquals(
40+
$expected,
41+
$faker->personalIdentityNumber(\DateTime::createFromFormat('ymd', $birthdate))
42+
);
43+
}
44+
45+
public function testUsesOddValuesForMales()
46+
{
47+
$faker = $this->faker;
48+
$faker->seed(1);
49+
50+
$this->assertEquals(
51+
'720727-5715',
52+
$faker->personalIdentityNumber(\DateTime::createFromFormat('ymd', '720727'), 'male')
53+
);
54+
}
55+
56+
public function testUsesEvenValuesForFemales()
57+
{
58+
$faker = $this->faker;
59+
$faker->seed(1);
60+
61+
$this->assertEquals(
62+
'720727-5707',
63+
$faker->personalIdentityNumber(\DateTime::createFromFormat('ymd', '720727'), 'female')
64+
);
65+
66+
}
67+
}

0 commit comments

Comments
 (0)