test_validator.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. # Copyright 2018 Agile Geeks
  2. # Permission is hereby granted, free of charge, to any person obtaining a copy of this software
  3. # and associated documentation files (the "Software"), to deal in the Software without restriction,
  4. # including without limitation the rights to use, copy, modify, merge, publish, distribute,
  5. # sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
  6. # is furnished to do so, subject to the following conditions:
  7. # The above copyright notice and this permission notice shall be included in all copies or substantial
  8. # portions of the Software.
  9. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  10. # LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  11. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  12. # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
  13. # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  14. import unittest
  15. from pyVat.api import Validator
  16. class TestValidator(unittest.TestCase):
  17. def test_at(self):
  18. validator = Validator('ATU10223006')
  19. self.assertTrue(validator.validate())
  20. self.assertEqual(validator.country_code, 'AT')
  21. validator = Validator('ATU10223005')
  22. self.assertFalse(validator.validate())
  23. def test_be(self):
  24. validator = Validator('BE0776091951')
  25. self.assertTrue(validator.validate())
  26. self.assertEqual(validator.country_code, 'BE')
  27. self.assertEqual(validator.vat_number, '0776091951')
  28. validator = Validator('BE0776091950')
  29. self.assertFalse(validator.validate())
  30. validator = Validator('BE0842411247')
  31. self.assertTrue(validator.validate())
  32. def test_bg(self):
  33. # test legal entity
  34. validator = Validator('BG101004508')
  35. self.assertTrue(validator.validate())
  36. self.assertEqual(validator.country_code, 'BG')
  37. self.assertEqual(validator.vat_number, '101004508')
  38. validator = Validator('BG101004502')
  39. self.assertFalse(validator.validate())
  40. # test physical person
  41. validator = Validator('BG0041010002')
  42. self.assertTrue(validator.validate())
  43. self.assertEqual(validator.country_code, 'BG')
  44. self.assertEqual(validator.vat_number, '0041010002')
  45. # foreigners
  46. validator = Validator('BG0000100159')
  47. self.assertTrue(validator.validate())
  48. self.assertEqual(validator.country_code, 'BG')
  49. self.assertEqual(validator.vat_number, '0000100159')
  50. # others
  51. validator = Validator('BG0000100153')
  52. self.assertTrue(validator.validate())
  53. self.assertEqual(validator.country_code, 'BG')
  54. self.assertEqual(validator.vat_number, '0000100153')
  55. validator = Validator('BG202618588')
  56. self.assertTrue(validator.validate())
  57. def test_cy(self):
  58. validator = Validator('CY00532445O') # the last char is O from oranges
  59. self.assertTrue(validator.validate())
  60. self.assertEqual(validator.country_code, 'CY')
  61. self.assertEqual(validator.vat_number, '00532445O')
  62. validator = Validator('CY12000139V')
  63. self.assertFalse(validator.validate())
  64. def test_cz(self):
  65. # test legal entity
  66. validator = Validator('CZ46505334')
  67. self.assertTrue(validator.validate())
  68. self.assertEqual(validator.country_code, 'CZ')
  69. self.assertEqual(validator.vat_number, '46505334')
  70. validator = Validator('CZ46505332')
  71. self.assertFalse(validator.validate())
  72. # test individuals - special cases
  73. validator = Validator('CZ640903926')
  74. self.assertTrue(validator.validate())
  75. self.assertEqual(validator.country_code, 'CZ')
  76. self.assertEqual(validator.vat_number, '640903926')
  77. validator = Validator('CZ46505331')
  78. self.assertFalse(validator.validate())
  79. # test common individuals
  80. validator = Validator('CZ395601439')
  81. self.assertTrue(validator.validate())
  82. self.assertEqual(validator.country_code, 'CZ')
  83. self.assertEqual(validator.vat_number, '395601439')
  84. validator = Validator('CZ520229439')
  85. self.assertTrue(validator.validate())
  86. validator = Validator('CZ705601439')
  87. self.assertFalse(validator.validate())
  88. # test common individuals born after 1953
  89. validator = Validator('CZ7103192745')
  90. self.assertTrue(validator.validate())
  91. self.assertEqual(validator.country_code, 'CZ')
  92. self.assertEqual(validator.vat_number, '7103192745')
  93. validator = Validator('CZ7103192744')
  94. self.assertFalse(validator.validate())
  95. validator = Validator('CZ26159708')
  96. self.assertTrue(validator.validate())
  97. def test_de(self):
  98. validator = Validator('DE111111125')
  99. self.assertTrue(validator.validate())
  100. self.assertEqual(validator.country_code, 'DE')
  101. self.assertEqual(validator.vat_number, '111111125')
  102. validator = Validator('DE124718735')
  103. self.assertTrue(validator.validate())
  104. validator = Validator('DE180295363')
  105. self.assertTrue(validator.validate())
  106. validator = Validator('DE123475223')
  107. self.assertTrue(validator.validate())
  108. validator = Validator('DE111111122')
  109. self.assertFalse(validator.validate())
  110. def test_dk(self):
  111. validator = Validator('DK88146328')
  112. self.assertTrue(validator.validate())
  113. self.assertEqual(validator.country_code, 'DK')
  114. self.assertEqual(validator.vat_number, '88146328')
  115. validator = Validator('DK88146327')
  116. self.assertFalse(validator.validate())
  117. def test_ee(self):
  118. validator = Validator('EE100207415')
  119. self.assertTrue(validator.validate())
  120. self.assertEqual(validator.country_code, 'EE')
  121. self.assertEqual(validator.vat_number, '100207415')
  122. validator = Validator('EE100207417')
  123. self.assertFalse(validator.validate())
  124. def test_gr(self):
  125. validator = Validator('EL040127797')
  126. self.assertTrue(validator.validate())
  127. self.assertEqual(validator.country_code, 'GR')
  128. self.assertEqual(validator.vat_number, '040127797')
  129. validator = Validator('040127797', 'EL')
  130. self.assertTrue(validator.validate())
  131. validator = Validator('EL040127798')
  132. self.assertFalse(validator.validate())
  133. validator = Validator('EL999863881')
  134. self.assertTrue(validator.validate())
  135. def test_es(self):
  136. # Juridical entities other than national ones
  137. validator = Validator('esa0011012B')
  138. self.assertTrue(validator.validate())
  139. self.assertEqual(validator.country_code, 'ES')
  140. self.assertEqual(validator.vat_number, 'A0011012B')
  141. validator = Validator('ESA0011012B')
  142. self.assertTrue(validator.validate())
  143. self.assertEqual(validator.country_code, 'ES')
  144. self.assertEqual(validator.vat_number, 'A0011012B')
  145. validator = Validator('ESA0011012B', 'ES')
  146. self.assertTrue(validator.validate())
  147. validator = Validator('ESA0011011B')
  148. self.assertFalse(validator.validate())
  149. # Physical persons
  150. validator = Validator('ESZ3964521D')
  151. self.assertTrue(validator.validate())
  152. validator = Validator('ESM3964521F')
  153. self.assertTrue(validator.validate())
  154. # National juridical entities
  155. validator = Validator('ESB84968312')
  156. self.assertTrue(validator.validate())
  157. validator = Validator('ESB50860162')
  158. self.assertTrue(validator.validate())
  159. validator = Validator('ESB30034573')
  160. self.assertTrue(validator.validate())
  161. def test_fi(self):
  162. validator = Validator('fi09853608')
  163. self.assertTrue(validator.validate())
  164. self.assertEqual(validator.country_code, 'FI')
  165. validator = Validator('FI09853607')
  166. self.assertFalse(validator.validate())
  167. def test_fr(self):
  168. # old style
  169. validator = Validator('FR00300076965')
  170. self.assertTrue(validator.validate())
  171. self.assertEqual(validator.country_code, 'FR')
  172. validator = Validator('FR06300076967')
  173. self.assertTrue(validator.validate())
  174. validator = Validator('FR46441049376')
  175. self.assertTrue(validator.validate())
  176. validator = Validator('Fr28316607779')
  177. self.assertTrue(validator.validate())
  178. validator = Validator('FR00300076964')
  179. self.assertFalse(validator.validate())
  180. validator = Validator('FR2A316607779')
  181. self.assertTrue(validator.validate())
  182. # new style
  183. validator = Validator('FR0K300076962')
  184. self.assertTrue(validator.validate())
  185. def test_gb(self):
  186. # format 1 - 5 chars
  187. validator = Validator('GbGD232')
  188. self.assertTrue(validator.validate())
  189. self.assertEqual(validator.country_code, 'GB')
  190. validator = Validator('GBHA232')
  191. self.assertFalse(validator.validate())
  192. validator = Validator('GBGD755')
  193. self.assertFalse(validator.validate())
  194. self.assertEqual(validator.country_code, 'GB')
  195. validator = Validator('GBHA957')
  196. self.assertTrue(validator.validate())
  197. #format 2
  198. validator = Validator('GB434031494')
  199. self.assertTrue(validator.validate())
  200. validator = Validator('GB263321723')
  201. self.assertTrue(validator.validate())
  202. validator = Validator('GB151699094')
  203. self.assertTrue(validator.validate())
  204. def test_hr(self):
  205. validator = Validator('HR99999999999')
  206. self.assertTrue(validator.validate())
  207. self.assertEqual(validator.country_code, 'HR')
  208. validator = Validator('HR9999999999')
  209. self.assertFalse(validator.validate())
  210. def test_hu(self):
  211. # format 1 - 5 chars
  212. validator = Validator('HU21376414')
  213. self.assertTrue(validator.validate())
  214. self.assertEqual(validator.country_code, 'HU')
  215. validator = Validator('hu 10597190')
  216. self.assertTrue(validator.validate())
  217. self.assertEqual(validator.country_code, 'HU')
  218. def test_ie(self):
  219. # old style format
  220. validator = Validator('IE8Z49289F')
  221. self.assertTrue(validator.validate())
  222. self.assertEqual(validator.country_code, 'IE')
  223. validator = Validator('IE26287395')
  224. self.assertFalse(validator.validate())
  225. # new style
  226. validator = Validator('IE3628739L')
  227. self.assertTrue(validator.validate())
  228. def test_it(self):
  229. validator = Validator('IT00000010215')
  230. self.assertTrue(validator.validate())
  231. self.assertEqual(validator.country_code, 'IT')
  232. validator = Validator('IT00000017775')
  233. self.assertFalse(validator.validate())
  234. def test_lt(self):
  235. # juridical entities
  236. validator = Validator('LT213179412')
  237. self.assertTrue(validator.validate())
  238. self.assertEqual(validator.country_code, 'LT')
  239. validator = Validator('LT213179422')
  240. self.assertFalse(validator.validate())
  241. # Temporarily registered taxpayers
  242. validator = Validator('LT290061371314')
  243. self.assertTrue(validator.validate())
  244. validator = Validator('LT290061371324')
  245. self.assertFalse(validator.validate())
  246. def test_lu(self):
  247. validator = Validator('LU10000356')
  248. self.assertTrue(validator.validate())
  249. self.assertEqual(validator.country_code, 'LU')
  250. validator = Validator('LU14516304')
  251. self.assertTrue(validator.validate())
  252. validator = Validator('LU10000355')
  253. self.assertFalse(validator.validate())
  254. def test_lv(self):
  255. # juridical entities
  256. validator = Validator('LV40003009497')
  257. self.assertTrue(validator.validate())
  258. self.assertEqual(validator.country_code, 'LV')
  259. validator = Validator('LV40003009498')
  260. self.assertFalse(validator.validate())
  261. # natural persons
  262. validator = Validator('LV07091910933')
  263. self.assertTrue(validator.validate())
  264. validator = Validator('LV32091910933')
  265. self.assertFalse(validator.validate())
  266. def test_mt(self):
  267. validator = Validator('MT15121333')
  268. self.assertTrue(validator.validate())
  269. self.assertEqual(validator.country_code, 'MT')
  270. validator = Validator('MT15121332')
  271. self.assertFalse(validator.validate())
  272. def test_nl(self):
  273. validator = Validator('NL010000446B01')
  274. self.assertTrue(validator.validate())
  275. self.assertEqual(validator.country_code, 'NL')
  276. validator = Validator('NL000000446B01')
  277. self.assertFalse(validator.validate())
  278. def test_pl(self):
  279. validator = Validator('PL5260001246')
  280. self.assertTrue(validator.validate())
  281. self.assertEqual(validator.country_code, 'PL')
  282. validator = Validator('PL5260001244')
  283. self.assertFalse(validator.validate())
  284. def test_pt(self):
  285. validator = Validator('PT502757191')
  286. self.assertTrue(validator.validate())
  287. self.assertEqual(validator.country_code, 'PT')
  288. validator = Validator('PT502757190')
  289. self.assertFalse(validator.validate())
  290. def test_ro(self):
  291. validator = Validator('RO2785503')
  292. self.assertTrue( validator.validate() )
  293. self.assertEqual( validator.country_code, 'RO' )
  294. self.assertEqual( validator.vat_number, '2785503' )
  295. validator = Validator('2785503', 'RO')
  296. self.assertTrue(validator.validate())
  297. validator = Validator('ro 99 908')
  298. self.assertTrue(validator.validate())
  299. self.assertEqual(validator.country_code, 'RO')
  300. validator = Validator('RO2785500')
  301. self.assertFalse(validator.validate())
  302. def test_se(self):
  303. validator = Validator('SE556188840401')
  304. self.assertTrue(validator.validate())
  305. self.assertEqual(validator.country_code, 'SE')
  306. validator = Validator('SE556183840407')
  307. self.assertFalse(validator.validate())
  308. def test_si(self):
  309. validator = Validator('SI15012557')
  310. self.assertTrue(validator.validate())
  311. self.assertEqual(validator.country_code, 'SI')
  312. validator = Validator('SI15012556')
  313. self.assertFalse(validator.validate())
  314. def test_sk(self):
  315. validator = Validator('SK4030000007')
  316. self.assertTrue(validator.validate())
  317. self.assertEqual(validator.country_code, 'SK')
  318. validator = Validator('SK5407062531')
  319. self.assertFalse(validator.validate())
  320. validator = Validator('SK0407062531')
  321. self.assertFalse(validator.validate())
  322. suite = unittest.TestLoader().loadTestsFromTestCase(TestValidator)
  323. unittest.TextTestRunner(verbosity=2).run(suite)