test_validator.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  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. def test_hr(self):
  201. validator = Validator('HR99999999999')
  202. self.assertTrue(validator.validate())
  203. self.assertEqual(validator.country_code, 'HR')
  204. validator = Validator('HR9999999999')
  205. self.assertFalse(validator.validate())
  206. def test_hu(self):
  207. # format 1 - 5 chars
  208. validator = Validator('HU21376414')
  209. self.assertTrue(validator.validate())
  210. self.assertEqual(validator.country_code, 'HU')
  211. validator = Validator('hu 10597190')
  212. self.assertTrue(validator.validate())
  213. self.assertEqual(validator.country_code, 'HU')
  214. def test_ie(self):
  215. # old style format
  216. validator = Validator('IE8Z49289F')
  217. self.assertTrue(validator.validate())
  218. self.assertEqual(validator.country_code, 'IE')
  219. validator = Validator('IE26287395')
  220. self.assertFalse(validator.validate())
  221. # new style
  222. validator = Validator('IE3628739L')
  223. self.assertTrue(validator.validate())
  224. def test_it(self):
  225. validator = Validator('IT00000010215')
  226. self.assertTrue(validator.validate())
  227. self.assertEqual(validator.country_code, 'IT')
  228. validator = Validator('IT00000017775')
  229. self.assertFalse(validator.validate())
  230. def test_lt(self):
  231. # juridical entities
  232. validator = Validator('LT213179412')
  233. self.assertTrue(validator.validate())
  234. self.assertEqual(validator.country_code, 'LT')
  235. validator = Validator('LT213179422')
  236. self.assertFalse(validator.validate())
  237. # Temporarily registered taxpayers
  238. validator = Validator('LT290061371314')
  239. self.assertTrue(validator.validate())
  240. validator = Validator('LT290061371324')
  241. self.assertFalse(validator.validate())
  242. def test_lu(self):
  243. validator = Validator('LU10000356')
  244. self.assertTrue(validator.validate())
  245. self.assertEqual(validator.country_code, 'LU')
  246. validator = Validator('LU14516304')
  247. self.assertTrue(validator.validate())
  248. validator = Validator('LU10000355')
  249. self.assertFalse(validator.validate())
  250. def test_lv(self):
  251. # juridical entities
  252. validator = Validator('LV40003009497')
  253. self.assertTrue(validator.validate())
  254. self.assertEqual(validator.country_code, 'LV')
  255. validator = Validator('LV40003009498')
  256. self.assertFalse(validator.validate())
  257. # natural persons
  258. validator = Validator('LV07091910933')
  259. self.assertTrue(validator.validate())
  260. validator = Validator('LV32091910933')
  261. self.assertFalse(validator.validate())
  262. def test_mt(self):
  263. validator = Validator('MT15121333')
  264. self.assertTrue(validator.validate())
  265. self.assertEqual(validator.country_code, 'MT')
  266. validator = Validator('MT15121332')
  267. self.assertFalse(validator.validate())
  268. def test_nl(self):
  269. validator = Validator('NL010000446B01')
  270. self.assertTrue(validator.validate())
  271. self.assertEqual(validator.country_code, 'NL')
  272. validator = Validator('NL000000446B01')
  273. self.assertFalse(validator.validate())
  274. def test_pl(self):
  275. validator = Validator('PL5260001246')
  276. self.assertTrue(validator.validate())
  277. self.assertEqual(validator.country_code, 'PL')
  278. validator = Validator('PL5260001244')
  279. self.assertFalse(validator.validate())
  280. def test_pt(self):
  281. validator = Validator('PT502757191')
  282. self.assertTrue(validator.validate())
  283. self.assertEqual(validator.country_code, 'PT')
  284. validator = Validator('PT502757190')
  285. self.assertFalse(validator.validate())
  286. def test_ro(self):
  287. validator = Validator('RO2785503')
  288. self.assertTrue( validator.validate() )
  289. self.assertEqual( validator.country_code, 'RO' )
  290. self.assertEqual( validator.vat_number, '2785503' )
  291. validator = Validator('2785503', 'RO')
  292. self.assertTrue(validator.validate())
  293. validator = Validator('ro 99 908')
  294. self.assertTrue(validator.validate())
  295. self.assertEqual(validator.country_code, 'RO')
  296. validator = Validator('RO2785500')
  297. self.assertFalse(validator.validate())
  298. def test_se(self):
  299. validator = Validator('SE556188840401')
  300. self.assertTrue(validator.validate())
  301. self.assertEqual(validator.country_code, 'SE')
  302. validator = Validator('SE556183840407')
  303. self.assertFalse(validator.validate())
  304. def test_si(self):
  305. validator = Validator('SI15012557')
  306. self.assertTrue(validator.validate())
  307. self.assertEqual(validator.country_code, 'SI')
  308. validator = Validator('SI15012556')
  309. self.assertFalse(validator.validate())
  310. def test_sk(self):
  311. validator = Validator('SK4030000007')
  312. self.assertTrue(validator.validate())
  313. self.assertEqual(validator.country_code, 'SK')
  314. validator = Validator('SK5407062531')
  315. self.assertFalse(validator.validate())
  316. validator = Validator('SK0407062531')
  317. self.assertFalse(validator.validate())
  318. suite = unittest.TestLoader().loadTestsFromTestCase(TestValidator)
  319. unittest.TextTestRunner(verbosity=2).run(suite)