From 26517feef401b58b5c9fcbef828f23a1286b988a Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 11 Apr 2014 20:10:35 +0200 Subject: [PATCH 001/654] Improve package docstring formatting and show example --- getnumlist.py | 2 +- stdnum/__init__.py | 155 ++++++++++++++++++++++++--------------------- 2 files changed, 85 insertions(+), 72 deletions(-) diff --git a/getnumlist.py b/getnumlist.py index c666c4bc..97c91bcf 100755 --- a/getnumlist.py +++ b/getnumlist.py @@ -47,7 +47,7 @@ def get_number_modules(): print 'For stdnum/__init__.py:' print '' for module in get_number_modules(): - print ' * %s: %s' % ( + print '* %s: %s' % ( module.__name__.replace('stdnum.', ''), util.get_module_name(module), ) diff --git a/stdnum/__init__.py b/stdnum/__init__.py index b11e4fc9..815f6bd9 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -25,80 +25,93 @@ Currently this package supports the following formats: - * at.uid: UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) - * be.vat: BTW, TVA, NWSt (Belgian VAT number) - * bg.egn: EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) - * bg.pnf: PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) - * bg.vat: VAT (Идентификационен номер по ДДС, Bulgarian VAT number) - * br.cpf: CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) - * cy.vat: Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) - * cz.dic: DIČ (Daňové identifikační číslo, Czech VAT number) - * cz.rc: RČ (Rodné číslo, the Czech birth number) - * de.vat: Ust ID Nr. (Umsatzsteur Identifikationnummer, German VAT number) - * dk.cpr: CPR (personnummer, the Danish citizen number) - * dk.cvr: CVR (Momsregistreringsnummer, Danish VAT number) - * ean: EAN (International Article Number) - * ee.kmkr: KMKR (Käibemaksukohuslase, Estonian VAT number) - * es.cif: CIF (Certificado de Identificación Fiscal, Spanish company tax number) - * es.dni: DNI (Documento nacional de identidad, Spanish personal identity codes) - * es.nie: NIE (Número de Identificación de Extranjeros, Spanish foreigner number) - * es.nif: NIF (Número de Identificación Fiscal, Spanish VAT number) - * eu.vat: VAT (European Union VAT number) - * fi.alv: ALV nro (Arvonlisäveronumero, Finnish VAT number) - * fi.hetu: HETU (Henkilötunnus, Finnish personal identity code) - * fr.siren: SIREN (a French company identification number) - * fr.tva: n° TVA (taxe sur la valeur ajoutée, French VAT number) - * gb.vat: VAT (United Kingdom (and Isle of Man) VAT registration number) - * gr.vat: FPA, ΦΠΑ (Foros Prostithemenis Aksias, the Greek VAT number) - * grid: GRid (Global Release Identifier) - * hr.oib: OIB (Osobni identifikacijski broj, Croatian identification number) - * hu.anum: ANUM (Közösségi adószám, Hungarian VAT number) - * iban: IBAN (International Bank Account Number) - * ie.pps: PPS No (Personal Public Service Number, Irish personal number) - * ie.vat: VAT (Irish VAT number) - * imei: IMEI (International Mobile Equipment Identity) - * imsi: IMSI (International Mobile Subscriber Identity) - * isan: ISAN (International Standard Audiovisual Number) - * isbn: ISBN (International Standard Book Number) - * isil: ISIL (International Standard Identifier for Libraries) - * ismn: ISMN (International Standard Music Number) - * issn: ISSN (International Standard Serial Number) - * it.iva: Partita IVA (Italian VAT number) - * lt.pvm: PVM (Pridėtinės vertės mokestis mokėtojo kodas, Lithuanian VAT number) - * lu.tva: TVA (taxe sur la valeur ajoutée, Luxembourgian VAT number) - * lv.pvn: PVN (Pievienotās vērtības nodokļa, Latvian VAT number) - * meid: MEID (Mobile Equipment Identifier) - * mt.vat: VAT (Maltese VAT number) - * my.nric: NRIC No. (Malaysian National Registration Identity Card Number) - * nl.brin: Brin number (Dutch number for schools) - * nl.bsn: BSN (Burgerservicenummer, Dutch national identification number) - * nl.btw: BTW-nummer (Omzetbelastingnummer, the Dutch VAT number) - * nl.onderwijsnummer: Onderwijsnummer (Dutch student school number) - * nl.postcode: Postcode (Dutch postal code) - * pl.nip: NIP (Numer Identyfikacji Podatkowej, Polish VAT number) - * pt.nif: NIF (Número de identificação fiscal, Portuguese VAT number) - * ro.cf: CF (Cod de înregistrare în scopuri de TVA, Romanian VAT number) - * ro.cnp: CNP (Cod Numeric Personal, Romanian Numerical Personal Code) - * se.vat: VAT (Moms, Mervärdesskatt, Swedish VAT number) - * si.ddv: ID za DDV (Davčna številka, Slovenian VAT number) - * sk.dph: IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) - * sk.rc: RČ (Rodné číslo, the Slovak birth number) - * us.atin: ATIN (U.S. Adoption Taxpayer Identification Number) - * us.ein: EIN (U.S. Employer Identification Number) - * us.itin: ITIN (U.S. Individual Taxpayer Identification Number) - * us.ptin: PTIN (U.S. Preparer Tax Identification Number) - * us.ssn: SSN (U.S. Social Security Number) - * us.tin: TIN (U.S. Taxpayer Identification Number) +* at.uid: UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) +* be.vat: BTW, TVA, NWSt (Belgian VAT number) +* bg.egn: EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) +* bg.pnf: PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) +* bg.vat: VAT (Идентификационен номер по ДДС, Bulgarian VAT number) +* br.cpf: CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) +* cy.vat: Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) +* cz.dic: DIČ (Daňové identifikační číslo, Czech VAT number) +* cz.rc: RČ (Rodné číslo, the Czech birth number) +* de.vat: Ust ID Nr. (Umsatzsteur Identifikationnummer, German VAT number) +* dk.cpr: CPR (personnummer, the Danish citizen number) +* dk.cvr: CVR (Momsregistreringsnummer, Danish VAT number) +* ean: EAN (International Article Number) +* ee.kmkr: KMKR (Käibemaksukohuslase, Estonian VAT number) +* es.cif: CIF (Certificado de Identificación Fiscal, Spanish company tax number) +* es.dni: DNI (Documento nacional de identidad, Spanish personal identity codes) +* es.nie: NIE (Número de Identificación de Extranjeros, Spanish foreigner number) +* es.nif: NIF (Número de Identificación Fiscal, Spanish VAT number) +* eu.vat: VAT (European Union VAT number) +* fi.alv: ALV nro (Arvonlisäveronumero, Finnish VAT number) +* fi.hetu: HETU (Henkilötunnus, Finnish personal identity code) +* fr.siren: SIREN (a French company identification number) +* fr.tva: n° TVA (taxe sur la valeur ajoutée, French VAT number) +* gb.vat: VAT (United Kingdom (and Isle of Man) VAT registration number) +* gr.vat: FPA, ΦΠΑ (Foros Prostithemenis Aksias, the Greek VAT number) +* grid: GRid (Global Release Identifier) +* hr.oib: OIB (Osobni identifikacijski broj, Croatian identification number) +* hu.anum: ANUM (Közösségi adószám, Hungarian VAT number) +* iban: IBAN (International Bank Account Number) +* ie.pps: PPS No (Personal Public Service Number, Irish personal number) +* ie.vat: VAT (Irish VAT number) +* imei: IMEI (International Mobile Equipment Identity) +* imsi: IMSI (International Mobile Subscriber Identity) +* isan: ISAN (International Standard Audiovisual Number) +* isbn: ISBN (International Standard Book Number) +* isil: ISIL (International Standard Identifier for Libraries) +* ismn: ISMN (International Standard Music Number) +* issn: ISSN (International Standard Serial Number) +* it.iva: Partita IVA (Italian VAT number) +* lt.pvm: PVM (Pridėtinės vertės mokestis mokėtojo kodas, Lithuanian VAT number) +* lu.tva: TVA (taxe sur la valeur ajoutée, Luxembourgian VAT number) +* lv.pvn: PVN (Pievienotās vērtības nodokļa, Latvian VAT number) +* meid: MEID (Mobile Equipment Identifier) +* mt.vat: VAT (Maltese VAT number) +* my.nric: NRIC No. (Malaysian National Registration Identity Card Number) +* nl.brin: Brin number (Dutch number for schools) +* nl.bsn: BSN (Burgerservicenummer, Dutch national identification number) +* nl.btw: BTW-nummer (Omzetbelastingnummer, the Dutch VAT number) +* nl.onderwijsnummer: Onderwijsnummer (Dutch student school number) +* nl.postcode: Postcode (Dutch postal code) +* pl.nip: NIP (Numer Identyfikacji Podatkowej, Polish VAT number) +* pt.nif: NIF (Número de identificação fiscal, Portuguese VAT number) +* ro.cf: CF (Cod de înregistrare în scopuri de TVA, Romanian VAT number) +* ro.cnp: CNP (Cod Numeric Personal, Romanian Numerical Personal Code) +* se.vat: VAT (Moms, Mervärdesskatt, Swedish VAT number) +* si.ddv: ID za DDV (Davčna številka, Slovenian VAT number) +* sk.dph: IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) +* sk.rc: RČ (Rodné číslo, the Slovak birth number) +* us.atin: ATIN (U.S. Adoption Taxpayer Identification Number) +* us.ein: EIN (U.S. Employer Identification Number) +* us.itin: ITIN (U.S. Individual Taxpayer Identification Number) +* us.ptin: PTIN (U.S. Preparer Tax Identification Number) +* us.ssn: SSN (U.S. Social Security Number) +* us.tin: TIN (U.S. Taxpayer Identification Number) Furthermore a number of generic check digit algorithms are available: - * iso7064.mod_11_10: The ISO 7064 Mod 11, 10 algorithm - * iso7064.mod_11_2: The ISO 7064 Mod 11, 2 algorithm - * iso7064.mod_37_2: The ISO 7064 Mod 37, 2 algorithm - * iso7064.mod_37_36: The ISO 7064 Mod 37, 36 algorithm - * iso7064.mod_97_10: The ISO 7064 Mod 97, 10 algorithm - * luhn: The Luhn and Luhn mod N algorithms - * verhoeff: The Verhoeff algorithm +* iso7064.mod_11_10: The ISO 7064 Mod 11, 10 algorithm +* iso7064.mod_11_2: The ISO 7064 Mod 11, 2 algorithm +* iso7064.mod_37_2: The ISO 7064 Mod 37, 2 algorithm +* iso7064.mod_37_36: The ISO 7064 Mod 37, 36 algorithm +* iso7064.mod_97_10: The ISO 7064 Mod 97, 10 algorithm +* luhn: The Luhn and Luhn mod N algorithms +* verhoeff: The Verhoeff algorithm + +All modules implement a common interface: + +>>> from stdnum import isbn +>>> isbn.validate('978-9024538270') +'9789024538270' +>>> isbn.validate('978-9024538271') +Traceback (most recent call last): + ... +InvalidChecksum: ... + +Apart from the validate() function, modules generally provide extra +parsing, validation, formatting or conversion functions. """ From 03e4f9738080b87a7d6bc4ba32dae07de4c51c1f Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 5 Jul 2014 22:15:24 +0200 Subject: [PATCH 002/654] Fix getisbn script and update ISBN data file --- getisbn.py | 6 +++--- stdnum/isbn.dat | 40 ++++++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/getisbn.py b/getisbn.py index a184bdd5..49f7c0c1 100755 --- a/getisbn.py +++ b/getisbn.py @@ -2,7 +2,7 @@ # getisbn.py - script to get ISBN prefix data # -# Copyright (C) 2010, 2011 Arthur de Jong +# Copyright (C) 2010, 2011, 2014 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -30,7 +30,7 @@ # The place where the current version of RangeMessage.xml can be downloaded. -download_url = 'http://www.isbn-international.org/agency?rmxml=1' +download_url = 'https://www.isbn-international.org/export_rangemessage.xml' def _wrap(text): @@ -90,7 +90,7 @@ def endElement(self, name): for line in _wrap(','.join(r[0] + '-' + r[1] for r in self._topranges[p])): print ' %s' % line - print ' %s agency="%s"' % (a, self._agency) + print (' %s agency="%s"' % (a, self._agency)).encode('utf-8') for line in _wrap(','.join(r[0] + '-' + r[1] for r in self._ranges)): print ' %s' % line diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index 38b77926..d46d6dd8 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,13 +1,14 @@ # generated from RangeMessage.xml, downloaded from -# http://www.isbn-international.org/agency?rmxml=1 -# file serial be2e8e46-b368-41c0-8603-5938a5e7e0f7 -# file date Mon, 25 Nov 2013 09:51:28 GMT +# https://www.isbn-international.org/export_rangemessage.xml +# file serial 95adc47f-d968-4bd9-bee6-5aa3a54017e6 +# file date Thu, 19 Jun 2014 16:00:12 CEST 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" 00-19,200-699,7000-8499,85000-89999,900000-949999,9500000-9999999 1 agency="English language" - 00-09,100-399,4000-5499,55000-86979,869800-998999,9990000-9999999 + 00-09,100-327,328-329,330-399,4000-5499,55000-86979,869800-998999 + 9990000-9999999 2 agency="French language" 00-19,200-349,35000-39999,400-699,7000-8399,84000-89999,900000-949999 9500000-9999999 @@ -17,7 +18,7 @@ 99500-99999 4 agency="Japan" 00-19,200-699,7000-8499,85000-89999,900000-949999,9500000-9999999 - 5 agency="Russian Federation and former USSR" + 5 agency="former U.S.S.R" 00000-00499,0050-0099,01-19,200-420,4210-4299,430-430,4310-4399,440-440 4410-4499,450-699,7000-8499,85000-89999,900000-909999,91000-91999 9200-9299,93000-94999,9500000-9500999,9501-9799,98000-98999 @@ -28,13 +29,13 @@ 00-19,200-699,7000-7999,80000-84999,85-99 602 agency="Indonesia" 00-10,1100-1199,1200-1399,14000-14999,1500-1699,17000-17999,18000-18999 - 19000-19999,200-749,7500-7999,8000-9499,95000-99999 + 19000-19999,200-699,70000-74999,7500-7999,8000-9499,95000-99999 603 agency="Saudi Arabia" 00-04,05-49,500-799,8000-8999,90000-99999 604 agency="Vietnam" 0-4,50-89,900-979,9800-9999 605 agency="Turkey" - 01-09,100-399,4000-5999,60000-89999,90-99 + 01-09,100-399,4000-5999,60000-89999,9000-9999 606 agency="Romania" 0-0,10-49,500-799,8000-9199,92000-99999 607 agency="Mexico" @@ -66,12 +67,12 @@ 00-29,400-599,8000-8999,95000-99999 7 agency="China, People's Republic" 00-09,100-499,5000-7999,80000-89999,900000-999999 - 80 agency="Czech Republic and Slovakia" + 80 agency="former Czechoslovakia" 00-19,200-699,7000-8499,85000-89999,900000-999999 81 agency="India" 00-19,200-699,7000-8499,85000-89999,900000-999999 82 agency="Norway" - 00-19,200-699,7000-8999,90000-98999,990000-999999 + 00-19,200-689,690000-699999,7000-8999,90000-98999,990000-999999 83 agency="Poland" 00-19,200-599,60000-69999,7000-8499,85000-89999,900000-999999 84 agency="Spain" @@ -79,7 +80,7 @@ 920000-923999,92400-92999,930000-949999,95000-96999,9700-9999 85 agency="Brazil" 00-19,200-599,60000-69999,7000-8499,85000-89999,900000-979999,98000-99999 - 86 agency="Serbia (shared)" + 86 agency="former Yugoslavia" 00-29,300-599,6000-7999,80000-89999,900000-999999 87 agency="Denmark" 00-29,400-649,7000-7999,85000-94999,970000-999999 @@ -110,8 +111,8 @@ 954 agency="Bulgaria" 00-28,2900-2999,300-799,8000-8999,90000-92999,9300-9999 955 agency="Sri Lanka" - 0000-1999,20-40,41000-43999,44000-44999,4500-4999,50000-54999,550-799 - 8000-9499,95000-99999 + 0000-1999,20-40,41000-43999,44000-44999,4500-4999,50000-54999,550-749 + 7500-7999,8000-9499,95000-99999 956 agency="Chile" 00-19,200-699,7000-9999 957 agency="Taiwan" @@ -143,7 +144,7 @@ 968 agency="Mexico" 01-39,400-499,5000-7999,800-899,9000-9999 969 agency="Pakistan" - 0-1,20-39,400-799,8000-9999 + 0-1,20-22,23000-23999,24-39,400-749,7500-9999 970 agency="Mexico" 01-59,600-899,9000-9099,91000-96999,9700-9999 971 agency="Philippines" @@ -189,6 +190,8 @@ 00-11,12000-14999,15000-16999,17000-19999,200-799,8000-9699,97000-99999 989 agency="Portugal" 0-1,20-54,550-799,8000-9499,95000-99999 + 9926 agency="Bosnia and Herzegovina" + 0-1,20-39,400-799,8000-9999 9927 agency="Qatar" 00-09,100-399,4000-4999 9928 agency="Albania" @@ -252,7 +255,8 @@ 9957 agency="Jordan" 00-39,400-699,70-84,8500-8799,88-99 9958 agency="Bosnia and Herzegovina" - 00-03,040-089,0900-0999,10-18,1900-1999,20-49,500-899,9000-9999 + 00-01,020-029,0300-0399,040-089,0900-0999,10-18,1900-1999,20-49,500-899 + 9000-9999 9959 agency="Libya" 0-1,20-79,800-949,9500-9699,970-979,98-99 9960 agency="Saudi Arabia" @@ -318,7 +322,7 @@ 99902 agency="Gabon (reserved)" 99903 agency="Mauritius" 0-1,20-89,900-999 - 99904 agency="Netherlands Antilles and Aruba" + 99904 agency="Curaçao" 0-5,60-89,900-999 99905 agency="Bolivia" 0-3,40-79,800-999 @@ -459,9 +463,13 @@ 40-79,800-999 99975 agency="Tajikistan" 0-3,40-79,800-999 + 99976 agency="Srpska, Republic of" + 0-1,20-59,600-799 979 - 10-11 + 10-12 10 agency="France" 00-19,200-699,7000-8999,90000-97599,976000-999999 11 agency="Korea, Republic" 00-24,250-549,5500-8499,85000-94999,950000-999999 + 12 agency="Italy" + 200-200 From fbb03161eec04454431dc4e3099b6d1a3706edcc Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 5 Jul 2014 22:38:07 +0200 Subject: [PATCH 003/654] Use ElementTree for simpler XML parsing --- getisbn.py | 111 ++++++++++++++++++++++------------------------------- 1 file changed, 46 insertions(+), 65 deletions(-) diff --git a/getisbn.py b/getisbn.py index 49f7c0c1..53775655 100755 --- a/getisbn.py +++ b/getisbn.py @@ -25,17 +25,24 @@ to correctly split ISBNs into an EAN.UCC prefix, a group prefix, a registrant, an item number and a check-digit.""" -import xml.sax +from xml.etree import ElementTree import urllib -# The place where the current version of RangeMessage.xml can be downloaded. +# the location of the ISBN Ranges XML file download_url = 'https://www.isbn-international.org/export_rangemessage.xml' -def _wrap(text): - """Generator that returns lines of text that are no longer than - max_len.""" +def ranges(group): + for rule in group.find('Rules').findall('Rule'): + length = int(rule.find('Length').text.strip()) + if length: + yield '-'.join( + x[:length] + for x in rule.find('Range').text.strip().split('-')) + + +def wrap(text): while text: i = len(text) if i > 73: @@ -44,66 +51,40 @@ def _wrap(text): text = text[i + 1:] -class RangeHandler(xml.sax.ContentHandler): - - def __init__(self): - self._gather = None - self._prefix = None - self._agency = None - self._range = None - self._length = None - self._ranges = [] - self._last = None - self._topranges = {} - - def startElement(self, name, attrs): - if name in ('MessageSerialNumber', 'MessageDate', 'Prefix', - 'Agency', 'Range', 'Length'): - self._gather = '' - - def characters(self, content): - if self._gather is not None: - self._gather += content - - def endElement(self, name): - if name == 'MessageSerialNumber': - print '# file serial %s' % self._gather.strip() - elif name == 'MessageDate': - print '# file date %s' % self._gather.strip() - elif name == 'Prefix': - self._prefix = self._gather.strip() - elif name == 'Agency': - self._agency = self._gather.strip() - elif name == 'Range': - self._range = self._gather.strip() - elif name == 'Length': - self._length = int(self._gather.strip()) - elif name == 'Rule' and self._length: - self._ranges.append(tuple(x[:self._length] - for x in self._range.split('-'))) - elif name == 'Rules': - if '-' in self._prefix: - p, a = self._prefix.split('-') - if p != self._last: - print p - self._last = p - for line in _wrap(','.join(r[0] + '-' + r[1] - for r in self._topranges[p])): - print ' %s' % line - print (' %s agency="%s"' % (a, self._agency)).encode('utf-8') - for line in _wrap(','.join(r[0] + '-' + r[1] - for r in self._ranges)): - print ' %s' % line - else: - self._topranges[self._prefix] = self._ranges - self._ranges = [] - self._gather = None +def get(f=None): + if f is None: + yield '# generated from RangeMessage.xml, downloaded from' + yield '# %s' % download_url + f = urllib.urlopen(download_url) + else: + yield '# generated from %r' % f + + # parse XML document + msg = ElementTree.parse(f).getroot() + + # dump data from document + yield '# file serial %s' % msg.find('MessageSerialNumber').text.strip() + yield '# file date %s' % msg.find('MessageDate').text.strip() + + top_groups = dict( + (x.find('Prefix').text.strip(), x) + for x in msg.find('EAN.UCCPrefixes').findall('EAN.UCC')) + + prevtop = None + for group in msg.find('RegistrationGroups').findall('Group'): + top, prefix = group.find('Prefix').text.strip().split('-') + agency = group.find('Agency').text.strip() + if top != prevtop: + yield top + for line in wrap(','.join(ranges(top_groups[top]))): + yield ' %s' % line + prevtop = top + yield ' %s agency="%s"' % (prefix, agency) + for line in wrap(','.join(ranges(group))): + yield ' %s' % line if __name__ == '__main__': - print '# generated from RangeMessage.xml, downloaded from' - print '# %s' % download_url - parser = xml.sax.make_parser() - parser.setContentHandler(RangeHandler()) - parser.parse(urllib.urlopen(download_url)) - #parser.parse('RangeMessage.xml') + # get('RangeMessage.xml') + for row in get(): + print row.encode('utf-8') From 86f60a2acb592a6ac6260867f8c9d423fc25d9d8 Mon Sep 17 00:00:00 2001 From: Tony Bajan Date: Mon, 1 Sep 2014 14:22:19 +0100 Subject: [PATCH 004/654] Add US bank routing transit numbers --- stdnum/us/rtn.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 stdnum/us/rtn.py diff --git a/stdnum/us/rtn.py b/stdnum/us/rtn.py new file mode 100644 index 00000000..17ba1a8d --- /dev/null +++ b/stdnum/us/rtn.py @@ -0,0 +1,87 @@ +# rtn.py - functions for handling banking routing transit numbers +# +# Copyright (C) 2014 Lifealike Ltd +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""RTN (Routing transport number). + +The routing transport number is a nine digit number used in the US banking +system for processing deposits between banks. + +The last digit is a checksum. + +>>> calc_check_digit('11100002') +'5' +>>> validate('111000025') +'111000025' +>>> validate('11100002') # Not nine digits +Traceback (most recent call last): + ... +InvalidLength: .. +>>> validate('11100002B') # Not all numeric +Traceback (most recent call last): + ... +InvalidFormat: .. +>>> validate('112000025') # bad checksum +Traceback (most recent call last): + ... +InvalidChecksum: .. +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any surrounding whitespace.""" + number = clean(number).strip() + return number + + +def calc_check_digit(number): + """Calculate the check digit. The number passed should not have the + check digit included.""" + digits = [int(c) for c in number] + checksum = ( + 7 * (digits[0] + digits[3] + digits[6]) + + 3 * (digits[1] + digits[4] + digits[7]) + + 9 * (digits[2] + digits[5]) + ) % 10 + return str(checksum) + + +def validate(number): + """Checks to see if the number provided is a valid routing number. This + checks the length and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 9: + raise InvalidLength() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid RTN. This checks the + length and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 123e9cbce5ba219e183799dcc3ea8d08e64213f3 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 5 Oct 2014 22:46:56 +0200 Subject: [PATCH 005/654] Update URLs for Malaysian code lists This updates the URLs for the state and country codes as published by the National Registration Department of Malaysia and changes the parsing to the new page layout. This also updates the data file. https://github.com/arthurdejong/python-stdnum/issues/14 --- getmybp.py | 15 ++++++------ stdnum/my/bp.dat | 59 +++++++++++++++++++++++++----------------------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/getmybp.py b/getmybp.py index 3f84924a..53da0157 100755 --- a/getmybp.py +++ b/getmybp.py @@ -27,8 +27,8 @@ # URLs that are downloaded -state_list_url = 'http://www.jpn.gov.my/en/informasi/states-code' -country_list_url = 'http://www.jpn.gov.my/en/informasi/country-code' +state_list_url = 'http://www.jpn.gov.my/informasi/kod-negeri/' +country_list_url = 'http://www.jpn.gov.my/en/informasi/kod-negara/' spaces_re = re.compile('\s+', re.UNICODE) @@ -43,7 +43,7 @@ def parse(f): """Parse the specified file.""" soup = BeautifulSoup.BeautifulSoup(f, convertEntities='html') # find all table rows - for tr in soup.find('div', id='content').findAll('tr'): + for tr in soup.find('div', id='inner-main').findAll('tr'): # find the rows with four columns of text tds = [ clean(''.join(x.string for x in td.findAll(text=True))) @@ -56,19 +56,19 @@ def parse(f): if __name__ == '__main__': - results = defaultdict(lambda : defaultdict(list)) + results = defaultdict(lambda : defaultdict(set)) # read the states #f = open('/tmp/states.html', 'r') f = urllib.urlopen(state_list_url) for state, bps in parse(f): for bp in bps.split(','): results[bp.strip()]['state'] = state - results[bp.strip()]['countries'].append('Malaysia') + results[bp.strip()]['countries'].add('Malaysia') # read the countries #f = open('/tmp/countries.html', 'r') f = urllib.urlopen(country_list_url) for country, bp in parse(f): - results[bp]['countries'].append(country) + results[bp]['countries'].add(country) # print the results print '# generated from National Registration Department of Malaysia, downloaded from' print '# %s' % state_list_url @@ -79,7 +79,8 @@ def parse(f): row = results[bp] if 'state' in row: res += ' state="%s"' % row['state'] - countries = row['countries'] + countries = list(row['countries']) + countries.sort() if len(countries) == 1: res += ' country="%s"' % countries[0] if len(countries) > 0: diff --git a/stdnum/my/bp.dat b/stdnum/my/bp.dat index 40231fd6..64929479 100644 --- a/stdnum/my/bp.dat +++ b/stdnum/my/bp.dat @@ -1,6 +1,6 @@ # generated from National Registration Department of Malaysia, downloaded from -# http://www.jpn.gov.my/en/informasi/states-code -# http://www.jpn.gov.my/en/informasi/country-code +# http://www.jpn.gov.my/informasi/kod-negeri/ +# http://www.jpn.gov.my/en/informasi/kod-negara/ 01 state="Johor" country="Malaysia" countries="Malaysia" 02 state="Kedah" country="Malaysia" countries="Malaysia" @@ -57,30 +57,33 @@ 57 state="Wilayah Persekutuan (Kuala Lumpur)" country="Malaysia" countries="Malaysia" 58 state="Wilayah Persekutuan (Labuan)" country="Malaysia" countries="Malaysia" 59 state="Negeri Sembilan" country="Malaysia" countries="Malaysia" -60 country="Brunei" countries="Brunei" -61 country="Indonesia" countries="Indonesia" -62 countries="Cambodia, Kampuchea" -63 country="Laos" countries="Laos" -64 country="Mynmar" countries="Mynmar" -65 country="Filipina" countries="Filipina" -66 country="Singapura" countries="Singapura" -67 country="Thailand" countries="Thailand" -68 country="Vietnam" countries="Vietnam" -74 country="China" countries="China" -75 country="India" countries="India" -76 country="Pakistan" countries="Pakistan" -77 country="Arab Saudi" countries="Arab Saudi" -78 country="Sri Lanka" countries="Sri Lanka" -79 country="Bangladesh" countries="Bangladesh" +60 country="BRUNEI" countries="BRUNEI" +61 country="INDONESIA" countries="INDONESIA" +62 countries="CAMBODIA, DEMOCRATIC KAMPUCHE, KAMPUCHEA" +63 country="LAOS" countries="LAOS" +64 countries="BURMA, MYANMAR" +65 country="PHILIPPINES" countries="PHILIPPINES" +66 country="SINGAPURA" countries="SINGAPURA" +67 country="THAILAND" countries="THAILAND" +68 country="VIETNAM" countries="VIETNAM" +71,72 country="LUAR NEGARA" countries="LUAR NEGARA" +74 country="CHINA" countries="CHINA" +75 country="INDIA" countries="INDIA" +76 country="PAKISTAN" countries="PAKISTAN" +77 countries="ARAB SAUDI, SAUDI ARABIA" +78 country="SRI LANKA" countries="SRI LANKA" +79 country="BANGLADESH" countries="BANGLADESH" 82 state="Negeri Tidak Diketahui" country="Malaysia" countries="Malaysia" -83 countries="Australia, American Samoa, Macedonia, New Zealand, New Caledonia, Papua New Gurney, Fiji, Timor Leste" -84 countries="Argentina, Anguilla, Aruba, Bolivia, Brazil, Paraguay, Peru, Chile, Colombia, Equador, Uruguay, Venezuela" -85 countries="Algeria, Angola, Kenya, Afrika Tengah, Liberia, Afrika Selatan, Mali, Mauritania, Morocco, Malawi, Botswana, Mozambique, Burundi, Nigeria, Namibia, Cameroon, Chad, Rwanda, Senegal, Sierra Leone, Somalia, Djibouti, Sudan, Egypt, Ethopia, Swaziland, Eritrea, Gambia, Ghana, Tunisia, Tanzania, Tonga, Togo, Uganda, Zaire, Zambia, Zimbabwe" -86 countries="Austria, Luxembourg, Armenia, Malta, Monaco, Belgium, Nitherlands, Norway, Cyprus, Portugal, Denmark, Sweeden, Spain, Switzerland, France, Finland, Slovakia, Slovenia, Greece, Germany, Holy See (Vatican City), Italy" -87 countries="Britain, Ireland" -88 countries="Jordan, Kuwait, Lebanon, Bahrain, Oman, Qatar, Syria, Turkey, United Arab Emirate, Iran, Iraq, Israel, Yemen" -89 countries="Japan, Korea Selatan, Korea Utara, Taiwan" -90 countries="Jamaica, Bahamas, Barbados, Belize, Mexico, Nicaragua, Panama, Puerto Rico, Costa Rica, Cuba, Dominica, El Salvador, Grenada, Guatemala, Trinidad&Tobado, Haiti, Honduras" -91 countries="Canada, Greenland, United State" -92 countries="Albania, Albania, Latvia, Lithuania, Bulgaria, Byelorussia, Bosnia, Belarus, Poland, Romania, Russia, Czechoslovakia, Crotia, Esthonia, Serbia, Georgia, Hungary, Ukraine" -93 countries="Afghanistan, Antigua & Barbuda, Kazakhstan, Andorra/Andora, Libya, Arzebaijan, Antartica, Maldives, Madagascar, Mauritius, Mongolia, Benin, Maghribi, Bhutan, Macau, Nepal, Bermuda, Burkina faso/Burkina, Bora-bora, Bouvet Island, Palestine, Cape Verde, Comoros, Seychelles, Soloman Islands, Samoa, San Marino, Guinea, Gibraltar, Tajikistan, Tukmenistan, Hong Kong, Uzbekistan, Ivory Coast, Vanuatu, Iceland, Yugoslavia" +83 countries="AMERICAN SAMOA, ASIA PASIFIK, AUSTRALIA, CHRISTMAS ISLAND, COCOS(KEELING) ISLANDS, COOK ISLANDS, FIJI, FRENCH POLYNESIA, GUAM, HEARD AND MCDONALD ISLANDS, MARSHALL ISLANDS, MICRONESIA, NEW CALEDONIA, NEW ZEALAND, NIUE, NORFOLK ISLANDS, PAPUA NEW GUINEA, TIMOR LESTE, TOKELAU, UNITED STATES MINOR OUTLYING ISLANDS, WALLIS AND FUTUNA ISLANDS" +84 countries="AMERIKA SELATAN, ANGUILLA, ARGENTINA, ARUBA, BOLIVIA, BRAZIL, CHILE, COLOMBIA, ECUADOR, FRENCH GUIANA, GUADELOUPE, GUYANA, PARAGUAY, PERU, SOUTH GEORGIA & THE SOUTH SANDWICH ISLANDS, SURINAME, URUGUAY, VENEZUELA" +85 countries="AFRIKA, AFRIKA SELATAN, ALGERIA, ANGOLA, BOTSWANA, BURUNDI, CAMEROON, CENTRAL AFRICAN REPUBLIC, CHAD, CONGO-BRAZZAVILLE, CONGO-KINSHASA, DJIBOUTI, EGYPT, ERITREA, ETHIOPIA, GABON, GAMBIA, GHANA, GUINEA, KENYA, LIBERIA, MALAWI, MALI, MAURITANIA, MAYOTTE, MOROCCO, MOZAMBIQUE, NAMIBIA, NIGER, NIGERIA, REUNION, RWANDA, SENEGAL, SIERRA LEONE, SOMALIA, SUDAN, SWAZILAND, TANZANIA, TOGO, TONGA, TUNISIA, UGANDA, WESTERN SAHARA, ZAIRE, ZAMBIA, ZIMBABWE" +86 countries="ARMENIA, AUSTRIA, BELGIUM, CYPRUS, DENMARK, EUROPAH, FAEROE ISLANDS, FINLAND, FINLAND, METROPOLITAN, FRANCE, GERMANY, GERMANY (DEM.REP), GERMANY (FED.REP), GREECE, HOLY SEE (VATICAN CITY), ITALY, LUXEMBOURG, MACEDONIA, MALTA, MEDITERANEAN, MONACO, NETHERLANDS, NORWAY, PORTUGAL, REP. OF MOLDOVA, SLOVAKIA, SLOVENIA, SPAIN, SWEDEN, SWITZERLAND, UK-DEPENDENT TERRITORIES CIT, UK-NATIONAL OVERSEAS, UK-OVERSEAS CITIZEN, UK-PROTECTED PERSON, UK-SUBJECT" +87 countries="BRITAIN, GREAT BRITAIN, IRELAND" +88 countries="BAHRAIN, IRAN, IRAQ, ISRAEL, JORDAN, KUWAIT, LEBANON, OMAN, QATAR, REPUBLIC OF YEMEN, SYRIA, TIMUR TENGAH, TURKEY, UNITED ARAB EMIRATE, YEMEN ARAB REP., YEMEN PEOPLE DEM.RE" +89 countries="JAPAN, KOREA (SELATAN), KOREA (UTARA), TAIWAN, TIMUR JAUH" +90 countries="BAHAMAS, BARBADOS, BELIZE, CARIBBEAN, COSTA RICA, CUBA, DOMINICA, DOMINICAN REPUBLIC, EL SALVADOR, GRENADA, GUATEMALA, HAITI, HONDURAS, JAMAICA, MARTINIQUE, MEXICO, NICARAGUA, PANAMA, PUERTO RICO, ST. KITTS AND NEVIS, ST. LUCIA, ST. VINCENT AND THE GRENADINES, TRINIDAD & TOBAGO, TURKS AND CAICOS ISLANDS, VIRGIN ISLANDS (USA)" +91 countries="AMERIKA UTARA, CANADA, GREENLAND, NETHERLANDS ANTILLES, ST. PIERRE AND MIQUELON, UNITED STATES OF AMERICA" +92 countries="ALBANIA, BELARUS, BOSNIA HERZEGOVINA, BULGARIA, BYELORUSSIA, CROATIA, CZECH REPUBLIC, CZECHOSLOVAKIA, ESTONIA, GEORGIA, HUNGARY, LATVIA, LITHUANIA, MONTENEGRO, POLAND, REPUBLIC OF KOSOVO, ROMANIA, RUSSIAN FEDERATION, SERBIA, U.S.S.R, UKRAINE" +93 countries="AFGHANISTAN, ANDORRA/ANDORA, ANTARTICA, ANTIGUA & BARBUDA, AZERBAIJAN, BENIN, BERMUDA, BHUTAN, BORA-BORA, BOUVET ISLAND, BRITISH INDIAN OCEAN TERRITORY, BURKINA FASO/BURKINA, CAPE VERDE, CAYMAN ISLANDS, COMOROS, DAHOMEY, EQUATORIAL GUINEA, FALKLAND ISLANDS, FRENCH SOUTHERN TERRITORIES, GIBRALTAR, GUINEA-BISSAU, HONG KONG, ICELAND, IVORY COAST, KAZAKHSTAN, KIRIBATI, KYRGYZSTAN, LESOTHO, LIBYA, LIECHTENSTEIN, MACAU, MADAGASCAR, MAGHRIBI, MALAGASY, MALDIVES, MAURITIUS, MONGOLIA, MONTSERRAT, NAURU, NEPAL, NORTHERN MARIANAS ISLANDS, OUTER MONGOLIA, PALAU, PALESTINE, PITCAIRN ISLANDS, SAMAO BARAT, SAMOA, SAN MARINO, SAO TOME & PRINCIPE, SEYCHELLES, SOLOMON ISLANDS, ST. HELENA, ST.LUCIA, ST.VICENT, SVALBARD AND JAN MAYEN ISLANDS, SWAPO, TAJIKISTAN, TURKMENISTAN, TUVALU, UPPER VOLTA, UZBEKISTAN, VANUATU, VATICAN CITY, VIRGIN ISLANDS (BRITISH), WESTERN SAMOA, YUGOSLAVIA" +98 countries="STATELESS PERSON ARTICLE 1/1954, Tanpa Negara" +99 countries="MAKLUMAT TIADA, MEKAH, NEUTRAL ZONE, REFUGEE, REFUGEE ARTICLE 1/1951, UN SPECIALIZED AGENCY, UNITED NATIONS ORGANIZATION, UNSPECIFIED NATIONALITY" From 97ac94d10084cbdce72203d5863e1547e7dc6ec9 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 5 Oct 2014 23:19:55 +0200 Subject: [PATCH 006/654] Update NRIC tests --- stdnum/my/nric.py | 4 ++-- tests/test_my_nric.doctest | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/stdnum/my/nric.py b/stdnum/my/nric.py index 0178c12b..0eb88440 100644 --- a/stdnum/my/nric.py +++ b/stdnum/my/nric.py @@ -1,6 +1,6 @@ # nric.py - functions for handling NRIC numbers # -# Copyright (C) 2013 Arthur de Jong +# Copyright (C) 2013, 2014 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -33,7 +33,7 @@ Traceback (most recent call last): ... InvalidComponent: ... ->>> validate('770305-99-1234') # unknown birth place code +>>> validate('770305-17-1234') # unknown birth place code Traceback (most recent call last): ... InvalidComponent: ... diff --git a/tests/test_my_nric.doctest b/tests/test_my_nric.doctest index 91aa2aa6..a68a9327 100644 --- a/tests/test_my_nric.doctest +++ b/tests/test_my_nric.doctest @@ -1,6 +1,6 @@ test_my_nric.doctest - more detailed doctests for stdnum.my.nric module -Copyright (C) 2013 Arthur de Jong +Copyright (C) 2013, 2014 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -56,10 +56,10 @@ Get the birth place: 'Kedah' >>> str(nric.get_birth_place('890131-06-1224')['state']) 'Pahang' ->>> str(nric.get_birth_place('810909785542')['country']) -'Sri Lanka' ->>> str(nric.get_birth_place('880229875542')['countries']) -'Britain, Ireland' +>>> str(nric.get_birth_place('810909785542')['country']).upper() +'SRI LANKA' +>>> str(nric.get_birth_place('880229875542')['countries']).upper() +'BRITAIN, GREAT BRITAIN, IRELAND' Formatting: @@ -104,7 +104,7 @@ InvalidComponent: ... Traceback (most recent call last): ... InvalidComponent: ... ->>> nric.validate('880229995542') +>>> nric.validate('880229195542') Traceback (most recent call last): ... InvalidComponent: ... From e9eb5460d3b5eefd30c6c4571920ed3457f8802c Mon Sep 17 00:00:00 2001 From: Jiangge Zhang Date: Sun, 5 Oct 2014 02:08:48 +0800 Subject: [PATCH 007/654] Add stdnum.cn package for Chinese (PRC) numbers --- stdnum/cn/__init__.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 stdnum/cn/__init__.py diff --git a/stdnum/cn/__init__.py b/stdnum/cn/__init__.py new file mode 100644 index 00000000..78e0bf61 --- /dev/null +++ b/stdnum/cn/__init__.py @@ -0,0 +1,21 @@ +# __init__.py - collection of United States numbers +# coding: utf-8 +# +# Copyright (C) 2014 Jiangge Zhang +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of China (PRC) numbers.""" From 10ae5481a79aeed997eec4314c0e4681c7bf833e Mon Sep 17 00:00:00 2001 From: Jiangge Zhang Date: Sun, 5 Oct 2014 04:02:21 +0800 Subject: [PATCH 008/654] Download locations from the China (PRC) government site --- getcnloc.py | 111 ++ stdnum/cn/loc.dat | 3138 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 3249 insertions(+) create mode 100755 getcnloc.py create mode 100644 stdnum/cn/loc.dat diff --git a/getcnloc.py b/getcnloc.py new file mode 100755 index 00000000..9126be73 --- /dev/null +++ b/getcnloc.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python + +# getcnloc.py - script to fetch data from the China (PRC) government site +# +# Copyright (C) 2014 Jiangge Zhang +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +from __future__ import print_function, unicode_literals + +import sys +import codecs +from urlparse import urljoin +from operator import itemgetter +from datetime import datetime + +import requests +import lxml.html + + +revisions_url = 'http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/' + + +def make_etree(response, encoding='utf-8'): + if not response.ok: + args = (response.status_code, response.reason, response.url) + print('%d %s: %s' % args, file=sys.stderr) + sys.exit(-1) + response.encoding = encoding + return lxml.html.fromstring(response.text) + + +def iter_revisions(): + html = make_etree(requests.get(revisions_url)) + anchors = html.xpath('.//div[@class="center_list"]/ul/li/a') + for anchor in anchors: + url = urljoin(revisions_url, anchor.attrib['href']) + date_text = anchor.findtext('.//span/*[@class="cont_tit02"]') + date = datetime.strptime(date_text, '%Y-%m-%d').date() + yield url, date + + +def iter_records(url): + html = make_etree(requests.get(url)) + lines = html.xpath('.//div[@class="xilan_con"]//p/text()') + for line in lines: + try: + city_code, city_name = line.strip().split() + except ValueError: + if line.strip(): + print('invalid line: %r' % line, file=sys.stderr) + else: + yield city_code.strip(), city_name.strip() + + +def group_records(): + url, _ = max(iter_revisions(), key=itemgetter(1)) # latest revision + + provinces = {} + prefectures = {} + + for city_code, city_name in iter_records(url): + province_code = city_code[:2] + prefecture_code = city_code[2:4] + county_code = city_code[4:6] + + county_name = None + + if prefecture_code == '00': + provinces[province_code] = city_name + elif county_code == '00': + prefectures[prefecture_code] = city_name + else: + county_name = city_name + + yield city_code, dict( + province=provinces.get(province_code), + prefecture=prefectures.get(prefecture_code), + county=county_name) + + +def print_data_file(file): + print("# generated from National Bureau of Statistics of the People's", + file=file) + print('# Republic of China, downloaded from %s' % revisions_url, file=file) + for city_code, city_data in group_records(): + if not all(city_data.values()): + continue + city_pairs = ' '.join( + '%s="%s"' % (k, v) for k, v in sorted(city_data.items()) if v) + print('%s %s' % (city_code, city_pairs), file=file) + + +if __name__ == '__main__': + if sys.stdout.isatty(): + print_data_file(sys.stdout) + else: + print_data_file(codecs.getwriter('utf-8')(sys.stdout)) diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat new file mode 100644 index 00000000..b394fde6 --- /dev/null +++ b/stdnum/cn/loc.dat @@ -0,0 +1,3138 @@ +# generated from National Bureau of Statistics of the People's +# Republic of China, downloaded from http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/ +110101 county="东城区" prefecture="市辖区" province="北京市" +110102 county="西城区" prefecture="市辖区" province="北京市" +110105 county="朝阳区" prefecture="市辖区" province="北京市" +110106 county="丰台区" prefecture="市辖区" province="北京市" +110107 county="石景山区" prefecture="市辖区" province="北京市" +110108 county="海淀区" prefecture="市辖区" province="北京市" +110109 county="门头沟区" prefecture="市辖区" province="北京市" +110111 county="房山区" prefecture="市辖区" province="北京市" +110112 county="通州区" prefecture="市辖区" province="北京市" +110113 county="顺义区" prefecture="市辖区" province="北京市" +110114 county="昌平区" prefecture="市辖区" province="北京市" +110115 county="大兴区" prefecture="市辖区" province="北京市" +110116 county="怀柔区" prefecture="市辖区" province="北京市" +110117 county="平谷区" prefecture="市辖区" province="北京市" +110228 county="密云县" prefecture="县" province="北京市" +110229 county="延庆县" prefecture="县" province="北京市" +120101 county="和平区" prefecture="市辖区" province="天津市" +120102 county="河东区" prefecture="市辖区" province="天津市" +120103 county="河西区" prefecture="市辖区" province="天津市" +120104 county="南开区" prefecture="市辖区" province="天津市" +120105 county="河北区" prefecture="市辖区" province="天津市" +120106 county="红桥区" prefecture="市辖区" province="天津市" +120110 county="东丽区" prefecture="市辖区" province="天津市" +120111 county="西青区" prefecture="市辖区" province="天津市" +120112 county="津南区" prefecture="市辖区" province="天津市" +120113 county="北辰区" prefecture="市辖区" province="天津市" +120114 county="武清区" prefecture="市辖区" province="天津市" +120115 county="宝坻区" prefecture="市辖区" province="天津市" +120116 county="滨海新区" prefecture="市辖区" province="天津市" +120221 county="宁河县" prefecture="县" province="天津市" +120223 county="静海县" prefecture="县" province="天津市" +120225 county="蓟县" prefecture="县" province="天津市" +130101 county="市辖区" prefecture="石家庄市" province="河北省" +130102 county="长安区" prefecture="石家庄市" province="河北省" +130103 county="桥东区" prefecture="石家庄市" province="河北省" +130104 county="桥西区" prefecture="石家庄市" province="河北省" +130105 county="新华区" prefecture="石家庄市" province="河北省" +130107 county="井陉矿区" prefecture="石家庄市" province="河北省" +130108 county="裕华区" prefecture="石家庄市" province="河北省" +130121 county="井陉县" prefecture="石家庄市" province="河北省" +130123 county="正定县" prefecture="石家庄市" province="河北省" +130124 county="栾城县" prefecture="石家庄市" province="河北省" +130125 county="行唐县" prefecture="石家庄市" province="河北省" +130126 county="灵寿县" prefecture="石家庄市" province="河北省" +130127 county="高邑县" prefecture="石家庄市" province="河北省" +130128 county="深泽县" prefecture="石家庄市" province="河北省" +130129 county="赞皇县" prefecture="石家庄市" province="河北省" +130130 county="无极县" prefecture="石家庄市" province="河北省" +130131 county="平山县" prefecture="石家庄市" province="河北省" +130132 county="元氏县" prefecture="石家庄市" province="河北省" +130133 county="赵县" prefecture="石家庄市" province="河北省" +130181 county="辛集市" prefecture="石家庄市" province="河北省" +130182 county="藁城市" prefecture="石家庄市" province="河北省" +130183 county="晋州市" prefecture="石家庄市" province="河北省" +130184 county="新乐市" prefecture="石家庄市" province="河北省" +130185 county="鹿泉市" prefecture="石家庄市" province="河北省" +130201 county="市辖区" prefecture="唐山市" province="河北省" +130202 county="路南区" prefecture="唐山市" province="河北省" +130203 county="路北区" prefecture="唐山市" province="河北省" +130204 county="古冶区" prefecture="唐山市" province="河北省" +130205 county="开平区" prefecture="唐山市" province="河北省" +130207 county="丰南区" prefecture="唐山市" province="河北省" +130208 county="丰润区" prefecture="唐山市" province="河北省" +130209 county="曹妃甸区" prefecture="唐山市" province="河北省" +130223 county="滦县" prefecture="唐山市" province="河北省" +130224 county="滦南县" prefecture="唐山市" province="河北省" +130225 county="乐亭县" prefecture="唐山市" province="河北省" +130227 county="迁西县" prefecture="唐山市" province="河北省" +130229 county="玉田县" prefecture="唐山市" province="河北省" +130281 county="遵化市" prefecture="唐山市" province="河北省" +130283 county="迁安市" prefecture="唐山市" province="河北省" +130301 county="市辖区" prefecture="秦皇岛市" province="河北省" +130302 county="海港区" prefecture="秦皇岛市" province="河北省" +130303 county="山海关区" prefecture="秦皇岛市" province="河北省" +130304 county="北戴河区" prefecture="秦皇岛市" province="河北省" +130321 county="青龙满族自治县" prefecture="秦皇岛市" province="河北省" +130322 county="昌黎县" prefecture="秦皇岛市" province="河北省" +130323 county="抚宁县" prefecture="秦皇岛市" province="河北省" +130324 county="卢龙县" prefecture="秦皇岛市" province="河北省" +130401 county="市辖区" prefecture="邯郸市" province="河北省" +130402 county="邯山区" prefecture="邯郸市" province="河北省" +130403 county="丛台区" prefecture="邯郸市" province="河北省" +130404 county="复兴区" prefecture="邯郸市" province="河北省" +130406 county="峰峰矿区" prefecture="邯郸市" province="河北省" +130421 county="邯郸县" prefecture="邯郸市" province="河北省" +130423 county="临漳县" prefecture="邯郸市" province="河北省" +130424 county="成安县" prefecture="邯郸市" province="河北省" +130425 county="大名县" prefecture="邯郸市" province="河北省" +130426 county="涉县" prefecture="邯郸市" province="河北省" +130427 county="磁县" prefecture="邯郸市" province="河北省" +130428 county="肥乡县" prefecture="邯郸市" province="河北省" +130429 county="永年县" prefecture="邯郸市" province="河北省" +130430 county="邱县" prefecture="邯郸市" province="河北省" +130431 county="鸡泽县" prefecture="邯郸市" province="河北省" +130432 county="广平县" prefecture="邯郸市" province="河北省" +130433 county="馆陶县" prefecture="邯郸市" province="河北省" +130434 county="魏县" prefecture="邯郸市" province="河北省" +130435 county="曲周县" prefecture="邯郸市" province="河北省" +130481 county="武安市" prefecture="邯郸市" province="河北省" +130501 county="市辖区" prefecture="邢台市" province="河北省" +130502 county="桥东区" prefecture="邢台市" province="河北省" +130503 county="桥西区" prefecture="邢台市" province="河北省" +130521 county="邢台县" prefecture="邢台市" province="河北省" +130522 county="临城县" prefecture="邢台市" province="河北省" +130523 county="内丘县" prefecture="邢台市" province="河北省" +130524 county="柏乡县" prefecture="邢台市" province="河北省" +130525 county="隆尧县" prefecture="邢台市" province="河北省" +130526 county="任县" prefecture="邢台市" province="河北省" +130527 county="南和县" prefecture="邢台市" province="河北省" +130528 county="宁晋县" prefecture="邢台市" province="河北省" +130529 county="巨鹿县" prefecture="邢台市" province="河北省" +130530 county="新河县" prefecture="邢台市" province="河北省" +130531 county="广宗县" prefecture="邢台市" province="河北省" +130532 county="平乡县" prefecture="邢台市" province="河北省" +130533 county="威县" prefecture="邢台市" province="河北省" +130534 county="清河县" prefecture="邢台市" province="河北省" +130535 county="临西县" prefecture="邢台市" province="河北省" +130581 county="南宫市" prefecture="邢台市" province="河北省" +130582 county="沙河市" prefecture="邢台市" province="河北省" +130601 county="市辖区" prefecture="保定市" province="河北省" +130602 county="新市区" prefecture="保定市" province="河北省" +130603 county="北市区" prefecture="保定市" province="河北省" +130604 county="南市区" prefecture="保定市" province="河北省" +130621 county="满城县" prefecture="保定市" province="河北省" +130622 county="清苑县" prefecture="保定市" province="河北省" +130623 county="涞水县" prefecture="保定市" province="河北省" +130624 county="阜平县" prefecture="保定市" province="河北省" +130625 county="徐水县" prefecture="保定市" province="河北省" +130626 county="定兴县" prefecture="保定市" province="河北省" +130627 county="唐县" prefecture="保定市" province="河北省" +130628 county="高阳县" prefecture="保定市" province="河北省" +130629 county="容城县" prefecture="保定市" province="河北省" +130630 county="涞源县" prefecture="保定市" province="河北省" +130631 county="望都县" prefecture="保定市" province="河北省" +130632 county="安新县" prefecture="保定市" province="河北省" +130633 county="易县" prefecture="保定市" province="河北省" +130634 county="曲阳县" prefecture="保定市" province="河北省" +130635 county="蠡县" prefecture="保定市" province="河北省" +130636 county="顺平县" prefecture="保定市" province="河北省" +130637 county="博野县" prefecture="保定市" province="河北省" +130638 county="雄县" prefecture="保定市" province="河北省" +130681 county="涿州市" prefecture="保定市" province="河北省" +130682 county="定州市" prefecture="保定市" province="河北省" +130683 county="安国市" prefecture="保定市" province="河北省" +130684 county="高碑店市" prefecture="保定市" province="河北省" +130701 county="市辖区" prefecture="张家口市" province="河北省" +130702 county="桥东区" prefecture="张家口市" province="河北省" +130703 county="桥西区" prefecture="张家口市" province="河北省" +130705 county="宣化区" prefecture="张家口市" province="河北省" +130706 county="下花园区" prefecture="张家口市" province="河北省" +130721 county="宣化县" prefecture="张家口市" province="河北省" +130722 county="张北县" prefecture="张家口市" province="河北省" +130723 county="康保县" prefecture="张家口市" province="河北省" +130724 county="沽源县" prefecture="张家口市" province="河北省" +130725 county="尚义县" prefecture="张家口市" province="河北省" +130726 county="蔚县" prefecture="张家口市" province="河北省" +130727 county="阳原县" prefecture="张家口市" province="河北省" +130728 county="怀安县" prefecture="张家口市" province="河北省" +130729 county="万全县" prefecture="张家口市" province="河北省" +130730 county="怀来县" prefecture="张家口市" province="河北省" +130731 county="涿鹿县" prefecture="张家口市" province="河北省" +130732 county="赤城县" prefecture="张家口市" province="河北省" +130733 county="崇礼县" prefecture="张家口市" province="河北省" +130801 county="市辖区" prefecture="承德市" province="河北省" +130802 county="双桥区" prefecture="承德市" province="河北省" +130803 county="双滦区" prefecture="承德市" province="河北省" +130804 county="鹰手营子矿区" prefecture="承德市" province="河北省" +130821 county="承德县" prefecture="承德市" province="河北省" +130822 county="兴隆县" prefecture="承德市" province="河北省" +130823 county="平泉县" prefecture="承德市" province="河北省" +130824 county="滦平县" prefecture="承德市" province="河北省" +130825 county="隆化县" prefecture="承德市" province="河北省" +130826 county="丰宁满族自治县" prefecture="承德市" province="河北省" +130827 county="宽城满族自治县" prefecture="承德市" province="河北省" +130828 county="围场满族蒙古族自治县" prefecture="承德市" province="河北省" +130901 county="市辖区" prefecture="沧州市" province="河北省" +130902 county="新华区" prefecture="沧州市" province="河北省" +130903 county="运河区" prefecture="沧州市" province="河北省" +130921 county="沧县" prefecture="沧州市" province="河北省" +130922 county="青县" prefecture="沧州市" province="河北省" +130923 county="东光县" prefecture="沧州市" province="河北省" +130924 county="海兴县" prefecture="沧州市" province="河北省" +130925 county="盐山县" prefecture="沧州市" province="河北省" +130926 county="肃宁县" prefecture="沧州市" province="河北省" +130927 county="南皮县" prefecture="沧州市" province="河北省" +130928 county="吴桥县" prefecture="沧州市" province="河北省" +130929 county="献县" prefecture="沧州市" province="河北省" +130930 county="孟村回族自治县" prefecture="沧州市" province="河北省" +130981 county="泊头市" prefecture="沧州市" province="河北省" +130982 county="任丘市" prefecture="沧州市" province="河北省" +130983 county="黄骅市" prefecture="沧州市" province="河北省" +130984 county="河间市" prefecture="沧州市" province="河北省" +131001 county="市辖区" prefecture="廊坊市" province="河北省" +131002 county="安次区" prefecture="廊坊市" province="河北省" +131003 county="广阳区" prefecture="廊坊市" province="河北省" +131022 county="固安县" prefecture="廊坊市" province="河北省" +131023 county="永清县" prefecture="廊坊市" province="河北省" +131024 county="香河县" prefecture="廊坊市" province="河北省" +131025 county="大城县" prefecture="廊坊市" province="河北省" +131026 county="文安县" prefecture="廊坊市" province="河北省" +131028 county="大厂回族自治县" prefecture="廊坊市" province="河北省" +131081 county="霸州市" prefecture="廊坊市" province="河北省" +131082 county="三河市" prefecture="廊坊市" province="河北省" +131101 county="市辖区" prefecture="衡水市" province="河北省" +131102 county="桃城区" prefecture="衡水市" province="河北省" +131121 county="枣强县" prefecture="衡水市" province="河北省" +131122 county="武邑县" prefecture="衡水市" province="河北省" +131123 county="武强县" prefecture="衡水市" province="河北省" +131124 county="饶阳县" prefecture="衡水市" province="河北省" +131125 county="安平县" prefecture="衡水市" province="河北省" +131126 county="故城县" prefecture="衡水市" province="河北省" +131127 county="景县" prefecture="衡水市" province="河北省" +131128 county="阜城县" prefecture="衡水市" province="河北省" +131181 county="冀州市" prefecture="衡水市" province="河北省" +131182 county="深州市" prefecture="衡水市" province="河北省" +140101 county="市辖区" prefecture="太原市" province="山西省" +140105 county="小店区" prefecture="太原市" province="山西省" +140106 county="迎泽区" prefecture="太原市" province="山西省" +140107 county="杏花岭区" prefecture="太原市" province="山西省" +140108 county="尖草坪区" prefecture="太原市" province="山西省" +140109 county="万柏林区" prefecture="太原市" province="山西省" +140110 county="晋源区" prefecture="太原市" province="山西省" +140121 county="清徐县" prefecture="太原市" province="山西省" +140122 county="阳曲县" prefecture="太原市" province="山西省" +140123 county="娄烦县" prefecture="太原市" province="山西省" +140181 county="古交市" prefecture="太原市" province="山西省" +140201 county="市辖区" prefecture="大同市" province="山西省" +140202 county="城区" prefecture="大同市" province="山西省" +140203 county="矿区" prefecture="大同市" province="山西省" +140211 county="南郊区" prefecture="大同市" province="山西省" +140212 county="新荣区" prefecture="大同市" province="山西省" +140221 county="阳高县" prefecture="大同市" province="山西省" +140222 county="天镇县" prefecture="大同市" province="山西省" +140223 county="广灵县" prefecture="大同市" province="山西省" +140224 county="灵丘县" prefecture="大同市" province="山西省" +140225 county="浑源县" prefecture="大同市" province="山西省" +140226 county="左云县" prefecture="大同市" province="山西省" +140227 county="大同县" prefecture="大同市" province="山西省" +140301 county="市辖区" prefecture="阳泉市" province="山西省" +140302 county="城区" prefecture="阳泉市" province="山西省" +140303 county="矿区" prefecture="阳泉市" province="山西省" +140311 county="郊区" prefecture="阳泉市" province="山西省" +140321 county="平定县" prefecture="阳泉市" province="山西省" +140322 county="盂县" prefecture="阳泉市" province="山西省" +140401 county="市辖区" prefecture="长治市" province="山西省" +140402 county="城区" prefecture="长治市" province="山西省" +140411 county="郊区" prefecture="长治市" province="山西省" +140421 county="长治县" prefecture="长治市" province="山西省" +140423 county="襄垣县" prefecture="长治市" province="山西省" +140424 county="屯留县" prefecture="长治市" province="山西省" +140425 county="平顺县" prefecture="长治市" province="山西省" +140426 county="黎城县" prefecture="长治市" province="山西省" +140427 county="壶关县" prefecture="长治市" province="山西省" +140428 county="长子县" prefecture="长治市" province="山西省" +140429 county="武乡县" prefecture="长治市" province="山西省" +140430 county="沁县" prefecture="长治市" province="山西省" +140431 county="沁源县" prefecture="长治市" province="山西省" +140481 county="潞城市" prefecture="长治市" province="山西省" +140501 county="市辖区" prefecture="晋城市" province="山西省" +140502 county="城区" prefecture="晋城市" province="山西省" +140521 county="沁水县" prefecture="晋城市" province="山西省" +140522 county="阳城县" prefecture="晋城市" province="山西省" +140524 county="陵川县" prefecture="晋城市" province="山西省" +140525 county="泽州县" prefecture="晋城市" province="山西省" +140581 county="高平市" prefecture="晋城市" province="山西省" +140601 county="市辖区" prefecture="朔州市" province="山西省" +140602 county="朔城区" prefecture="朔州市" province="山西省" +140603 county="平鲁区" prefecture="朔州市" province="山西省" +140621 county="山阴县" prefecture="朔州市" province="山西省" +140622 county="应县" prefecture="朔州市" province="山西省" +140623 county="右玉县" prefecture="朔州市" province="山西省" +140624 county="怀仁县" prefecture="朔州市" province="山西省" +140701 county="市辖区" prefecture="晋中市" province="山西省" +140702 county="榆次区" prefecture="晋中市" province="山西省" +140721 county="榆社县" prefecture="晋中市" province="山西省" +140722 county="左权县" prefecture="晋中市" province="山西省" +140723 county="和顺县" prefecture="晋中市" province="山西省" +140724 county="昔阳县" prefecture="晋中市" province="山西省" +140725 county="寿阳县" prefecture="晋中市" province="山西省" +140726 county="太谷县" prefecture="晋中市" province="山西省" +140727 county="祁县" prefecture="晋中市" province="山西省" +140728 county="平遥县" prefecture="晋中市" province="山西省" +140729 county="灵石县" prefecture="晋中市" province="山西省" +140781 county="介休市" prefecture="晋中市" province="山西省" +140801 county="市辖区" prefecture="运城市" province="山西省" +140802 county="盐湖区" prefecture="运城市" province="山西省" +140821 county="临猗县" prefecture="运城市" province="山西省" +140822 county="万荣县" prefecture="运城市" province="山西省" +140823 county="闻喜县" prefecture="运城市" province="山西省" +140824 county="稷山县" prefecture="运城市" province="山西省" +140825 county="新绛县" prefecture="运城市" province="山西省" +140826 county="绛县" prefecture="运城市" province="山西省" +140827 county="垣曲县" prefecture="运城市" province="山西省" +140828 county="夏县" prefecture="运城市" province="山西省" +140829 county="平陆县" prefecture="运城市" province="山西省" +140830 county="芮城县" prefecture="运城市" province="山西省" +140881 county="永济市" prefecture="运城市" province="山西省" +140882 county="河津市" prefecture="运城市" province="山西省" +140901 county="市辖区" prefecture="忻州市" province="山西省" +140902 county="忻府区" prefecture="忻州市" province="山西省" +140921 county="定襄县" prefecture="忻州市" province="山西省" +140922 county="五台县" prefecture="忻州市" province="山西省" +140923 county="代县" prefecture="忻州市" province="山西省" +140924 county="繁峙县" prefecture="忻州市" province="山西省" +140925 county="宁武县" prefecture="忻州市" province="山西省" +140926 county="静乐县" prefecture="忻州市" province="山西省" +140927 county="神池县" prefecture="忻州市" province="山西省" +140928 county="五寨县" prefecture="忻州市" province="山西省" +140929 county="岢岚县" prefecture="忻州市" province="山西省" +140930 county="河曲县" prefecture="忻州市" province="山西省" +140931 county="保德县" prefecture="忻州市" province="山西省" +140932 county="偏关县" prefecture="忻州市" province="山西省" +140981 county="原平市" prefecture="忻州市" province="山西省" +141001 county="市辖区" prefecture="临汾市" province="山西省" +141002 county="尧都区" prefecture="临汾市" province="山西省" +141021 county="曲沃县" prefecture="临汾市" province="山西省" +141022 county="翼城县" prefecture="临汾市" province="山西省" +141023 county="襄汾县" prefecture="临汾市" province="山西省" +141024 county="洪洞县" prefecture="临汾市" province="山西省" +141025 county="古县" prefecture="临汾市" province="山西省" +141026 county="安泽县" prefecture="临汾市" province="山西省" +141027 county="浮山县" prefecture="临汾市" province="山西省" +141028 county="吉县" prefecture="临汾市" province="山西省" +141029 county="乡宁县" prefecture="临汾市" province="山西省" +141030 county="大宁县" prefecture="临汾市" province="山西省" +141031 county="隰县" prefecture="临汾市" province="山西省" +141032 county="永和县" prefecture="临汾市" province="山西省" +141033 county="蒲县" prefecture="临汾市" province="山西省" +141034 county="汾西县" prefecture="临汾市" province="山西省" +141081 county="侯马市" prefecture="临汾市" province="山西省" +141082 county="霍州市" prefecture="临汾市" province="山西省" +141101 county="市辖区" prefecture="吕梁市" province="山西省" +141102 county="离石区" prefecture="吕梁市" province="山西省" +141121 county="文水县" prefecture="吕梁市" province="山西省" +141122 county="交城县" prefecture="吕梁市" province="山西省" +141123 county="兴县" prefecture="吕梁市" province="山西省" +141124 county="临县" prefecture="吕梁市" province="山西省" +141125 county="柳林县" prefecture="吕梁市" province="山西省" +141126 county="石楼县" prefecture="吕梁市" province="山西省" +141127 county="岚县" prefecture="吕梁市" province="山西省" +141128 county="方山县" prefecture="吕梁市" province="山西省" +141129 county="中阳县" prefecture="吕梁市" province="山西省" +141130 county="交口县" prefecture="吕梁市" province="山西省" +141181 county="孝义市" prefecture="吕梁市" province="山西省" +141182 county="汾阳市" prefecture="吕梁市" province="山西省" +150101 county="市辖区" prefecture="呼和浩特市" province="内蒙古自治区" +150102 county="新城区" prefecture="呼和浩特市" province="内蒙古自治区" +150103 county="回民区" prefecture="呼和浩特市" province="内蒙古自治区" +150104 county="玉泉区" prefecture="呼和浩特市" province="内蒙古自治区" +150105 county="赛罕区" prefecture="呼和浩特市" province="内蒙古自治区" +150121 county="土默特左旗" prefecture="呼和浩特市" province="内蒙古自治区" +150122 county="托克托县" prefecture="呼和浩特市" province="内蒙古自治区" +150123 county="和林格尔县" prefecture="呼和浩特市" province="内蒙古自治区" +150124 county="清水河县" prefecture="呼和浩特市" province="内蒙古自治区" +150125 county="武川县" prefecture="呼和浩特市" province="内蒙古自治区" +150201 county="市辖区" prefecture="包头市" province="内蒙古自治区" +150202 county="东河区" prefecture="包头市" province="内蒙古自治区" +150203 county="昆都仑区" prefecture="包头市" province="内蒙古自治区" +150204 county="青山区" prefecture="包头市" province="内蒙古自治区" +150205 county="石拐区" prefecture="包头市" province="内蒙古自治区" +150206 county="白云鄂博矿区" prefecture="包头市" province="内蒙古自治区" +150207 county="九原区" prefecture="包头市" province="内蒙古自治区" +150221 county="土默特右旗" prefecture="包头市" province="内蒙古自治区" +150222 county="固阳县" prefecture="包头市" province="内蒙古自治区" +150223 county="达尔罕茂明安联合旗" prefecture="包头市" province="内蒙古自治区" +150301 county="市辖区" prefecture="乌海市" province="内蒙古自治区" +150302 county="海勃湾区" prefecture="乌海市" province="内蒙古自治区" +150303 county="海南区" prefecture="乌海市" province="内蒙古自治区" +150304 county="乌达区" prefecture="乌海市" province="内蒙古自治区" +150401 county="市辖区" prefecture="赤峰市" province="内蒙古自治区" +150402 county="红山区" prefecture="赤峰市" province="内蒙古自治区" +150403 county="元宝山区" prefecture="赤峰市" province="内蒙古自治区" +150404 county="松山区" prefecture="赤峰市" province="内蒙古自治区" +150421 county="阿鲁科尔沁旗" prefecture="赤峰市" province="内蒙古自治区" +150422 county="巴林左旗" prefecture="赤峰市" province="内蒙古自治区" +150423 county="巴林右旗" prefecture="赤峰市" province="内蒙古自治区" +150424 county="林西县" prefecture="赤峰市" province="内蒙古自治区" +150425 county="克什克腾旗" prefecture="赤峰市" province="内蒙古自治区" +150426 county="翁牛特旗" prefecture="赤峰市" province="内蒙古自治区" +150428 county="喀喇沁旗" prefecture="赤峰市" province="内蒙古自治区" +150429 county="宁城县" prefecture="赤峰市" province="内蒙古自治区" +150430 county="敖汉旗" prefecture="赤峰市" province="内蒙古自治区" +150501 county="市辖区" prefecture="通辽市" province="内蒙古自治区" +150502 county="科尔沁区" prefecture="通辽市" province="内蒙古自治区" +150521 county="科尔沁左翼中旗" prefecture="通辽市" province="内蒙古自治区" +150522 county="科尔沁左翼后旗" prefecture="通辽市" province="内蒙古自治区" +150523 county="开鲁县" prefecture="通辽市" province="内蒙古自治区" +150524 county="库伦旗" prefecture="通辽市" province="内蒙古自治区" +150525 county="奈曼旗" prefecture="通辽市" province="内蒙古自治区" +150526 county="扎鲁特旗" prefecture="通辽市" province="内蒙古自治区" +150581 county="霍林郭勒市" prefecture="通辽市" province="内蒙古自治区" +150601 county="市辖区" prefecture="鄂尔多斯市" province="内蒙古自治区" +150602 county="东胜区" prefecture="鄂尔多斯市" province="内蒙古自治区" +150621 county="达拉特旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150622 county="准格尔旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150623 county="鄂托克前旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150624 county="鄂托克旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150625 county="杭锦旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150626 county="乌审旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150627 county="伊金霍洛旗" prefecture="鄂尔多斯市" province="内蒙古自治区" +150701 county="市辖区" prefecture="呼伦贝尔市" province="内蒙古自治区" +150702 county="海拉尔区" prefecture="呼伦贝尔市" province="内蒙古自治区" +150703 county="扎赉诺尔区" prefecture="呼伦贝尔市" province="内蒙古自治区" +150721 county="阿荣旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150722 county="莫力达瓦达斡尔族自治旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150723 county="鄂伦春自治旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150724 county="鄂温克族自治旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150725 county="陈巴尔虎旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150726 county="新巴尔虎左旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150727 county="新巴尔虎右旗" prefecture="呼伦贝尔市" province="内蒙古自治区" +150781 county="满洲里市" prefecture="呼伦贝尔市" province="内蒙古自治区" +150782 county="牙克石市" prefecture="呼伦贝尔市" province="内蒙古自治区" +150783 county="扎兰屯市" prefecture="呼伦贝尔市" province="内蒙古自治区" +150784 county="额尔古纳市" prefecture="呼伦贝尔市" province="内蒙古自治区" +150785 county="根河市" prefecture="呼伦贝尔市" province="内蒙古自治区" +150801 county="市辖区" prefecture="巴彦淖尔市" province="内蒙古自治区" +150802 county="临河区" prefecture="巴彦淖尔市" province="内蒙古自治区" +150821 county="五原县" prefecture="巴彦淖尔市" province="内蒙古自治区" +150822 county="磴口县" prefecture="巴彦淖尔市" province="内蒙古自治区" +150823 county="乌拉特前旗" prefecture="巴彦淖尔市" province="内蒙古自治区" +150824 county="乌拉特中旗" prefecture="巴彦淖尔市" province="内蒙古自治区" +150825 county="乌拉特后旗" prefecture="巴彦淖尔市" province="内蒙古自治区" +150826 county="杭锦后旗" prefecture="巴彦淖尔市" province="内蒙古自治区" +150901 county="市辖区" prefecture="乌兰察布市" province="内蒙古自治区" +150902 county="集宁区" prefecture="乌兰察布市" province="内蒙古自治区" +150921 county="卓资县" prefecture="乌兰察布市" province="内蒙古自治区" +150922 county="化德县" prefecture="乌兰察布市" province="内蒙古自治区" +150923 county="商都县" prefecture="乌兰察布市" province="内蒙古自治区" +150924 county="兴和县" prefecture="乌兰察布市" province="内蒙古自治区" +150925 county="凉城县" prefecture="乌兰察布市" province="内蒙古自治区" +150926 county="察哈尔右翼前旗" prefecture="乌兰察布市" province="内蒙古自治区" +150927 county="察哈尔右翼中旗" prefecture="乌兰察布市" province="内蒙古自治区" +150928 county="察哈尔右翼后旗" prefecture="乌兰察布市" province="内蒙古自治区" +150929 county="四子王旗" prefecture="乌兰察布市" province="内蒙古自治区" +150981 county="丰镇市" prefecture="乌兰察布市" province="内蒙古自治区" +152201 county="乌兰浩特市" prefecture="兴安盟" province="内蒙古自治区" +152202 county="阿尔山市" prefecture="兴安盟" province="内蒙古自治区" +152221 county="科尔沁右翼前旗" prefecture="兴安盟" province="内蒙古自治区" +152222 county="科尔沁右翼中旗" prefecture="兴安盟" province="内蒙古自治区" +152223 county="扎赉特旗" prefecture="兴安盟" province="内蒙古自治区" +152224 county="突泉县" prefecture="兴安盟" province="内蒙古自治区" +152501 county="二连浩特市" prefecture="锡林郭勒盟" province="内蒙古自治区" +152502 county="锡林浩特市" prefecture="锡林郭勒盟" province="内蒙古自治区" +152522 county="阿巴嘎旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152523 county="苏尼特左旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152524 county="苏尼特右旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152525 county="东乌珠穆沁旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152526 county="西乌珠穆沁旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152527 county="太仆寺旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152528 county="镶黄旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152529 county="正镶白旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152530 county="正蓝旗" prefecture="锡林郭勒盟" province="内蒙古自治区" +152531 county="多伦县" prefecture="锡林郭勒盟" province="内蒙古自治区" +152921 county="阿拉善左旗" prefecture="阿拉善盟" province="内蒙古自治区" +152922 county="阿拉善右旗" prefecture="阿拉善盟" province="内蒙古自治区" +152923 county="额济纳旗" prefecture="阿拉善盟" province="内蒙古自治区" +210101 county="市辖区" prefecture="沈阳市" province="辽宁省" +210102 county="和平区" prefecture="沈阳市" province="辽宁省" +210103 county="沈河区" prefecture="沈阳市" province="辽宁省" +210104 county="大东区" prefecture="沈阳市" province="辽宁省" +210105 county="皇姑区" prefecture="沈阳市" province="辽宁省" +210106 county="铁西区" prefecture="沈阳市" province="辽宁省" +210111 county="苏家屯区" prefecture="沈阳市" province="辽宁省" +210112 county="东陵区" prefecture="沈阳市" province="辽宁省" +210113 county="沈北新区" prefecture="沈阳市" province="辽宁省" +210114 county="于洪区" prefecture="沈阳市" province="辽宁省" +210122 county="辽中县" prefecture="沈阳市" province="辽宁省" +210123 county="康平县" prefecture="沈阳市" province="辽宁省" +210124 county="法库县" prefecture="沈阳市" province="辽宁省" +210181 county="新民市" prefecture="沈阳市" province="辽宁省" +210201 county="市辖区" prefecture="大连市" province="辽宁省" +210202 county="中山区" prefecture="大连市" province="辽宁省" +210203 county="西岗区" prefecture="大连市" province="辽宁省" +210204 county="沙河口区" prefecture="大连市" province="辽宁省" +210211 county="甘井子区" prefecture="大连市" province="辽宁省" +210212 county="旅顺口区" prefecture="大连市" province="辽宁省" +210213 county="金州区" prefecture="大连市" province="辽宁省" +210224 county="长海县" prefecture="大连市" province="辽宁省" +210281 county="瓦房店市" prefecture="大连市" province="辽宁省" +210282 county="普兰店市" prefecture="大连市" province="辽宁省" +210283 county="庄河市" prefecture="大连市" province="辽宁省" +210301 county="市辖区" prefecture="鞍山市" province="辽宁省" +210302 county="铁东区" prefecture="鞍山市" province="辽宁省" +210303 county="铁西区" prefecture="鞍山市" province="辽宁省" +210304 county="立山区" prefecture="鞍山市" province="辽宁省" +210311 county="千山区" prefecture="鞍山市" province="辽宁省" +210321 county="台安县" prefecture="鞍山市" province="辽宁省" +210323 county="岫岩满族自治县" prefecture="鞍山市" province="辽宁省" +210381 county="海城市" prefecture="鞍山市" province="辽宁省" +210401 county="市辖区" prefecture="抚顺市" province="辽宁省" +210402 county="新抚区" prefecture="抚顺市" province="辽宁省" +210403 county="东洲区" prefecture="抚顺市" province="辽宁省" +210404 county="望花区" prefecture="抚顺市" province="辽宁省" +210411 county="顺城区" prefecture="抚顺市" province="辽宁省" +210421 county="抚顺县" prefecture="抚顺市" province="辽宁省" +210422 county="新宾满族自治县" prefecture="抚顺市" province="辽宁省" +210423 county="清原满族自治县" prefecture="抚顺市" province="辽宁省" +210501 county="市辖区" prefecture="本溪市" province="辽宁省" +210502 county="平山区" prefecture="本溪市" province="辽宁省" +210503 county="溪湖区" prefecture="本溪市" province="辽宁省" +210504 county="明山区" prefecture="本溪市" province="辽宁省" +210505 county="南芬区" prefecture="本溪市" province="辽宁省" +210521 county="本溪满族自治县" prefecture="本溪市" province="辽宁省" +210522 county="桓仁满族自治县" prefecture="本溪市" province="辽宁省" +210601 county="市辖区" prefecture="丹东市" province="辽宁省" +210602 county="元宝区" prefecture="丹东市" province="辽宁省" +210603 county="振兴区" prefecture="丹东市" province="辽宁省" +210604 county="振安区" prefecture="丹东市" province="辽宁省" +210624 county="宽甸满族自治县" prefecture="丹东市" province="辽宁省" +210681 county="东港市" prefecture="丹东市" province="辽宁省" +210682 county="凤城市" prefecture="丹东市" province="辽宁省" +210701 county="市辖区" prefecture="锦州市" province="辽宁省" +210702 county="古塔区" prefecture="锦州市" province="辽宁省" +210703 county="凌河区" prefecture="锦州市" province="辽宁省" +210711 county="太和区" prefecture="锦州市" province="辽宁省" +210726 county="黑山县" prefecture="锦州市" province="辽宁省" +210727 county="义县" prefecture="锦州市" province="辽宁省" +210781 county="凌海市" prefecture="锦州市" province="辽宁省" +210782 county="北镇市" prefecture="锦州市" province="辽宁省" +210801 county="市辖区" prefecture="营口市" province="辽宁省" +210802 county="站前区" prefecture="营口市" province="辽宁省" +210803 county="西市区" prefecture="营口市" province="辽宁省" +210804 county="鲅鱼圈区" prefecture="营口市" province="辽宁省" +210811 county="老边区" prefecture="营口市" province="辽宁省" +210881 county="盖州市" prefecture="营口市" province="辽宁省" +210882 county="大石桥市" prefecture="营口市" province="辽宁省" +210901 county="市辖区" prefecture="阜新市" province="辽宁省" +210902 county="海州区" prefecture="阜新市" province="辽宁省" +210903 county="新邱区" prefecture="阜新市" province="辽宁省" +210904 county="太平区" prefecture="阜新市" province="辽宁省" +210905 county="清河门区" prefecture="阜新市" province="辽宁省" +210911 county="细河区" prefecture="阜新市" province="辽宁省" +210921 county="阜新蒙古族自治县" prefecture="阜新市" province="辽宁省" +210922 county="彰武县" prefecture="阜新市" province="辽宁省" +211001 county="市辖区" prefecture="辽阳市" province="辽宁省" +211002 county="白塔区" prefecture="辽阳市" province="辽宁省" +211003 county="文圣区" prefecture="辽阳市" province="辽宁省" +211004 county="宏伟区" prefecture="辽阳市" province="辽宁省" +211005 county="弓长岭区" prefecture="辽阳市" province="辽宁省" +211011 county="太子河区" prefecture="辽阳市" province="辽宁省" +211021 county="辽阳县" prefecture="辽阳市" province="辽宁省" +211081 county="灯塔市" prefecture="辽阳市" province="辽宁省" +211101 county="市辖区" prefecture="盘锦市" province="辽宁省" +211102 county="双台子区" prefecture="盘锦市" province="辽宁省" +211103 county="兴隆台区" prefecture="盘锦市" province="辽宁省" +211121 county="大洼县" prefecture="盘锦市" province="辽宁省" +211122 county="盘山县" prefecture="盘锦市" province="辽宁省" +211201 county="市辖区" prefecture="铁岭市" province="辽宁省" +211202 county="银州区" prefecture="铁岭市" province="辽宁省" +211204 county="清河区" prefecture="铁岭市" province="辽宁省" +211221 county="铁岭县" prefecture="铁岭市" province="辽宁省" +211223 county="西丰县" prefecture="铁岭市" province="辽宁省" +211224 county="昌图县" prefecture="铁岭市" province="辽宁省" +211281 county="调兵山市" prefecture="铁岭市" province="辽宁省" +211282 county="开原市" prefecture="铁岭市" province="辽宁省" +211301 county="市辖区" prefecture="朝阳市" province="辽宁省" +211302 county="双塔区" prefecture="朝阳市" province="辽宁省" +211303 county="龙城区" prefecture="朝阳市" province="辽宁省" +211321 county="朝阳县" prefecture="朝阳市" province="辽宁省" +211322 county="建平县" prefecture="朝阳市" province="辽宁省" +211324 county="喀喇沁左翼蒙古族自治县" prefecture="朝阳市" province="辽宁省" +211381 county="北票市" prefecture="朝阳市" province="辽宁省" +211382 county="凌源市" prefecture="朝阳市" province="辽宁省" +211401 county="市辖区" prefecture="葫芦岛市" province="辽宁省" +211402 county="连山区" prefecture="葫芦岛市" province="辽宁省" +211403 county="龙港区" prefecture="葫芦岛市" province="辽宁省" +211404 county="南票区" prefecture="葫芦岛市" province="辽宁省" +211421 county="绥中县" prefecture="葫芦岛市" province="辽宁省" +211422 county="建昌县" prefecture="葫芦岛市" province="辽宁省" +211481 county="兴城市" prefecture="葫芦岛市" province="辽宁省" +220101 county="市辖区" prefecture="长春市" province="吉林省" +220102 county="南关区" prefecture="长春市" province="吉林省" +220103 county="宽城区" prefecture="长春市" province="吉林省" +220104 county="朝阳区" prefecture="长春市" province="吉林省" +220105 county="二道区" prefecture="长春市" province="吉林省" +220106 county="绿园区" prefecture="长春市" province="吉林省" +220112 county="双阳区" prefecture="长春市" province="吉林省" +220122 county="农安县" prefecture="长春市" province="吉林省" +220181 county="九台市" prefecture="长春市" province="吉林省" +220182 county="榆树市" prefecture="长春市" province="吉林省" +220183 county="德惠市" prefecture="长春市" province="吉林省" +220201 county="市辖区" prefecture="吉林市" province="吉林省" +220202 county="昌邑区" prefecture="吉林市" province="吉林省" +220203 county="龙潭区" prefecture="吉林市" province="吉林省" +220204 county="船营区" prefecture="吉林市" province="吉林省" +220211 county="丰满区" prefecture="吉林市" province="吉林省" +220221 county="永吉县" prefecture="吉林市" province="吉林省" +220281 county="蛟河市" prefecture="吉林市" province="吉林省" +220282 county="桦甸市" prefecture="吉林市" province="吉林省" +220283 county="舒兰市" prefecture="吉林市" province="吉林省" +220284 county="磐石市" prefecture="吉林市" province="吉林省" +220301 county="市辖区" prefecture="四平市" province="吉林省" +220302 county="铁西区" prefecture="四平市" province="吉林省" +220303 county="铁东区" prefecture="四平市" province="吉林省" +220322 county="梨树县" prefecture="四平市" province="吉林省" +220323 county="伊通满族自治县" prefecture="四平市" province="吉林省" +220381 county="公主岭市" prefecture="四平市" province="吉林省" +220382 county="双辽市" prefecture="四平市" province="吉林省" +220401 county="市辖区" prefecture="辽源市" province="吉林省" +220402 county="龙山区" prefecture="辽源市" province="吉林省" +220403 county="西安区" prefecture="辽源市" province="吉林省" +220421 county="东丰县" prefecture="辽源市" province="吉林省" +220422 county="东辽县" prefecture="辽源市" province="吉林省" +220501 county="市辖区" prefecture="通化市" province="吉林省" +220502 county="东昌区" prefecture="通化市" province="吉林省" +220503 county="二道江区" prefecture="通化市" province="吉林省" +220521 county="通化县" prefecture="通化市" province="吉林省" +220523 county="辉南县" prefecture="通化市" province="吉林省" +220524 county="柳河县" prefecture="通化市" province="吉林省" +220581 county="梅河口市" prefecture="通化市" province="吉林省" +220582 county="集安市" prefecture="通化市" province="吉林省" +220601 county="市辖区" prefecture="白山市" province="吉林省" +220602 county="浑江区" prefecture="白山市" province="吉林省" +220605 county="江源区" prefecture="白山市" province="吉林省" +220621 county="抚松县" prefecture="白山市" province="吉林省" +220622 county="靖宇县" prefecture="白山市" province="吉林省" +220623 county="长白朝鲜族自治县" prefecture="白山市" province="吉林省" +220681 county="临江市" prefecture="白山市" province="吉林省" +220701 county="市辖区" prefecture="松原市" province="吉林省" +220702 county="宁江区" prefecture="松原市" province="吉林省" +220721 county="前郭尔罗斯蒙古族自治县" prefecture="松原市" province="吉林省" +220722 county="长岭县" prefecture="松原市" province="吉林省" +220723 county="乾安县" prefecture="松原市" province="吉林省" +220781 county="扶余市" prefecture="松原市" province="吉林省" +220801 county="市辖区" prefecture="白城市" province="吉林省" +220802 county="洮北区" prefecture="白城市" province="吉林省" +220821 county="镇赉县" prefecture="白城市" province="吉林省" +220822 county="通榆县" prefecture="白城市" province="吉林省" +220881 county="洮南市" prefecture="白城市" province="吉林省" +220882 county="大安市" prefecture="白城市" province="吉林省" +222401 county="延吉市" prefecture="延边朝鲜族自治州" province="吉林省" +222402 county="图们市" prefecture="延边朝鲜族自治州" province="吉林省" +222403 county="敦化市" prefecture="延边朝鲜族自治州" province="吉林省" +222404 county="珲春市" prefecture="延边朝鲜族自治州" province="吉林省" +222405 county="龙井市" prefecture="延边朝鲜族自治州" province="吉林省" +222406 county="和龙市" prefecture="延边朝鲜族自治州" province="吉林省" +222424 county="汪清县" prefecture="延边朝鲜族自治州" province="吉林省" +222426 county="安图县" prefecture="延边朝鲜族自治州" province="吉林省" +230101 county="市辖区" prefecture="哈尔滨市" province="黑龙江省" +230102 county="道里区" prefecture="哈尔滨市" province="黑龙江省" +230103 county="南岗区" prefecture="哈尔滨市" province="黑龙江省" +230104 county="道外区" prefecture="哈尔滨市" province="黑龙江省" +230108 county="平房区" prefecture="哈尔滨市" province="黑龙江省" +230109 county="松北区" prefecture="哈尔滨市" province="黑龙江省" +230110 county="香坊区" prefecture="哈尔滨市" province="黑龙江省" +230111 county="呼兰区" prefecture="哈尔滨市" province="黑龙江省" +230112 county="阿城区" prefecture="哈尔滨市" province="黑龙江省" +230123 county="依兰县" prefecture="哈尔滨市" province="黑龙江省" +230124 county="方正县" prefecture="哈尔滨市" province="黑龙江省" +230125 county="宾县" prefecture="哈尔滨市" province="黑龙江省" +230126 county="巴彦县" prefecture="哈尔滨市" province="黑龙江省" +230127 county="木兰县" prefecture="哈尔滨市" province="黑龙江省" +230128 county="通河县" prefecture="哈尔滨市" province="黑龙江省" +230129 county="延寿县" prefecture="哈尔滨市" province="黑龙江省" +230182 county="双城市" prefecture="哈尔滨市" province="黑龙江省" +230183 county="尚志市" prefecture="哈尔滨市" province="黑龙江省" +230184 county="五常市" prefecture="哈尔滨市" province="黑龙江省" +230201 county="市辖区" prefecture="齐齐哈尔市" province="黑龙江省" +230202 county="龙沙区" prefecture="齐齐哈尔市" province="黑龙江省" +230203 county="建华区" prefecture="齐齐哈尔市" province="黑龙江省" +230204 county="铁锋区" prefecture="齐齐哈尔市" province="黑龙江省" +230205 county="昂昂溪区" prefecture="齐齐哈尔市" province="黑龙江省" +230206 county="富拉尔基区" prefecture="齐齐哈尔市" province="黑龙江省" +230207 county="碾子山区" prefecture="齐齐哈尔市" province="黑龙江省" +230208 county="梅里斯达斡尔族区" prefecture="齐齐哈尔市" province="黑龙江省" +230221 county="龙江县" prefecture="齐齐哈尔市" province="黑龙江省" +230223 county="依安县" prefecture="齐齐哈尔市" province="黑龙江省" +230224 county="泰来县" prefecture="齐齐哈尔市" province="黑龙江省" +230225 county="甘南县" prefecture="齐齐哈尔市" province="黑龙江省" +230227 county="富裕县" prefecture="齐齐哈尔市" province="黑龙江省" +230229 county="克山县" prefecture="齐齐哈尔市" province="黑龙江省" +230230 county="克东县" prefecture="齐齐哈尔市" province="黑龙江省" +230231 county="拜泉县" prefecture="齐齐哈尔市" province="黑龙江省" +230281 county="讷河市" prefecture="齐齐哈尔市" province="黑龙江省" +230301 county="市辖区" prefecture="鸡西市" province="黑龙江省" +230302 county="鸡冠区" prefecture="鸡西市" province="黑龙江省" +230303 county="恒山区" prefecture="鸡西市" province="黑龙江省" +230304 county="滴道区" prefecture="鸡西市" province="黑龙江省" +230305 county="梨树区" prefecture="鸡西市" province="黑龙江省" +230306 county="城子河区" prefecture="鸡西市" province="黑龙江省" +230307 county="麻山区" prefecture="鸡西市" province="黑龙江省" +230321 county="鸡东县" prefecture="鸡西市" province="黑龙江省" +230381 county="虎林市" prefecture="鸡西市" province="黑龙江省" +230382 county="密山市" prefecture="鸡西市" province="黑龙江省" +230401 county="市辖区" prefecture="鹤岗市" province="黑龙江省" +230402 county="向阳区" prefecture="鹤岗市" province="黑龙江省" +230403 county="工农区" prefecture="鹤岗市" province="黑龙江省" +230404 county="南山区" prefecture="鹤岗市" province="黑龙江省" +230405 county="兴安区" prefecture="鹤岗市" province="黑龙江省" +230406 county="东山区" prefecture="鹤岗市" province="黑龙江省" +230407 county="兴山区" prefecture="鹤岗市" province="黑龙江省" +230421 county="萝北县" prefecture="鹤岗市" province="黑龙江省" +230422 county="绥滨县" prefecture="鹤岗市" province="黑龙江省" +230501 county="市辖区" prefecture="双鸭山市" province="黑龙江省" +230502 county="尖山区" prefecture="双鸭山市" province="黑龙江省" +230503 county="岭东区" prefecture="双鸭山市" province="黑龙江省" +230505 county="四方台区" prefecture="双鸭山市" province="黑龙江省" +230506 county="宝山区" prefecture="双鸭山市" province="黑龙江省" +230521 county="集贤县" prefecture="双鸭山市" province="黑龙江省" +230522 county="友谊县" prefecture="双鸭山市" province="黑龙江省" +230523 county="宝清县" prefecture="双鸭山市" province="黑龙江省" +230524 county="饶河县" prefecture="双鸭山市" province="黑龙江省" +230601 county="市辖区" prefecture="大庆市" province="黑龙江省" +230602 county="萨尔图区" prefecture="大庆市" province="黑龙江省" +230603 county="龙凤区" prefecture="大庆市" province="黑龙江省" +230604 county="让胡路区" prefecture="大庆市" province="黑龙江省" +230605 county="红岗区" prefecture="大庆市" province="黑龙江省" +230606 county="大同区" prefecture="大庆市" province="黑龙江省" +230621 county="肇州县" prefecture="大庆市" province="黑龙江省" +230622 county="肇源县" prefecture="大庆市" province="黑龙江省" +230623 county="林甸县" prefecture="大庆市" province="黑龙江省" +230624 county="杜尔伯特蒙古族自治县" prefecture="大庆市" province="黑龙江省" +230701 county="市辖区" prefecture="伊春市" province="黑龙江省" +230702 county="伊春区" prefecture="伊春市" province="黑龙江省" +230703 county="南岔区" prefecture="伊春市" province="黑龙江省" +230704 county="友好区" prefecture="伊春市" province="黑龙江省" +230705 county="西林区" prefecture="伊春市" province="黑龙江省" +230706 county="翠峦区" prefecture="伊春市" province="黑龙江省" +230707 county="新青区" prefecture="伊春市" province="黑龙江省" +230708 county="美溪区" prefecture="伊春市" province="黑龙江省" +230709 county="金山屯区" prefecture="伊春市" province="黑龙江省" +230710 county="五营区" prefecture="伊春市" province="黑龙江省" +230711 county="乌马河区" prefecture="伊春市" province="黑龙江省" +230712 county="汤旺河区" prefecture="伊春市" province="黑龙江省" +230713 county="带岭区" prefecture="伊春市" province="黑龙江省" +230714 county="乌伊岭区" prefecture="伊春市" province="黑龙江省" +230715 county="红星区" prefecture="伊春市" province="黑龙江省" +230716 county="上甘岭区" prefecture="伊春市" province="黑龙江省" +230722 county="嘉荫县" prefecture="伊春市" province="黑龙江省" +230781 county="铁力市" prefecture="伊春市" province="黑龙江省" +230801 county="市辖区" prefecture="佳木斯市" province="黑龙江省" +230803 county="向阳区" prefecture="佳木斯市" province="黑龙江省" +230804 county="前进区" prefecture="佳木斯市" province="黑龙江省" +230805 county="东风区" prefecture="佳木斯市" province="黑龙江省" +230811 county="郊区" prefecture="佳木斯市" province="黑龙江省" +230822 county="桦南县" prefecture="佳木斯市" province="黑龙江省" +230826 county="桦川县" prefecture="佳木斯市" province="黑龙江省" +230828 county="汤原县" prefecture="佳木斯市" province="黑龙江省" +230833 county="抚远县" prefecture="佳木斯市" province="黑龙江省" +230881 county="同江市" prefecture="佳木斯市" province="黑龙江省" +230882 county="富锦市" prefecture="佳木斯市" province="黑龙江省" +230901 county="市辖区" prefecture="七台河市" province="黑龙江省" +230902 county="新兴区" prefecture="七台河市" province="黑龙江省" +230903 county="桃山区" prefecture="七台河市" province="黑龙江省" +230904 county="茄子河区" prefecture="七台河市" province="黑龙江省" +230921 county="勃利县" prefecture="七台河市" province="黑龙江省" +231001 county="市辖区" prefecture="牡丹江市" province="黑龙江省" +231002 county="东安区" prefecture="牡丹江市" province="黑龙江省" +231003 county="阳明区" prefecture="牡丹江市" province="黑龙江省" +231004 county="爱民区" prefecture="牡丹江市" province="黑龙江省" +231005 county="西安区" prefecture="牡丹江市" province="黑龙江省" +231024 county="东宁县" prefecture="牡丹江市" province="黑龙江省" +231025 county="林口县" prefecture="牡丹江市" province="黑龙江省" +231081 county="绥芬河市" prefecture="牡丹江市" province="黑龙江省" +231083 county="海林市" prefecture="牡丹江市" province="黑龙江省" +231084 county="宁安市" prefecture="牡丹江市" province="黑龙江省" +231085 county="穆棱市" prefecture="牡丹江市" province="黑龙江省" +231101 county="市辖区" prefecture="黑河市" province="黑龙江省" +231102 county="爱辉区" prefecture="黑河市" province="黑龙江省" +231121 county="嫩江县" prefecture="黑河市" province="黑龙江省" +231123 county="逊克县" prefecture="黑河市" province="黑龙江省" +231124 county="孙吴县" prefecture="黑河市" province="黑龙江省" +231181 county="北安市" prefecture="黑河市" province="黑龙江省" +231182 county="五大连池市" prefecture="黑河市" province="黑龙江省" +231201 county="市辖区" prefecture="绥化市" province="黑龙江省" +231202 county="北林区" prefecture="绥化市" province="黑龙江省" +231221 county="望奎县" prefecture="绥化市" province="黑龙江省" +231222 county="兰西县" prefecture="绥化市" province="黑龙江省" +231223 county="青冈县" prefecture="绥化市" province="黑龙江省" +231224 county="庆安县" prefecture="绥化市" province="黑龙江省" +231225 county="明水县" prefecture="绥化市" province="黑龙江省" +231226 county="绥棱县" prefecture="绥化市" province="黑龙江省" +231281 county="安达市" prefecture="绥化市" province="黑龙江省" +231282 county="肇东市" prefecture="绥化市" province="黑龙江省" +231283 county="海伦市" prefecture="绥化市" province="黑龙江省" +232721 county="呼玛县" prefecture="大兴安岭地区" province="黑龙江省" +232722 county="塔河县" prefecture="大兴安岭地区" province="黑龙江省" +232723 county="漠河县" prefecture="大兴安岭地区" province="黑龙江省" +310101 county="黄浦区" prefecture="市辖区" province="上海市" +310104 county="徐汇区" prefecture="市辖区" province="上海市" +310105 county="长宁区" prefecture="市辖区" province="上海市" +310106 county="静安区" prefecture="市辖区" province="上海市" +310107 county="普陀区" prefecture="市辖区" province="上海市" +310108 county="闸北区" prefecture="市辖区" province="上海市" +310109 county="虹口区" prefecture="市辖区" province="上海市" +310110 county="杨浦区" prefecture="市辖区" province="上海市" +310112 county="闵行区" prefecture="市辖区" province="上海市" +310113 county="宝山区" prefecture="市辖区" province="上海市" +310114 county="嘉定区" prefecture="市辖区" province="上海市" +310115 county="浦东新区" prefecture="市辖区" province="上海市" +310116 county="金山区" prefecture="市辖区" province="上海市" +310117 county="松江区" prefecture="市辖区" province="上海市" +310118 county="青浦区" prefecture="市辖区" province="上海市" +310120 county="奉贤区" prefecture="市辖区" province="上海市" +310230 county="崇明县" prefecture="县" province="上海市" +320101 county="市辖区" prefecture="南京市" province="江苏省" +320102 county="玄武区" prefecture="南京市" province="江苏省" +320104 county="秦淮区" prefecture="南京市" province="江苏省" +320105 county="建邺区" prefecture="南京市" province="江苏省" +320106 county="鼓楼区" prefecture="南京市" province="江苏省" +320111 county="浦口区" prefecture="南京市" province="江苏省" +320113 county="栖霞区" prefecture="南京市" province="江苏省" +320114 county="雨花台区" prefecture="南京市" province="江苏省" +320115 county="江宁区" prefecture="南京市" province="江苏省" +320116 county="六合区" prefecture="南京市" province="江苏省" +320117 county="溧水区" prefecture="南京市" province="江苏省" +320118 county="高淳区" prefecture="南京市" province="江苏省" +320201 county="市辖区" prefecture="无锡市" province="江苏省" +320202 county="崇安区" prefecture="无锡市" province="江苏省" +320203 county="南长区" prefecture="无锡市" province="江苏省" +320204 county="北塘区" prefecture="无锡市" province="江苏省" +320205 county="锡山区" prefecture="无锡市" province="江苏省" +320206 county="惠山区" prefecture="无锡市" province="江苏省" +320211 county="滨湖区" prefecture="无锡市" province="江苏省" +320281 county="江阴市" prefecture="无锡市" province="江苏省" +320282 county="宜兴市" prefecture="无锡市" province="江苏省" +320301 county="市辖区" prefecture="徐州市" province="江苏省" +320302 county="鼓楼区" prefecture="徐州市" province="江苏省" +320303 county="云龙区" prefecture="徐州市" province="江苏省" +320305 county="贾汪区" prefecture="徐州市" province="江苏省" +320311 county="泉山区" prefecture="徐州市" province="江苏省" +320312 county="铜山区" prefecture="徐州市" province="江苏省" +320321 county="丰县" prefecture="徐州市" province="江苏省" +320322 county="沛县" prefecture="徐州市" province="江苏省" +320324 county="睢宁县" prefecture="徐州市" province="江苏省" +320381 county="新沂市" prefecture="徐州市" province="江苏省" +320382 county="邳州市" prefecture="徐州市" province="江苏省" +320401 county="市辖区" prefecture="常州市" province="江苏省" +320402 county="天宁区" prefecture="常州市" province="江苏省" +320404 county="钟楼区" prefecture="常州市" province="江苏省" +320405 county="戚墅堰区" prefecture="常州市" province="江苏省" +320411 county="新北区" prefecture="常州市" province="江苏省" +320412 county="武进区" prefecture="常州市" province="江苏省" +320481 county="溧阳市" prefecture="常州市" province="江苏省" +320482 county="金坛市" prefecture="常州市" province="江苏省" +320501 county="市辖区" prefecture="苏州市" province="江苏省" +320505 county="虎丘区" prefecture="苏州市" province="江苏省" +320506 county="吴中区" prefecture="苏州市" province="江苏省" +320507 county="相城区" prefecture="苏州市" province="江苏省" +320508 county="姑苏区" prefecture="苏州市" province="江苏省" +320509 county="吴江区" prefecture="苏州市" province="江苏省" +320581 county="常熟市" prefecture="苏州市" province="江苏省" +320582 county="张家港市" prefecture="苏州市" province="江苏省" +320583 county="昆山市" prefecture="苏州市" province="江苏省" +320585 county="太仓市" prefecture="苏州市" province="江苏省" +320601 county="市辖区" prefecture="南通市" province="江苏省" +320602 county="崇川区" prefecture="南通市" province="江苏省" +320611 county="港闸区" prefecture="南通市" province="江苏省" +320612 county="通州区" prefecture="南通市" province="江苏省" +320621 county="海安县" prefecture="南通市" province="江苏省" +320623 county="如东县" prefecture="南通市" province="江苏省" +320681 county="启东市" prefecture="南通市" province="江苏省" +320682 county="如皋市" prefecture="南通市" province="江苏省" +320684 county="海门市" prefecture="南通市" province="江苏省" +320701 county="市辖区" prefecture="连云港市" province="江苏省" +320703 county="连云区" prefecture="连云港市" province="江苏省" +320705 county="新浦区" prefecture="连云港市" province="江苏省" +320706 county="海州区" prefecture="连云港市" province="江苏省" +320721 county="赣榆县" prefecture="连云港市" province="江苏省" +320722 county="东海县" prefecture="连云港市" province="江苏省" +320723 county="灌云县" prefecture="连云港市" province="江苏省" +320724 county="灌南县" prefecture="连云港市" province="江苏省" +320801 county="市辖区" prefecture="淮安市" province="江苏省" +320802 county="清河区" prefecture="淮安市" province="江苏省" +320803 county="淮安区" prefecture="淮安市" province="江苏省" +320804 county="淮阴区" prefecture="淮安市" province="江苏省" +320811 county="清浦区" prefecture="淮安市" province="江苏省" +320826 county="涟水县" prefecture="淮安市" province="江苏省" +320829 county="洪泽县" prefecture="淮安市" province="江苏省" +320830 county="盱眙县" prefecture="淮安市" province="江苏省" +320831 county="金湖县" prefecture="淮安市" province="江苏省" +320901 county="市辖区" prefecture="盐城市" province="江苏省" +320902 county="亭湖区" prefecture="盐城市" province="江苏省" +320903 county="盐都区" prefecture="盐城市" province="江苏省" +320921 county="响水县" prefecture="盐城市" province="江苏省" +320922 county="滨海县" prefecture="盐城市" province="江苏省" +320923 county="阜宁县" prefecture="盐城市" province="江苏省" +320924 county="射阳县" prefecture="盐城市" province="江苏省" +320925 county="建湖县" prefecture="盐城市" province="江苏省" +320981 county="东台市" prefecture="盐城市" province="江苏省" +320982 county="大丰市" prefecture="盐城市" province="江苏省" +321001 county="市辖区" prefecture="扬州市" province="江苏省" +321002 county="广陵区" prefecture="扬州市" province="江苏省" +321003 county="邗江区" prefecture="扬州市" province="江苏省" +321012 county="江都区" prefecture="扬州市" province="江苏省" +321023 county="宝应县" prefecture="扬州市" province="江苏省" +321081 county="仪征市" prefecture="扬州市" province="江苏省" +321084 county="高邮市" prefecture="扬州市" province="江苏省" +321101 county="市辖区" prefecture="镇江市" province="江苏省" +321102 county="京口区" prefecture="镇江市" province="江苏省" +321111 county="润州区" prefecture="镇江市" province="江苏省" +321112 county="丹徒区" prefecture="镇江市" province="江苏省" +321181 county="丹阳市" prefecture="镇江市" province="江苏省" +321182 county="扬中市" prefecture="镇江市" province="江苏省" +321183 county="句容市" prefecture="镇江市" province="江苏省" +321201 county="市辖区" prefecture="泰州市" province="江苏省" +321202 county="海陵区" prefecture="泰州市" province="江苏省" +321203 county="高港区" prefecture="泰州市" province="江苏省" +321204 county="姜堰区" prefecture="泰州市" province="江苏省" +321281 county="兴化市" prefecture="泰州市" province="江苏省" +321282 county="靖江市" prefecture="泰州市" province="江苏省" +321283 county="泰兴市" prefecture="泰州市" province="江苏省" +321301 county="市辖区" prefecture="宿迁市" province="江苏省" +321302 county="宿城区" prefecture="宿迁市" province="江苏省" +321311 county="宿豫区" prefecture="宿迁市" province="江苏省" +321322 county="沭阳县" prefecture="宿迁市" province="江苏省" +321323 county="泗阳县" prefecture="宿迁市" province="江苏省" +321324 county="泗洪县" prefecture="宿迁市" province="江苏省" +330101 county="市辖区" prefecture="杭州市" province="浙江省" +330102 county="上城区" prefecture="杭州市" province="浙江省" +330103 county="下城区" prefecture="杭州市" province="浙江省" +330104 county="江干区" prefecture="杭州市" province="浙江省" +330105 county="拱墅区" prefecture="杭州市" province="浙江省" +330106 county="西湖区" prefecture="杭州市" province="浙江省" +330108 county="滨江区" prefecture="杭州市" province="浙江省" +330109 county="萧山区" prefecture="杭州市" province="浙江省" +330110 county="余杭区" prefecture="杭州市" province="浙江省" +330122 county="桐庐县" prefecture="杭州市" province="浙江省" +330127 county="淳安县" prefecture="杭州市" province="浙江省" +330182 county="建德市" prefecture="杭州市" province="浙江省" +330183 county="富阳市" prefecture="杭州市" province="浙江省" +330185 county="临安市" prefecture="杭州市" province="浙江省" +330201 county="市辖区" prefecture="宁波市" province="浙江省" +330203 county="海曙区" prefecture="宁波市" province="浙江省" +330204 county="江东区" prefecture="宁波市" province="浙江省" +330205 county="江北区" prefecture="宁波市" province="浙江省" +330206 county="北仑区" prefecture="宁波市" province="浙江省" +330211 county="镇海区" prefecture="宁波市" province="浙江省" +330212 county="鄞州区" prefecture="宁波市" province="浙江省" +330225 county="象山县" prefecture="宁波市" province="浙江省" +330226 county="宁海县" prefecture="宁波市" province="浙江省" +330281 county="余姚市" prefecture="宁波市" province="浙江省" +330282 county="慈溪市" prefecture="宁波市" province="浙江省" +330283 county="奉化市" prefecture="宁波市" province="浙江省" +330301 county="市辖区" prefecture="温州市" province="浙江省" +330302 county="鹿城区" prefecture="温州市" province="浙江省" +330303 county="龙湾区" prefecture="温州市" province="浙江省" +330304 county="瓯海区" prefecture="温州市" province="浙江省" +330322 county="洞头县" prefecture="温州市" province="浙江省" +330324 county="永嘉县" prefecture="温州市" province="浙江省" +330326 county="平阳县" prefecture="温州市" province="浙江省" +330327 county="苍南县" prefecture="温州市" province="浙江省" +330328 county="文成县" prefecture="温州市" province="浙江省" +330329 county="泰顺县" prefecture="温州市" province="浙江省" +330381 county="瑞安市" prefecture="温州市" province="浙江省" +330382 county="乐清市" prefecture="温州市" province="浙江省" +330401 county="市辖区" prefecture="嘉兴市" province="浙江省" +330402 county="南湖区" prefecture="嘉兴市" province="浙江省" +330411 county="秀洲区" prefecture="嘉兴市" province="浙江省" +330421 county="嘉善县" prefecture="嘉兴市" province="浙江省" +330424 county="海盐县" prefecture="嘉兴市" province="浙江省" +330481 county="海宁市" prefecture="嘉兴市" province="浙江省" +330482 county="平湖市" prefecture="嘉兴市" province="浙江省" +330483 county="桐乡市" prefecture="嘉兴市" province="浙江省" +330501 county="市辖区" prefecture="湖州市" province="浙江省" +330502 county="吴兴区" prefecture="湖州市" province="浙江省" +330503 county="南浔区" prefecture="湖州市" province="浙江省" +330521 county="德清县" prefecture="湖州市" province="浙江省" +330522 county="长兴县" prefecture="湖州市" province="浙江省" +330523 county="安吉县" prefecture="湖州市" province="浙江省" +330601 county="市辖区" prefecture="绍兴市" province="浙江省" +330602 county="越城区" prefecture="绍兴市" province="浙江省" +330621 county="绍兴县" prefecture="绍兴市" province="浙江省" +330624 county="新昌县" prefecture="绍兴市" province="浙江省" +330681 county="诸暨市" prefecture="绍兴市" province="浙江省" +330682 county="上虞市" prefecture="绍兴市" province="浙江省" +330683 county="嵊州市" prefecture="绍兴市" province="浙江省" +330701 county="市辖区" prefecture="金华市" province="浙江省" +330702 county="婺城区" prefecture="金华市" province="浙江省" +330703 county="金东区" prefecture="金华市" province="浙江省" +330723 county="武义县" prefecture="金华市" province="浙江省" +330726 county="浦江县" prefecture="金华市" province="浙江省" +330727 county="磐安县" prefecture="金华市" province="浙江省" +330781 county="兰溪市" prefecture="金华市" province="浙江省" +330782 county="义乌市" prefecture="金华市" province="浙江省" +330783 county="东阳市" prefecture="金华市" province="浙江省" +330784 county="永康市" prefecture="金华市" province="浙江省" +330801 county="市辖区" prefecture="衢州市" province="浙江省" +330802 county="柯城区" prefecture="衢州市" province="浙江省" +330803 county="衢江区" prefecture="衢州市" province="浙江省" +330822 county="常山县" prefecture="衢州市" province="浙江省" +330824 county="开化县" prefecture="衢州市" province="浙江省" +330825 county="龙游县" prefecture="衢州市" province="浙江省" +330881 county="江山市" prefecture="衢州市" province="浙江省" +330901 county="市辖区" prefecture="舟山市" province="浙江省" +330902 county="定海区" prefecture="舟山市" province="浙江省" +330903 county="普陀区" prefecture="舟山市" province="浙江省" +330921 county="岱山县" prefecture="舟山市" province="浙江省" +330922 county="嵊泗县" prefecture="舟山市" province="浙江省" +331001 county="市辖区" prefecture="台州市" province="浙江省" +331002 county="椒江区" prefecture="台州市" province="浙江省" +331003 county="黄岩区" prefecture="台州市" province="浙江省" +331004 county="路桥区" prefecture="台州市" province="浙江省" +331021 county="玉环县" prefecture="台州市" province="浙江省" +331022 county="三门县" prefecture="台州市" province="浙江省" +331023 county="天台县" prefecture="台州市" province="浙江省" +331024 county="仙居县" prefecture="台州市" province="浙江省" +331081 county="温岭市" prefecture="台州市" province="浙江省" +331082 county="临海市" prefecture="台州市" province="浙江省" +331101 county="市辖区" prefecture="丽水市" province="浙江省" +331102 county="莲都区" prefecture="丽水市" province="浙江省" +331121 county="青田县" prefecture="丽水市" province="浙江省" +331122 county="缙云县" prefecture="丽水市" province="浙江省" +331123 county="遂昌县" prefecture="丽水市" province="浙江省" +331124 county="松阳县" prefecture="丽水市" province="浙江省" +331125 county="云和县" prefecture="丽水市" province="浙江省" +331126 county="庆元县" prefecture="丽水市" province="浙江省" +331127 county="景宁畲族自治县" prefecture="丽水市" province="浙江省" +331181 county="龙泉市" prefecture="丽水市" province="浙江省" +340101 county="市辖区" prefecture="合肥市" province="安徽省" +340102 county="瑶海区" prefecture="合肥市" province="安徽省" +340103 county="庐阳区" prefecture="合肥市" province="安徽省" +340104 county="蜀山区" prefecture="合肥市" province="安徽省" +340111 county="包河区" prefecture="合肥市" province="安徽省" +340121 county="长丰县" prefecture="合肥市" province="安徽省" +340122 county="肥东县" prefecture="合肥市" province="安徽省" +340123 county="肥西县" prefecture="合肥市" province="安徽省" +340124 county="庐江县" prefecture="合肥市" province="安徽省" +340181 county="巢湖市" prefecture="合肥市" province="安徽省" +340201 county="市辖区" prefecture="芜湖市" province="安徽省" +340202 county="镜湖区" prefecture="芜湖市" province="安徽省" +340203 county="弋江区" prefecture="芜湖市" province="安徽省" +340207 county="鸠江区" prefecture="芜湖市" province="安徽省" +340208 county="三山区" prefecture="芜湖市" province="安徽省" +340221 county="芜湖县" prefecture="芜湖市" province="安徽省" +340222 county="繁昌县" prefecture="芜湖市" province="安徽省" +340223 county="南陵县" prefecture="芜湖市" province="安徽省" +340225 county="无为县" prefecture="芜湖市" province="安徽省" +340301 county="市辖区" prefecture="蚌埠市" province="安徽省" +340302 county="龙子湖区" prefecture="蚌埠市" province="安徽省" +340303 county="蚌山区" prefecture="蚌埠市" province="安徽省" +340304 county="禹会区" prefecture="蚌埠市" province="安徽省" +340311 county="淮上区" prefecture="蚌埠市" province="安徽省" +340321 county="怀远县" prefecture="蚌埠市" province="安徽省" +340322 county="五河县" prefecture="蚌埠市" province="安徽省" +340323 county="固镇县" prefecture="蚌埠市" province="安徽省" +340401 county="市辖区" prefecture="淮南市" province="安徽省" +340402 county="大通区" prefecture="淮南市" province="安徽省" +340403 county="田家庵区" prefecture="淮南市" province="安徽省" +340404 county="谢家集区" prefecture="淮南市" province="安徽省" +340405 county="八公山区" prefecture="淮南市" province="安徽省" +340406 county="潘集区" prefecture="淮南市" province="安徽省" +340421 county="凤台县" prefecture="淮南市" province="安徽省" +340501 county="市辖区" prefecture="马鞍山市" province="安徽省" +340503 county="花山区" prefecture="马鞍山市" province="安徽省" +340504 county="雨山区" prefecture="马鞍山市" province="安徽省" +340506 county="博望区" prefecture="马鞍山市" province="安徽省" +340521 county="当涂县" prefecture="马鞍山市" province="安徽省" +340522 county="含山县" prefecture="马鞍山市" province="安徽省" +340523 county="和县" prefecture="马鞍山市" province="安徽省" +340601 county="市辖区" prefecture="淮北市" province="安徽省" +340602 county="杜集区" prefecture="淮北市" province="安徽省" +340603 county="相山区" prefecture="淮北市" province="安徽省" +340604 county="烈山区" prefecture="淮北市" province="安徽省" +340621 county="濉溪县" prefecture="淮北市" province="安徽省" +340701 county="市辖区" prefecture="铜陵市" province="安徽省" +340702 county="铜官山区" prefecture="铜陵市" province="安徽省" +340703 county="狮子山区" prefecture="铜陵市" province="安徽省" +340711 county="郊区" prefecture="铜陵市" province="安徽省" +340721 county="铜陵县" prefecture="铜陵市" province="安徽省" +340801 county="市辖区" prefecture="安庆市" province="安徽省" +340802 county="迎江区" prefecture="安庆市" province="安徽省" +340803 county="大观区" prefecture="安庆市" province="安徽省" +340811 county="宜秀区" prefecture="安庆市" province="安徽省" +340822 county="怀宁县" prefecture="安庆市" province="安徽省" +340823 county="枞阳县" prefecture="安庆市" province="安徽省" +340824 county="潜山县" prefecture="安庆市" province="安徽省" +340825 county="太湖县" prefecture="安庆市" province="安徽省" +340826 county="宿松县" prefecture="安庆市" province="安徽省" +340827 county="望江县" prefecture="安庆市" province="安徽省" +340828 county="岳西县" prefecture="安庆市" province="安徽省" +340881 county="桐城市" prefecture="安庆市" province="安徽省" +341001 county="市辖区" prefecture="黄山市" province="安徽省" +341002 county="屯溪区" prefecture="黄山市" province="安徽省" +341003 county="黄山区" prefecture="黄山市" province="安徽省" +341004 county="徽州区" prefecture="黄山市" province="安徽省" +341021 county="歙县" prefecture="黄山市" province="安徽省" +341022 county="休宁县" prefecture="黄山市" province="安徽省" +341023 county="黟县" prefecture="黄山市" province="安徽省" +341024 county="祁门县" prefecture="黄山市" province="安徽省" +341101 county="市辖区" prefecture="滁州市" province="安徽省" +341102 county="琅琊区" prefecture="滁州市" province="安徽省" +341103 county="南谯区" prefecture="滁州市" province="安徽省" +341122 county="来安县" prefecture="滁州市" province="安徽省" +341124 county="全椒县" prefecture="滁州市" province="安徽省" +341125 county="定远县" prefecture="滁州市" province="安徽省" +341126 county="凤阳县" prefecture="滁州市" province="安徽省" +341181 county="天长市" prefecture="滁州市" province="安徽省" +341182 county="明光市" prefecture="滁州市" province="安徽省" +341201 county="市辖区" prefecture="阜阳市" province="安徽省" +341202 county="颍州区" prefecture="阜阳市" province="安徽省" +341203 county="颍东区" prefecture="阜阳市" province="安徽省" +341204 county="颍泉区" prefecture="阜阳市" province="安徽省" +341221 county="临泉县" prefecture="阜阳市" province="安徽省" +341222 county="太和县" prefecture="阜阳市" province="安徽省" +341225 county="阜南县" prefecture="阜阳市" province="安徽省" +341226 county="颍上县" prefecture="阜阳市" province="安徽省" +341282 county="界首市" prefecture="阜阳市" province="安徽省" +341301 county="市辖区" prefecture="宿州市" province="安徽省" +341302 county="埇桥区" prefecture="宿州市" province="安徽省" +341321 county="砀山县" prefecture="宿州市" province="安徽省" +341322 county="萧县" prefecture="宿州市" province="安徽省" +341323 county="灵璧县" prefecture="宿州市" province="安徽省" +341324 county="泗县" prefecture="宿州市" province="安徽省" +341501 county="市辖区" prefecture="六安市" province="安徽省" +341502 county="金安区" prefecture="六安市" province="安徽省" +341503 county="裕安区" prefecture="六安市" province="安徽省" +341521 county="寿县" prefecture="六安市" province="安徽省" +341522 county="霍邱县" prefecture="六安市" province="安徽省" +341523 county="舒城县" prefecture="六安市" province="安徽省" +341524 county="金寨县" prefecture="六安市" province="安徽省" +341525 county="霍山县" prefecture="六安市" province="安徽省" +341601 county="市辖区" prefecture="亳州市" province="安徽省" +341602 county="谯城区" prefecture="亳州市" province="安徽省" +341621 county="涡阳县" prefecture="亳州市" province="安徽省" +341622 county="蒙城县" prefecture="亳州市" province="安徽省" +341623 county="利辛县" prefecture="亳州市" province="安徽省" +341701 county="市辖区" prefecture="池州市" province="安徽省" +341702 county="贵池区" prefecture="池州市" province="安徽省" +341721 county="东至县" prefecture="池州市" province="安徽省" +341722 county="石台县" prefecture="池州市" province="安徽省" +341723 county="青阳县" prefecture="池州市" province="安徽省" +341801 county="市辖区" prefecture="宣城市" province="安徽省" +341802 county="宣州区" prefecture="宣城市" province="安徽省" +341821 county="郎溪县" prefecture="宣城市" province="安徽省" +341822 county="广德县" prefecture="宣城市" province="安徽省" +341823 county="泾县" prefecture="宣城市" province="安徽省" +341824 county="绩溪县" prefecture="宣城市" province="安徽省" +341825 county="旌德县" prefecture="宣城市" province="安徽省" +341881 county="宁国市" prefecture="宣城市" province="安徽省" +350101 county="市辖区" prefecture="福州市" province="福建省" +350102 county="鼓楼区" prefecture="福州市" province="福建省" +350103 county="台江区" prefecture="福州市" province="福建省" +350104 county="仓山区" prefecture="福州市" province="福建省" +350105 county="马尾区" prefecture="福州市" province="福建省" +350111 county="晋安区" prefecture="福州市" province="福建省" +350121 county="闽侯县" prefecture="福州市" province="福建省" +350122 county="连江县" prefecture="福州市" province="福建省" +350123 county="罗源县" prefecture="福州市" province="福建省" +350124 county="闽清县" prefecture="福州市" province="福建省" +350125 county="永泰县" prefecture="福州市" province="福建省" +350128 county="平潭县" prefecture="福州市" province="福建省" +350181 county="福清市" prefecture="福州市" province="福建省" +350182 county="长乐市" prefecture="福州市" province="福建省" +350201 county="市辖区" prefecture="厦门市" province="福建省" +350203 county="思明区" prefecture="厦门市" province="福建省" +350205 county="海沧区" prefecture="厦门市" province="福建省" +350206 county="湖里区" prefecture="厦门市" province="福建省" +350211 county="集美区" prefecture="厦门市" province="福建省" +350212 county="同安区" prefecture="厦门市" province="福建省" +350213 county="翔安区" prefecture="厦门市" province="福建省" +350301 county="市辖区" prefecture="莆田市" province="福建省" +350302 county="城厢区" prefecture="莆田市" province="福建省" +350303 county="涵江区" prefecture="莆田市" province="福建省" +350304 county="荔城区" prefecture="莆田市" province="福建省" +350305 county="秀屿区" prefecture="莆田市" province="福建省" +350322 county="仙游县" prefecture="莆田市" province="福建省" +350401 county="市辖区" prefecture="三明市" province="福建省" +350402 county="梅列区" prefecture="三明市" province="福建省" +350403 county="三元区" prefecture="三明市" province="福建省" +350421 county="明溪县" prefecture="三明市" province="福建省" +350423 county="清流县" prefecture="三明市" province="福建省" +350424 county="宁化县" prefecture="三明市" province="福建省" +350425 county="大田县" prefecture="三明市" province="福建省" +350426 county="尤溪县" prefecture="三明市" province="福建省" +350427 county="沙县" prefecture="三明市" province="福建省" +350428 county="将乐县" prefecture="三明市" province="福建省" +350429 county="泰宁县" prefecture="三明市" province="福建省" +350430 county="建宁县" prefecture="三明市" province="福建省" +350481 county="永安市" prefecture="三明市" province="福建省" +350501 county="市辖区" prefecture="泉州市" province="福建省" +350502 county="鲤城区" prefecture="泉州市" province="福建省" +350503 county="丰泽区" prefecture="泉州市" province="福建省" +350504 county="洛江区" prefecture="泉州市" province="福建省" +350505 county="泉港区" prefecture="泉州市" province="福建省" +350521 county="惠安县" prefecture="泉州市" province="福建省" +350524 county="安溪县" prefecture="泉州市" province="福建省" +350525 county="永春县" prefecture="泉州市" province="福建省" +350526 county="德化县" prefecture="泉州市" province="福建省" +350527 county="金门县" prefecture="泉州市" province="福建省" +350581 county="石狮市" prefecture="泉州市" province="福建省" +350582 county="晋江市" prefecture="泉州市" province="福建省" +350583 county="南安市" prefecture="泉州市" province="福建省" +350601 county="市辖区" prefecture="漳州市" province="福建省" +350602 county="芗城区" prefecture="漳州市" province="福建省" +350603 county="龙文区" prefecture="漳州市" province="福建省" +350622 county="云霄县" prefecture="漳州市" province="福建省" +350623 county="漳浦县" prefecture="漳州市" province="福建省" +350624 county="诏安县" prefecture="漳州市" province="福建省" +350625 county="长泰县" prefecture="漳州市" province="福建省" +350626 county="东山县" prefecture="漳州市" province="福建省" +350627 county="南靖县" prefecture="漳州市" province="福建省" +350628 county="平和县" prefecture="漳州市" province="福建省" +350629 county="华安县" prefecture="漳州市" province="福建省" +350681 county="龙海市" prefecture="漳州市" province="福建省" +350701 county="市辖区" prefecture="南平市" province="福建省" +350702 county="延平区" prefecture="南平市" province="福建省" +350721 county="顺昌县" prefecture="南平市" province="福建省" +350722 county="浦城县" prefecture="南平市" province="福建省" +350723 county="光泽县" prefecture="南平市" province="福建省" +350724 county="松溪县" prefecture="南平市" province="福建省" +350725 county="政和县" prefecture="南平市" province="福建省" +350781 county="邵武市" prefecture="南平市" province="福建省" +350782 county="武夷山市" prefecture="南平市" province="福建省" +350783 county="建瓯市" prefecture="南平市" province="福建省" +350784 county="建阳市" prefecture="南平市" province="福建省" +350801 county="市辖区" prefecture="龙岩市" province="福建省" +350802 county="新罗区" prefecture="龙岩市" province="福建省" +350821 county="长汀县" prefecture="龙岩市" province="福建省" +350822 county="永定县" prefecture="龙岩市" province="福建省" +350823 county="上杭县" prefecture="龙岩市" province="福建省" +350824 county="武平县" prefecture="龙岩市" province="福建省" +350825 county="连城县" prefecture="龙岩市" province="福建省" +350881 county="漳平市" prefecture="龙岩市" province="福建省" +350901 county="市辖区" prefecture="宁德市" province="福建省" +350902 county="蕉城区" prefecture="宁德市" province="福建省" +350921 county="霞浦县" prefecture="宁德市" province="福建省" +350922 county="古田县" prefecture="宁德市" province="福建省" +350923 county="屏南县" prefecture="宁德市" province="福建省" +350924 county="寿宁县" prefecture="宁德市" province="福建省" +350925 county="周宁县" prefecture="宁德市" province="福建省" +350926 county="柘荣县" prefecture="宁德市" province="福建省" +350981 county="福安市" prefecture="宁德市" province="福建省" +350982 county="福鼎市" prefecture="宁德市" province="福建省" +360101 county="市辖区" prefecture="南昌市" province="江西省" +360102 county="东湖区" prefecture="南昌市" province="江西省" +360103 county="西湖区" prefecture="南昌市" province="江西省" +360104 county="青云谱区" prefecture="南昌市" province="江西省" +360105 county="湾里区" prefecture="南昌市" province="江西省" +360111 county="青山湖区" prefecture="南昌市" province="江西省" +360121 county="南昌县" prefecture="南昌市" province="江西省" +360122 county="新建县" prefecture="南昌市" province="江西省" +360123 county="安义县" prefecture="南昌市" province="江西省" +360124 county="进贤县" prefecture="南昌市" province="江西省" +360201 county="市辖区" prefecture="景德镇市" province="江西省" +360202 county="昌江区" prefecture="景德镇市" province="江西省" +360203 county="珠山区" prefecture="景德镇市" province="江西省" +360222 county="浮梁县" prefecture="景德镇市" province="江西省" +360281 county="乐平市" prefecture="景德镇市" province="江西省" +360301 county="市辖区" prefecture="萍乡市" province="江西省" +360302 county="安源区" prefecture="萍乡市" province="江西省" +360313 county="湘东区" prefecture="萍乡市" province="江西省" +360321 county="莲花县" prefecture="萍乡市" province="江西省" +360322 county="上栗县" prefecture="萍乡市" province="江西省" +360323 county="芦溪县" prefecture="萍乡市" province="江西省" +360401 county="市辖区" prefecture="九江市" province="江西省" +360402 county="庐山区" prefecture="九江市" province="江西省" +360403 county="浔阳区" prefecture="九江市" province="江西省" +360421 county="九江县" prefecture="九江市" province="江西省" +360423 county="武宁县" prefecture="九江市" province="江西省" +360424 county="修水县" prefecture="九江市" province="江西省" +360425 county="永修县" prefecture="九江市" province="江西省" +360426 county="德安县" prefecture="九江市" province="江西省" +360427 county="星子县" prefecture="九江市" province="江西省" +360428 county="都昌县" prefecture="九江市" province="江西省" +360429 county="湖口县" prefecture="九江市" province="江西省" +360430 county="彭泽县" prefecture="九江市" province="江西省" +360481 county="瑞昌市" prefecture="九江市" province="江西省" +360482 county="共青城市" prefecture="九江市" province="江西省" +360501 county="市辖区" prefecture="新余市" province="江西省" +360502 county="渝水区" prefecture="新余市" province="江西省" +360521 county="分宜县" prefecture="新余市" province="江西省" +360601 county="市辖区" prefecture="鹰潭市" province="江西省" +360602 county="月湖区" prefecture="鹰潭市" province="江西省" +360622 county="余江县" prefecture="鹰潭市" province="江西省" +360681 county="贵溪市" prefecture="鹰潭市" province="江西省" +360701 county="市辖区" prefecture="赣州市" province="江西省" +360702 county="章贡区" prefecture="赣州市" province="江西省" +360721 county="赣县" prefecture="赣州市" province="江西省" +360722 county="信丰县" prefecture="赣州市" province="江西省" +360723 county="大余县" prefecture="赣州市" province="江西省" +360724 county="上犹县" prefecture="赣州市" province="江西省" +360725 county="崇义县" prefecture="赣州市" province="江西省" +360726 county="安远县" prefecture="赣州市" province="江西省" +360727 county="龙南县" prefecture="赣州市" province="江西省" +360728 county="定南县" prefecture="赣州市" province="江西省" +360729 county="全南县" prefecture="赣州市" province="江西省" +360730 county="宁都县" prefecture="赣州市" province="江西省" +360731 county="于都县" prefecture="赣州市" province="江西省" +360732 county="兴国县" prefecture="赣州市" province="江西省" +360733 county="会昌县" prefecture="赣州市" province="江西省" +360734 county="寻乌县" prefecture="赣州市" province="江西省" +360735 county="石城县" prefecture="赣州市" province="江西省" +360781 county="瑞金市" prefecture="赣州市" province="江西省" +360782 county="南康市" prefecture="赣州市" province="江西省" +360801 county="市辖区" prefecture="吉安市" province="江西省" +360802 county="吉州区" prefecture="吉安市" province="江西省" +360803 county="青原区" prefecture="吉安市" province="江西省" +360821 county="吉安县" prefecture="吉安市" province="江西省" +360822 county="吉水县" prefecture="吉安市" province="江西省" +360823 county="峡江县" prefecture="吉安市" province="江西省" +360824 county="新干县" prefecture="吉安市" province="江西省" +360825 county="永丰县" prefecture="吉安市" province="江西省" +360826 county="泰和县" prefecture="吉安市" province="江西省" +360827 county="遂川县" prefecture="吉安市" province="江西省" +360828 county="万安县" prefecture="吉安市" province="江西省" +360829 county="安福县" prefecture="吉安市" province="江西省" +360830 county="永新县" prefecture="吉安市" province="江西省" +360881 county="井冈山市" prefecture="吉安市" province="江西省" +360901 county="市辖区" prefecture="宜春市" province="江西省" +360902 county="袁州区" prefecture="宜春市" province="江西省" +360921 county="奉新县" prefecture="宜春市" province="江西省" +360922 county="万载县" prefecture="宜春市" province="江西省" +360923 county="上高县" prefecture="宜春市" province="江西省" +360924 county="宜丰县" prefecture="宜春市" province="江西省" +360925 county="靖安县" prefecture="宜春市" province="江西省" +360926 county="铜鼓县" prefecture="宜春市" province="江西省" +360981 county="丰城市" prefecture="宜春市" province="江西省" +360982 county="樟树市" prefecture="宜春市" province="江西省" +360983 county="高安市" prefecture="宜春市" province="江西省" +361001 county="市辖区" prefecture="抚州市" province="江西省" +361002 county="临川区" prefecture="抚州市" province="江西省" +361021 county="南城县" prefecture="抚州市" province="江西省" +361022 county="黎川县" prefecture="抚州市" province="江西省" +361023 county="南丰县" prefecture="抚州市" province="江西省" +361024 county="崇仁县" prefecture="抚州市" province="江西省" +361025 county="乐安县" prefecture="抚州市" province="江西省" +361026 county="宜黄县" prefecture="抚州市" province="江西省" +361027 county="金溪县" prefecture="抚州市" province="江西省" +361028 county="资溪县" prefecture="抚州市" province="江西省" +361029 county="东乡县" prefecture="抚州市" province="江西省" +361030 county="广昌县" prefecture="抚州市" province="江西省" +361101 county="市辖区" prefecture="上饶市" province="江西省" +361102 county="信州区" prefecture="上饶市" province="江西省" +361121 county="上饶县" prefecture="上饶市" province="江西省" +361122 county="广丰县" prefecture="上饶市" province="江西省" +361123 county="玉山县" prefecture="上饶市" province="江西省" +361124 county="铅山县" prefecture="上饶市" province="江西省" +361125 county="横峰县" prefecture="上饶市" province="江西省" +361126 county="弋阳县" prefecture="上饶市" province="江西省" +361127 county="余干县" prefecture="上饶市" province="江西省" +361128 county="鄱阳县" prefecture="上饶市" province="江西省" +361129 county="万年县" prefecture="上饶市" province="江西省" +361130 county="婺源县" prefecture="上饶市" province="江西省" +361181 county="德兴市" prefecture="上饶市" province="江西省" +370101 county="市辖区" prefecture="济南市" province="山东省" +370102 county="历下区" prefecture="济南市" province="山东省" +370103 county="市中区" prefecture="济南市" province="山东省" +370104 county="槐荫区" prefecture="济南市" province="山东省" +370105 county="天桥区" prefecture="济南市" province="山东省" +370112 county="历城区" prefecture="济南市" province="山东省" +370113 county="长清区" prefecture="济南市" province="山东省" +370124 county="平阴县" prefecture="济南市" province="山东省" +370125 county="济阳县" prefecture="济南市" province="山东省" +370126 county="商河县" prefecture="济南市" province="山东省" +370181 county="章丘市" prefecture="济南市" province="山东省" +370201 county="市辖区" prefecture="青岛市" province="山东省" +370202 county="市南区" prefecture="青岛市" province="山东省" +370203 county="市北区" prefecture="青岛市" province="山东省" +370211 county="黄岛区" prefecture="青岛市" province="山东省" +370212 county="崂山区" prefecture="青岛市" province="山东省" +370213 county="李沧区" prefecture="青岛市" province="山东省" +370214 county="城阳区" prefecture="青岛市" province="山东省" +370281 county="胶州市" prefecture="青岛市" province="山东省" +370282 county="即墨市" prefecture="青岛市" province="山东省" +370283 county="平度市" prefecture="青岛市" province="山东省" +370285 county="莱西市" prefecture="青岛市" province="山东省" +370301 county="市辖区" prefecture="淄博市" province="山东省" +370302 county="淄川区" prefecture="淄博市" province="山东省" +370303 county="张店区" prefecture="淄博市" province="山东省" +370304 county="博山区" prefecture="淄博市" province="山东省" +370305 county="临淄区" prefecture="淄博市" province="山东省" +370306 county="周村区" prefecture="淄博市" province="山东省" +370321 county="桓台县" prefecture="淄博市" province="山东省" +370322 county="高青县" prefecture="淄博市" province="山东省" +370323 county="沂源县" prefecture="淄博市" province="山东省" +370401 county="市辖区" prefecture="枣庄市" province="山东省" +370402 county="市中区" prefecture="枣庄市" province="山东省" +370403 county="薛城区" prefecture="枣庄市" province="山东省" +370404 county="峄城区" prefecture="枣庄市" province="山东省" +370405 county="台儿庄区" prefecture="枣庄市" province="山东省" +370406 county="山亭区" prefecture="枣庄市" province="山东省" +370481 county="滕州市" prefecture="枣庄市" province="山东省" +370501 county="市辖区" prefecture="东营市" province="山东省" +370502 county="东营区" prefecture="东营市" province="山东省" +370503 county="河口区" prefecture="东营市" province="山东省" +370521 county="垦利县" prefecture="东营市" province="山东省" +370522 county="利津县" prefecture="东营市" province="山东省" +370523 county="广饶县" prefecture="东营市" province="山东省" +370601 county="市辖区" prefecture="烟台市" province="山东省" +370602 county="芝罘区" prefecture="烟台市" province="山东省" +370611 county="福山区" prefecture="烟台市" province="山东省" +370612 county="牟平区" prefecture="烟台市" province="山东省" +370613 county="莱山区" prefecture="烟台市" province="山东省" +370634 county="长岛县" prefecture="烟台市" province="山东省" +370681 county="龙口市" prefecture="烟台市" province="山东省" +370682 county="莱阳市" prefecture="烟台市" province="山东省" +370683 county="莱州市" prefecture="烟台市" province="山东省" +370684 county="蓬莱市" prefecture="烟台市" province="山东省" +370685 county="招远市" prefecture="烟台市" province="山东省" +370686 county="栖霞市" prefecture="烟台市" province="山东省" +370687 county="海阳市" prefecture="烟台市" province="山东省" +370701 county="市辖区" prefecture="潍坊市" province="山东省" +370702 county="潍城区" prefecture="潍坊市" province="山东省" +370703 county="寒亭区" prefecture="潍坊市" province="山东省" +370704 county="坊子区" prefecture="潍坊市" province="山东省" +370705 county="奎文区" prefecture="潍坊市" province="山东省" +370724 county="临朐县" prefecture="潍坊市" province="山东省" +370725 county="昌乐县" prefecture="潍坊市" province="山东省" +370781 county="青州市" prefecture="潍坊市" province="山东省" +370782 county="诸城市" prefecture="潍坊市" province="山东省" +370783 county="寿光市" prefecture="潍坊市" province="山东省" +370784 county="安丘市" prefecture="潍坊市" province="山东省" +370785 county="高密市" prefecture="潍坊市" province="山东省" +370786 county="昌邑市" prefecture="潍坊市" province="山东省" +370801 county="市辖区" prefecture="济宁市" province="山东省" +370802 county="市中区" prefecture="济宁市" province="山东省" +370811 county="任城区" prefecture="济宁市" province="山东省" +370826 county="微山县" prefecture="济宁市" province="山东省" +370827 county="鱼台县" prefecture="济宁市" province="山东省" +370828 county="金乡县" prefecture="济宁市" province="山东省" +370829 county="嘉祥县" prefecture="济宁市" province="山东省" +370830 county="汶上县" prefecture="济宁市" province="山东省" +370831 county="泗水县" prefecture="济宁市" province="山东省" +370832 county="梁山县" prefecture="济宁市" province="山东省" +370881 county="曲阜市" prefecture="济宁市" province="山东省" +370882 county="兖州市" prefecture="济宁市" province="山东省" +370883 county="邹城市" prefecture="济宁市" province="山东省" +370901 county="市辖区" prefecture="泰安市" province="山东省" +370902 county="泰山区" prefecture="泰安市" province="山东省" +370911 county="岱岳区" prefecture="泰安市" province="山东省" +370921 county="宁阳县" prefecture="泰安市" province="山东省" +370923 county="东平县" prefecture="泰安市" province="山东省" +370982 county="新泰市" prefecture="泰安市" province="山东省" +370983 county="肥城市" prefecture="泰安市" province="山东省" +371001 county="市辖区" prefecture="威海市" province="山东省" +371002 county="环翠区" prefecture="威海市" province="山东省" +371081 county="文登市" prefecture="威海市" province="山东省" +371082 county="荣成市" prefecture="威海市" province="山东省" +371083 county="乳山市" prefecture="威海市" province="山东省" +371101 county="市辖区" prefecture="日照市" province="山东省" +371102 county="东港区" prefecture="日照市" province="山东省" +371103 county="岚山区" prefecture="日照市" province="山东省" +371121 county="五莲县" prefecture="日照市" province="山东省" +371122 county="莒县" prefecture="日照市" province="山东省" +371201 county="市辖区" prefecture="莱芜市" province="山东省" +371202 county="莱城区" prefecture="莱芜市" province="山东省" +371203 county="钢城区" prefecture="莱芜市" province="山东省" +371301 county="市辖区" prefecture="临沂市" province="山东省" +371302 county="兰山区" prefecture="临沂市" province="山东省" +371311 county="罗庄区" prefecture="临沂市" province="山东省" +371312 county="河东区" prefecture="临沂市" province="山东省" +371321 county="沂南县" prefecture="临沂市" province="山东省" +371322 county="郯城县" prefecture="临沂市" province="山东省" +371323 county="沂水县" prefecture="临沂市" province="山东省" +371324 county="苍山县" prefecture="临沂市" province="山东省" +371325 county="费县" prefecture="临沂市" province="山东省" +371326 county="平邑县" prefecture="临沂市" province="山东省" +371327 county="莒南县" prefecture="临沂市" province="山东省" +371328 county="蒙阴县" prefecture="临沂市" province="山东省" +371329 county="临沭县" prefecture="临沂市" province="山东省" +371401 county="市辖区" prefecture="德州市" province="山东省" +371402 county="德城区" prefecture="德州市" province="山东省" +371421 county="陵县" prefecture="德州市" province="山东省" +371422 county="宁津县" prefecture="德州市" province="山东省" +371423 county="庆云县" prefecture="德州市" province="山东省" +371424 county="临邑县" prefecture="德州市" province="山东省" +371425 county="齐河县" prefecture="德州市" province="山东省" +371426 county="平原县" prefecture="德州市" province="山东省" +371427 county="夏津县" prefecture="德州市" province="山东省" +371428 county="武城县" prefecture="德州市" province="山东省" +371481 county="乐陵市" prefecture="德州市" province="山东省" +371482 county="禹城市" prefecture="德州市" province="山东省" +371501 county="市辖区" prefecture="聊城市" province="山东省" +371502 county="东昌府区" prefecture="聊城市" province="山东省" +371521 county="阳谷县" prefecture="聊城市" province="山东省" +371522 county="莘县" prefecture="聊城市" province="山东省" +371523 county="茌平县" prefecture="聊城市" province="山东省" +371524 county="东阿县" prefecture="聊城市" province="山东省" +371525 county="冠县" prefecture="聊城市" province="山东省" +371526 county="高唐县" prefecture="聊城市" province="山东省" +371581 county="临清市" prefecture="聊城市" province="山东省" +371601 county="市辖区" prefecture="滨州市" province="山东省" +371602 county="滨城区" prefecture="滨州市" province="山东省" +371621 county="惠民县" prefecture="滨州市" province="山东省" +371622 county="阳信县" prefecture="滨州市" province="山东省" +371623 county="无棣县" prefecture="滨州市" province="山东省" +371624 county="沾化县" prefecture="滨州市" province="山东省" +371625 county="博兴县" prefecture="滨州市" province="山东省" +371626 county="邹平县" prefecture="滨州市" province="山东省" +371701 county="市辖区" prefecture="菏泽市" province="山东省" +371702 county="牡丹区" prefecture="菏泽市" province="山东省" +371721 county="曹县" prefecture="菏泽市" province="山东省" +371722 county="单县" prefecture="菏泽市" province="山东省" +371723 county="成武县" prefecture="菏泽市" province="山东省" +371724 county="巨野县" prefecture="菏泽市" province="山东省" +371725 county="郓城县" prefecture="菏泽市" province="山东省" +371726 county="鄄城县" prefecture="菏泽市" province="山东省" +371727 county="定陶县" prefecture="菏泽市" province="山东省" +371728 county="东明县" prefecture="菏泽市" province="山东省" +410101 county="市辖区" prefecture="郑州市" province="河南省" +410102 county="中原区" prefecture="郑州市" province="河南省" +410103 county="二七区" prefecture="郑州市" province="河南省" +410104 county="管城回族区" prefecture="郑州市" province="河南省" +410105 county="金水区" prefecture="郑州市" province="河南省" +410106 county="上街区" prefecture="郑州市" province="河南省" +410108 county="惠济区" prefecture="郑州市" province="河南省" +410122 county="中牟县" prefecture="郑州市" province="河南省" +410181 county="巩义市" prefecture="郑州市" province="河南省" +410182 county="荥阳市" prefecture="郑州市" province="河南省" +410183 county="新密市" prefecture="郑州市" province="河南省" +410184 county="新郑市" prefecture="郑州市" province="河南省" +410185 county="登封市" prefecture="郑州市" province="河南省" +410201 county="市辖区" prefecture="开封市" province="河南省" +410202 county="龙亭区" prefecture="开封市" province="河南省" +410203 county="顺河回族区" prefecture="开封市" province="河南省" +410204 county="鼓楼区" prefecture="开封市" province="河南省" +410205 county="禹王台区" prefecture="开封市" province="河南省" +410211 county="金明区" prefecture="开封市" province="河南省" +410221 county="杞县" prefecture="开封市" province="河南省" +410222 county="通许县" prefecture="开封市" province="河南省" +410223 county="尉氏县" prefecture="开封市" province="河南省" +410224 county="开封县" prefecture="开封市" province="河南省" +410225 county="兰考县" prefecture="开封市" province="河南省" +410301 county="市辖区" prefecture="洛阳市" province="河南省" +410302 county="老城区" prefecture="洛阳市" province="河南省" +410303 county="西工区" prefecture="洛阳市" province="河南省" +410304 county="瀍河回族区" prefecture="洛阳市" province="河南省" +410305 county="涧西区" prefecture="洛阳市" province="河南省" +410306 county="吉利区" prefecture="洛阳市" province="河南省" +410311 county="洛龙区" prefecture="洛阳市" province="河南省" +410322 county="孟津县" prefecture="洛阳市" province="河南省" +410323 county="新安县" prefecture="洛阳市" province="河南省" +410324 county="栾川县" prefecture="洛阳市" province="河南省" +410325 county="嵩县" prefecture="洛阳市" province="河南省" +410326 county="汝阳县" prefecture="洛阳市" province="河南省" +410327 county="宜阳县" prefecture="洛阳市" province="河南省" +410328 county="洛宁县" prefecture="洛阳市" province="河南省" +410329 county="伊川县" prefecture="洛阳市" province="河南省" +410381 county="偃师市" prefecture="洛阳市" province="河南省" +410401 county="市辖区" prefecture="平顶山市" province="河南省" +410402 county="新华区" prefecture="平顶山市" province="河南省" +410403 county="卫东区" prefecture="平顶山市" province="河南省" +410404 county="石龙区" prefecture="平顶山市" province="河南省" +410411 county="湛河区" prefecture="平顶山市" province="河南省" +410421 county="宝丰县" prefecture="平顶山市" province="河南省" +410422 county="叶县" prefecture="平顶山市" province="河南省" +410423 county="鲁山县" prefecture="平顶山市" province="河南省" +410425 county="郏县" prefecture="平顶山市" province="河南省" +410481 county="舞钢市" prefecture="平顶山市" province="河南省" +410482 county="汝州市" prefecture="平顶山市" province="河南省" +410501 county="市辖区" prefecture="安阳市" province="河南省" +410502 county="文峰区" prefecture="安阳市" province="河南省" +410503 county="北关区" prefecture="安阳市" province="河南省" +410505 county="殷都区" prefecture="安阳市" province="河南省" +410506 county="龙安区" prefecture="安阳市" province="河南省" +410522 county="安阳县" prefecture="安阳市" province="河南省" +410523 county="汤阴县" prefecture="安阳市" province="河南省" +410526 county="滑县" prefecture="安阳市" province="河南省" +410527 county="内黄县" prefecture="安阳市" province="河南省" +410581 county="林州市" prefecture="安阳市" province="河南省" +410601 county="市辖区" prefecture="鹤壁市" province="河南省" +410602 county="鹤山区" prefecture="鹤壁市" province="河南省" +410603 county="山城区" prefecture="鹤壁市" province="河南省" +410611 county="淇滨区" prefecture="鹤壁市" province="河南省" +410621 county="浚县" prefecture="鹤壁市" province="河南省" +410622 county="淇县" prefecture="鹤壁市" province="河南省" +410701 county="市辖区" prefecture="新乡市" province="河南省" +410702 county="红旗区" prefecture="新乡市" province="河南省" +410703 county="卫滨区" prefecture="新乡市" province="河南省" +410704 county="凤泉区" prefecture="新乡市" province="河南省" +410711 county="牧野区" prefecture="新乡市" province="河南省" +410721 county="新乡县" prefecture="新乡市" province="河南省" +410724 county="获嘉县" prefecture="新乡市" province="河南省" +410725 county="原阳县" prefecture="新乡市" province="河南省" +410726 county="延津县" prefecture="新乡市" province="河南省" +410727 county="封丘县" prefecture="新乡市" province="河南省" +410728 county="长垣县" prefecture="新乡市" province="河南省" +410781 county="卫辉市" prefecture="新乡市" province="河南省" +410782 county="辉县市" prefecture="新乡市" province="河南省" +410801 county="市辖区" prefecture="焦作市" province="河南省" +410802 county="解放区" prefecture="焦作市" province="河南省" +410803 county="中站区" prefecture="焦作市" province="河南省" +410804 county="马村区" prefecture="焦作市" province="河南省" +410811 county="山阳区" prefecture="焦作市" province="河南省" +410821 county="修武县" prefecture="焦作市" province="河南省" +410822 county="博爱县" prefecture="焦作市" province="河南省" +410823 county="武陟县" prefecture="焦作市" province="河南省" +410825 county="温县" prefecture="焦作市" province="河南省" +410882 county="沁阳市" prefecture="焦作市" province="河南省" +410883 county="孟州市" prefecture="焦作市" province="河南省" +410901 county="市辖区" prefecture="濮阳市" province="河南省" +410902 county="华龙区" prefecture="濮阳市" province="河南省" +410922 county="清丰县" prefecture="濮阳市" province="河南省" +410923 county="南乐县" prefecture="濮阳市" province="河南省" +410926 county="范县" prefecture="濮阳市" province="河南省" +410927 county="台前县" prefecture="濮阳市" province="河南省" +410928 county="濮阳县" prefecture="濮阳市" province="河南省" +411001 county="市辖区" prefecture="许昌市" province="河南省" +411002 county="魏都区" prefecture="许昌市" province="河南省" +411023 county="许昌县" prefecture="许昌市" province="河南省" +411024 county="鄢陵县" prefecture="许昌市" province="河南省" +411025 county="襄城县" prefecture="许昌市" province="河南省" +411081 county="禹州市" prefecture="许昌市" province="河南省" +411082 county="长葛市" prefecture="许昌市" province="河南省" +411101 county="市辖区" prefecture="漯河市" province="河南省" +411102 county="源汇区" prefecture="漯河市" province="河南省" +411103 county="郾城区" prefecture="漯河市" province="河南省" +411104 county="召陵区" prefecture="漯河市" province="河南省" +411121 county="舞阳县" prefecture="漯河市" province="河南省" +411122 county="临颍县" prefecture="漯河市" province="河南省" +411201 county="市辖区" prefecture="三门峡市" province="河南省" +411202 county="湖滨区" prefecture="三门峡市" province="河南省" +411221 county="渑池县" prefecture="三门峡市" province="河南省" +411222 county="陕县" prefecture="三门峡市" province="河南省" +411224 county="卢氏县" prefecture="三门峡市" province="河南省" +411281 county="义马市" prefecture="三门峡市" province="河南省" +411282 county="灵宝市" prefecture="三门峡市" province="河南省" +411301 county="市辖区" prefecture="南阳市" province="河南省" +411302 county="宛城区" prefecture="南阳市" province="河南省" +411303 county="卧龙区" prefecture="南阳市" province="河南省" +411321 county="南召县" prefecture="南阳市" province="河南省" +411322 county="方城县" prefecture="南阳市" province="河南省" +411323 county="西峡县" prefecture="南阳市" province="河南省" +411324 county="镇平县" prefecture="南阳市" province="河南省" +411325 county="内乡县" prefecture="南阳市" province="河南省" +411326 county="淅川县" prefecture="南阳市" province="河南省" +411327 county="社旗县" prefecture="南阳市" province="河南省" +411328 county="唐河县" prefecture="南阳市" province="河南省" +411329 county="新野县" prefecture="南阳市" province="河南省" +411330 county="桐柏县" prefecture="南阳市" province="河南省" +411381 county="邓州市" prefecture="南阳市" province="河南省" +411401 county="市辖区" prefecture="商丘市" province="河南省" +411402 county="梁园区" prefecture="商丘市" province="河南省" +411403 county="睢阳区" prefecture="商丘市" province="河南省" +411421 county="民权县" prefecture="商丘市" province="河南省" +411422 county="睢县" prefecture="商丘市" province="河南省" +411423 county="宁陵县" prefecture="商丘市" province="河南省" +411424 county="柘城县" prefecture="商丘市" province="河南省" +411425 county="虞城县" prefecture="商丘市" province="河南省" +411426 county="夏邑县" prefecture="商丘市" province="河南省" +411481 county="永城市" prefecture="商丘市" province="河南省" +411501 county="市辖区" prefecture="信阳市" province="河南省" +411502 county="浉河区" prefecture="信阳市" province="河南省" +411503 county="平桥区" prefecture="信阳市" province="河南省" +411521 county="罗山县" prefecture="信阳市" province="河南省" +411522 county="光山县" prefecture="信阳市" province="河南省" +411523 county="新县" prefecture="信阳市" province="河南省" +411524 county="商城县" prefecture="信阳市" province="河南省" +411525 county="固始县" prefecture="信阳市" province="河南省" +411526 county="潢川县" prefecture="信阳市" province="河南省" +411527 county="淮滨县" prefecture="信阳市" province="河南省" +411528 county="息县" prefecture="信阳市" province="河南省" +411601 county="市辖区" prefecture="周口市" province="河南省" +411602 county="川汇区" prefecture="周口市" province="河南省" +411621 county="扶沟县" prefecture="周口市" province="河南省" +411622 county="西华县" prefecture="周口市" province="河南省" +411623 county="商水县" prefecture="周口市" province="河南省" +411624 county="沈丘县" prefecture="周口市" province="河南省" +411625 county="郸城县" prefecture="周口市" province="河南省" +411626 county="淮阳县" prefecture="周口市" province="河南省" +411627 county="太康县" prefecture="周口市" province="河南省" +411628 county="鹿邑县" prefecture="周口市" province="河南省" +411681 county="项城市" prefecture="周口市" province="河南省" +411701 county="市辖区" prefecture="驻马店市" province="河南省" +411702 county="驿城区" prefecture="驻马店市" province="河南省" +411721 county="西平县" prefecture="驻马店市" province="河南省" +411722 county="上蔡县" prefecture="驻马店市" province="河南省" +411723 county="平舆县" prefecture="驻马店市" province="河南省" +411724 county="正阳县" prefecture="驻马店市" province="河南省" +411725 county="确山县" prefecture="驻马店市" province="河南省" +411726 county="泌阳县" prefecture="驻马店市" province="河南省" +411727 county="汝南县" prefecture="驻马店市" province="河南省" +411728 county="遂平县" prefecture="驻马店市" province="河南省" +411729 county="新蔡县" prefecture="驻马店市" province="河南省" +419001 county="济源市" prefecture="省直辖县级行政区划" province="河南省" +420101 county="市辖区" prefecture="武汉市" province="湖北省" +420102 county="江岸区" prefecture="武汉市" province="湖北省" +420103 county="江汉区" prefecture="武汉市" province="湖北省" +420104 county="硚口区" prefecture="武汉市" province="湖北省" +420105 county="汉阳区" prefecture="武汉市" province="湖北省" +420106 county="武昌区" prefecture="武汉市" province="湖北省" +420107 county="青山区" prefecture="武汉市" province="湖北省" +420111 county="洪山区" prefecture="武汉市" province="湖北省" +420112 county="东西湖区" prefecture="武汉市" province="湖北省" +420113 county="汉南区" prefecture="武汉市" province="湖北省" +420114 county="蔡甸区" prefecture="武汉市" province="湖北省" +420115 county="江夏区" prefecture="武汉市" province="湖北省" +420116 county="黄陂区" prefecture="武汉市" province="湖北省" +420117 county="新洲区" prefecture="武汉市" province="湖北省" +420201 county="市辖区" prefecture="黄石市" province="湖北省" +420202 county="黄石港区" prefecture="黄石市" province="湖北省" +420203 county="西塞山区" prefecture="黄石市" province="湖北省" +420204 county="下陆区" prefecture="黄石市" province="湖北省" +420205 county="铁山区" prefecture="黄石市" province="湖北省" +420222 county="阳新县" prefecture="黄石市" province="湖北省" +420281 county="大冶市" prefecture="黄石市" province="湖北省" +420301 county="市辖区" prefecture="十堰市" province="湖北省" +420302 county="茅箭区" prefecture="十堰市" province="湖北省" +420303 county="张湾区" prefecture="十堰市" province="湖北省" +420321 county="郧县" prefecture="十堰市" province="湖北省" +420322 county="郧西县" prefecture="十堰市" province="湖北省" +420323 county="竹山县" prefecture="十堰市" province="湖北省" +420324 county="竹溪县" prefecture="十堰市" province="湖北省" +420325 county="房县" prefecture="十堰市" province="湖北省" +420381 county="丹江口市" prefecture="十堰市" province="湖北省" +420501 county="市辖区" prefecture="宜昌市" province="湖北省" +420502 county="西陵区" prefecture="宜昌市" province="湖北省" +420503 county="伍家岗区" prefecture="宜昌市" province="湖北省" +420504 county="点军区" prefecture="宜昌市" province="湖北省" +420505 county="猇亭区" prefecture="宜昌市" province="湖北省" +420506 county="夷陵区" prefecture="宜昌市" province="湖北省" +420525 county="远安县" prefecture="宜昌市" province="湖北省" +420526 county="兴山县" prefecture="宜昌市" province="湖北省" +420527 county="秭归县" prefecture="宜昌市" province="湖北省" +420528 county="长阳土家族自治县" prefecture="宜昌市" province="湖北省" +420529 county="五峰土家族自治县" prefecture="宜昌市" province="湖北省" +420581 county="宜都市" prefecture="宜昌市" province="湖北省" +420582 county="当阳市" prefecture="宜昌市" province="湖北省" +420583 county="枝江市" prefecture="宜昌市" province="湖北省" +420601 county="市辖区" prefecture="襄阳市" province="湖北省" +420602 county="襄城区" prefecture="襄阳市" province="湖北省" +420606 county="樊城区" prefecture="襄阳市" province="湖北省" +420607 county="襄州区" prefecture="襄阳市" province="湖北省" +420624 county="南漳县" prefecture="襄阳市" province="湖北省" +420625 county="谷城县" prefecture="襄阳市" province="湖北省" +420626 county="保康县" prefecture="襄阳市" province="湖北省" +420682 county="老河口市" prefecture="襄阳市" province="湖北省" +420683 county="枣阳市" prefecture="襄阳市" province="湖北省" +420684 county="宜城市" prefecture="襄阳市" province="湖北省" +420701 county="市辖区" prefecture="鄂州市" province="湖北省" +420702 county="梁子湖区" prefecture="鄂州市" province="湖北省" +420703 county="华容区" prefecture="鄂州市" province="湖北省" +420704 county="鄂城区" prefecture="鄂州市" province="湖北省" +420801 county="市辖区" prefecture="荆门市" province="湖北省" +420802 county="东宝区" prefecture="荆门市" province="湖北省" +420804 county="掇刀区" prefecture="荆门市" province="湖北省" +420821 county="京山县" prefecture="荆门市" province="湖北省" +420822 county="沙洋县" prefecture="荆门市" province="湖北省" +420881 county="钟祥市" prefecture="荆门市" province="湖北省" +420901 county="市辖区" prefecture="孝感市" province="湖北省" +420902 county="孝南区" prefecture="孝感市" province="湖北省" +420921 county="孝昌县" prefecture="孝感市" province="湖北省" +420922 county="大悟县" prefecture="孝感市" province="湖北省" +420923 county="云梦县" prefecture="孝感市" province="湖北省" +420981 county="应城市" prefecture="孝感市" province="湖北省" +420982 county="安陆市" prefecture="孝感市" province="湖北省" +420984 county="汉川市" prefecture="孝感市" province="湖北省" +421001 county="市辖区" prefecture="荆州市" province="湖北省" +421002 county="沙市区" prefecture="荆州市" province="湖北省" +421003 county="荆州区" prefecture="荆州市" province="湖北省" +421022 county="公安县" prefecture="荆州市" province="湖北省" +421023 county="监利县" prefecture="荆州市" province="湖北省" +421024 county="江陵县" prefecture="荆州市" province="湖北省" +421081 county="石首市" prefecture="荆州市" province="湖北省" +421083 county="洪湖市" prefecture="荆州市" province="湖北省" +421087 county="松滋市" prefecture="荆州市" province="湖北省" +421101 county="市辖区" prefecture="黄冈市" province="湖北省" +421102 county="黄州区" prefecture="黄冈市" province="湖北省" +421121 county="团风县" prefecture="黄冈市" province="湖北省" +421122 county="红安县" prefecture="黄冈市" province="湖北省" +421123 county="罗田县" prefecture="黄冈市" province="湖北省" +421124 county="英山县" prefecture="黄冈市" province="湖北省" +421125 county="浠水县" prefecture="黄冈市" province="湖北省" +421126 county="蕲春县" prefecture="黄冈市" province="湖北省" +421127 county="黄梅县" prefecture="黄冈市" province="湖北省" +421181 county="麻城市" prefecture="黄冈市" province="湖北省" +421182 county="武穴市" prefecture="黄冈市" province="湖北省" +421201 county="市辖区" prefecture="咸宁市" province="湖北省" +421202 county="咸安区" prefecture="咸宁市" province="湖北省" +421221 county="嘉鱼县" prefecture="咸宁市" province="湖北省" +421222 county="通城县" prefecture="咸宁市" province="湖北省" +421223 county="崇阳县" prefecture="咸宁市" province="湖北省" +421224 county="通山县" prefecture="咸宁市" province="湖北省" +421281 county="赤壁市" prefecture="咸宁市" province="湖北省" +421301 county="市辖区" prefecture="随州市" province="湖北省" +421303 county="曾都区" prefecture="随州市" province="湖北省" +421321 county="随县" prefecture="随州市" province="湖北省" +421381 county="广水市" prefecture="随州市" province="湖北省" +422801 county="恩施市" prefecture="恩施土家族苗族自治州" province="湖北省" +422802 county="利川市" prefecture="恩施土家族苗族自治州" province="湖北省" +422822 county="建始县" prefecture="恩施土家族苗族自治州" province="湖北省" +422823 county="巴东县" prefecture="恩施土家族苗族自治州" province="湖北省" +422825 county="宣恩县" prefecture="恩施土家族苗族自治州" province="湖北省" +422826 county="咸丰县" prefecture="恩施土家族苗族自治州" province="湖北省" +422827 county="来凤县" prefecture="恩施土家族苗族自治州" province="湖北省" +422828 county="鹤峰县" prefecture="恩施土家族苗族自治州" province="湖北省" +429004 county="仙桃市" prefecture="省直辖县级行政区划" province="湖北省" +429005 county="潜江市" prefecture="省直辖县级行政区划" province="湖北省" +429006 county="天门市" prefecture="省直辖县级行政区划" province="湖北省" +429021 county="神农架林区" prefecture="省直辖县级行政区划" province="湖北省" +430101 county="市辖区" prefecture="长沙市" province="湖南省" +430102 county="芙蓉区" prefecture="长沙市" province="湖南省" +430103 county="天心区" prefecture="长沙市" province="湖南省" +430104 county="岳麓区" prefecture="长沙市" province="湖南省" +430105 county="开福区" prefecture="长沙市" province="湖南省" +430111 county="雨花区" prefecture="长沙市" province="湖南省" +430112 county="望城区" prefecture="长沙市" province="湖南省" +430121 county="长沙县" prefecture="长沙市" province="湖南省" +430124 county="宁乡县" prefecture="长沙市" province="湖南省" +430181 county="浏阳市" prefecture="长沙市" province="湖南省" +430201 county="市辖区" prefecture="株洲市" province="湖南省" +430202 county="荷塘区" prefecture="株洲市" province="湖南省" +430203 county="芦淞区" prefecture="株洲市" province="湖南省" +430204 county="石峰区" prefecture="株洲市" province="湖南省" +430211 county="天元区" prefecture="株洲市" province="湖南省" +430221 county="株洲县" prefecture="株洲市" province="湖南省" +430223 county="攸县" prefecture="株洲市" province="湖南省" +430224 county="茶陵县" prefecture="株洲市" province="湖南省" +430225 county="炎陵县" prefecture="株洲市" province="湖南省" +430281 county="醴陵市" prefecture="株洲市" province="湖南省" +430301 county="市辖区" prefecture="湘潭市" province="湖南省" +430302 county="雨湖区" prefecture="湘潭市" province="湖南省" +430304 county="岳塘区" prefecture="湘潭市" province="湖南省" +430321 county="湘潭县" prefecture="湘潭市" province="湖南省" +430381 county="湘乡市" prefecture="湘潭市" province="湖南省" +430382 county="韶山市" prefecture="湘潭市" province="湖南省" +430401 county="市辖区" prefecture="衡阳市" province="湖南省" +430405 county="珠晖区" prefecture="衡阳市" province="湖南省" +430406 county="雁峰区" prefecture="衡阳市" province="湖南省" +430407 county="石鼓区" prefecture="衡阳市" province="湖南省" +430408 county="蒸湘区" prefecture="衡阳市" province="湖南省" +430412 county="南岳区" prefecture="衡阳市" province="湖南省" +430421 county="衡阳县" prefecture="衡阳市" province="湖南省" +430422 county="衡南县" prefecture="衡阳市" province="湖南省" +430423 county="衡山县" prefecture="衡阳市" province="湖南省" +430424 county="衡东县" prefecture="衡阳市" province="湖南省" +430426 county="祁东县" prefecture="衡阳市" province="湖南省" +430481 county="耒阳市" prefecture="衡阳市" province="湖南省" +430482 county="常宁市" prefecture="衡阳市" province="湖南省" +430501 county="市辖区" prefecture="邵阳市" province="湖南省" +430502 county="双清区" prefecture="邵阳市" province="湖南省" +430503 county="大祥区" prefecture="邵阳市" province="湖南省" +430511 county="北塔区" prefecture="邵阳市" province="湖南省" +430521 county="邵东县" prefecture="邵阳市" province="湖南省" +430522 county="新邵县" prefecture="邵阳市" province="湖南省" +430523 county="邵阳县" prefecture="邵阳市" province="湖南省" +430524 county="隆回县" prefecture="邵阳市" province="湖南省" +430525 county="洞口县" prefecture="邵阳市" province="湖南省" +430527 county="绥宁县" prefecture="邵阳市" province="湖南省" +430528 county="新宁县" prefecture="邵阳市" province="湖南省" +430529 county="城步苗族自治县" prefecture="邵阳市" province="湖南省" +430581 county="武冈市" prefecture="邵阳市" province="湖南省" +430601 county="市辖区" prefecture="岳阳市" province="湖南省" +430602 county="岳阳楼区" prefecture="岳阳市" province="湖南省" +430603 county="云溪区" prefecture="岳阳市" province="湖南省" +430611 county="君山区" prefecture="岳阳市" province="湖南省" +430621 county="岳阳县" prefecture="岳阳市" province="湖南省" +430623 county="华容县" prefecture="岳阳市" province="湖南省" +430624 county="湘阴县" prefecture="岳阳市" province="湖南省" +430626 county="平江县" prefecture="岳阳市" province="湖南省" +430681 county="汨罗市" prefecture="岳阳市" province="湖南省" +430682 county="临湘市" prefecture="岳阳市" province="湖南省" +430701 county="市辖区" prefecture="常德市" province="湖南省" +430702 county="武陵区" prefecture="常德市" province="湖南省" +430703 county="鼎城区" prefecture="常德市" province="湖南省" +430721 county="安乡县" prefecture="常德市" province="湖南省" +430722 county="汉寿县" prefecture="常德市" province="湖南省" +430723 county="澧县" prefecture="常德市" province="湖南省" +430724 county="临澧县" prefecture="常德市" province="湖南省" +430725 county="桃源县" prefecture="常德市" province="湖南省" +430726 county="石门县" prefecture="常德市" province="湖南省" +430781 county="津市市" prefecture="常德市" province="湖南省" +430801 county="市辖区" prefecture="张家界市" province="湖南省" +430802 county="永定区" prefecture="张家界市" province="湖南省" +430811 county="武陵源区" prefecture="张家界市" province="湖南省" +430821 county="慈利县" prefecture="张家界市" province="湖南省" +430822 county="桑植县" prefecture="张家界市" province="湖南省" +430901 county="市辖区" prefecture="益阳市" province="湖南省" +430902 county="资阳区" prefecture="益阳市" province="湖南省" +430903 county="赫山区" prefecture="益阳市" province="湖南省" +430921 county="南县" prefecture="益阳市" province="湖南省" +430922 county="桃江县" prefecture="益阳市" province="湖南省" +430923 county="安化县" prefecture="益阳市" province="湖南省" +430981 county="沅江市" prefecture="益阳市" province="湖南省" +431001 county="市辖区" prefecture="郴州市" province="湖南省" +431002 county="北湖区" prefecture="郴州市" province="湖南省" +431003 county="苏仙区" prefecture="郴州市" province="湖南省" +431021 county="桂阳县" prefecture="郴州市" province="湖南省" +431022 county="宜章县" prefecture="郴州市" province="湖南省" +431023 county="永兴县" prefecture="郴州市" province="湖南省" +431024 county="嘉禾县" prefecture="郴州市" province="湖南省" +431025 county="临武县" prefecture="郴州市" province="湖南省" +431026 county="汝城县" prefecture="郴州市" province="湖南省" +431027 county="桂东县" prefecture="郴州市" province="湖南省" +431028 county="安仁县" prefecture="郴州市" province="湖南省" +431081 county="资兴市" prefecture="郴州市" province="湖南省" +431101 county="市辖区" prefecture="永州市" province="湖南省" +431102 county="零陵区" prefecture="永州市" province="湖南省" +431103 county="冷水滩区" prefecture="永州市" province="湖南省" +431121 county="祁阳县" prefecture="永州市" province="湖南省" +431122 county="东安县" prefecture="永州市" province="湖南省" +431123 county="双牌县" prefecture="永州市" province="湖南省" +431124 county="道县" prefecture="永州市" province="湖南省" +431125 county="江永县" prefecture="永州市" province="湖南省" +431126 county="宁远县" prefecture="永州市" province="湖南省" +431127 county="蓝山县" prefecture="永州市" province="湖南省" +431128 county="新田县" prefecture="永州市" province="湖南省" +431129 county="江华瑶族自治县" prefecture="永州市" province="湖南省" +431201 county="市辖区" prefecture="怀化市" province="湖南省" +431202 county="鹤城区" prefecture="怀化市" province="湖南省" +431221 county="中方县" prefecture="怀化市" province="湖南省" +431222 county="沅陵县" prefecture="怀化市" province="湖南省" +431223 county="辰溪县" prefecture="怀化市" province="湖南省" +431224 county="溆浦县" prefecture="怀化市" province="湖南省" +431225 county="会同县" prefecture="怀化市" province="湖南省" +431226 county="麻阳苗族自治县" prefecture="怀化市" province="湖南省" +431227 county="新晃侗族自治县" prefecture="怀化市" province="湖南省" +431228 county="芷江侗族自治县" prefecture="怀化市" province="湖南省" +431229 county="靖州苗族侗族自治县" prefecture="怀化市" province="湖南省" +431230 county="通道侗族自治县" prefecture="怀化市" province="湖南省" +431281 county="洪江市" prefecture="怀化市" province="湖南省" +431301 county="市辖区" prefecture="娄底市" province="湖南省" +431302 county="娄星区" prefecture="娄底市" province="湖南省" +431321 county="双峰县" prefecture="娄底市" province="湖南省" +431322 county="新化县" prefecture="娄底市" province="湖南省" +431381 county="冷水江市" prefecture="娄底市" province="湖南省" +431382 county="涟源市" prefecture="娄底市" province="湖南省" +433101 county="吉首市" prefecture="湘西土家族苗族自治州" province="湖南省" +433122 county="泸溪县" prefecture="湘西土家族苗族自治州" province="湖南省" +433123 county="凤凰县" prefecture="湘西土家族苗族自治州" province="湖南省" +433124 county="花垣县" prefecture="湘西土家族苗族自治州" province="湖南省" +433125 county="保靖县" prefecture="湘西土家族苗族自治州" province="湖南省" +433126 county="古丈县" prefecture="湘西土家族苗族自治州" province="湖南省" +433127 county="永顺县" prefecture="湘西土家族苗族自治州" province="湖南省" +433130 county="龙山县" prefecture="湘西土家族苗族自治州" province="湖南省" +440101 county="市辖区" prefecture="广州市" province="广东省" +440103 county="荔湾区" prefecture="广州市" province="广东省" +440104 county="越秀区" prefecture="广州市" province="广东省" +440105 county="海珠区" prefecture="广州市" province="广东省" +440106 county="天河区" prefecture="广州市" province="广东省" +440111 county="白云区" prefecture="广州市" province="广东省" +440112 county="黄埔区" prefecture="广州市" province="广东省" +440113 county="番禺区" prefecture="广州市" province="广东省" +440114 county="花都区" prefecture="广州市" province="广东省" +440115 county="南沙区" prefecture="广州市" province="广东省" +440116 county="萝岗区" prefecture="广州市" province="广东省" +440183 county="增城市" prefecture="广州市" province="广东省" +440184 county="从化市" prefecture="广州市" province="广东省" +440201 county="市辖区" prefecture="韶关市" province="广东省" +440203 county="武江区" prefecture="韶关市" province="广东省" +440204 county="浈江区" prefecture="韶关市" province="广东省" +440205 county="曲江区" prefecture="韶关市" province="广东省" +440222 county="始兴县" prefecture="韶关市" province="广东省" +440224 county="仁化县" prefecture="韶关市" province="广东省" +440229 county="翁源县" prefecture="韶关市" province="广东省" +440232 county="乳源瑶族自治县" prefecture="韶关市" province="广东省" +440233 county="新丰县" prefecture="韶关市" province="广东省" +440281 county="乐昌市" prefecture="韶关市" province="广东省" +440282 county="南雄市" prefecture="韶关市" province="广东省" +440301 county="市辖区" prefecture="深圳市" province="广东省" +440303 county="罗湖区" prefecture="深圳市" province="广东省" +440304 county="福田区" prefecture="深圳市" province="广东省" +440305 county="南山区" prefecture="深圳市" province="广东省" +440306 county="宝安区" prefecture="深圳市" province="广东省" +440307 county="龙岗区" prefecture="深圳市" province="广东省" +440308 county="盐田区" prefecture="深圳市" province="广东省" +440401 county="市辖区" prefecture="珠海市" province="广东省" +440402 county="香洲区" prefecture="珠海市" province="广东省" +440403 county="斗门区" prefecture="珠海市" province="广东省" +440404 county="金湾区" prefecture="珠海市" province="广东省" +440501 county="市辖区" prefecture="汕头市" province="广东省" +440507 county="龙湖区" prefecture="汕头市" province="广东省" +440511 county="金平区" prefecture="汕头市" province="广东省" +440512 county="濠江区" prefecture="汕头市" province="广东省" +440513 county="潮阳区" prefecture="汕头市" province="广东省" +440514 county="潮南区" prefecture="汕头市" province="广东省" +440515 county="澄海区" prefecture="汕头市" province="广东省" +440523 county="南澳县" prefecture="汕头市" province="广东省" +440601 county="市辖区" prefecture="佛山市" province="广东省" +440604 county="禅城区" prefecture="佛山市" province="广东省" +440605 county="南海区" prefecture="佛山市" province="广东省" +440606 county="顺德区" prefecture="佛山市" province="广东省" +440607 county="三水区" prefecture="佛山市" province="广东省" +440608 county="高明区" prefecture="佛山市" province="广东省" +440701 county="市辖区" prefecture="江门市" province="广东省" +440703 county="蓬江区" prefecture="江门市" province="广东省" +440704 county="江海区" prefecture="江门市" province="广东省" +440705 county="新会区" prefecture="江门市" province="广东省" +440781 county="台山市" prefecture="江门市" province="广东省" +440783 county="开平市" prefecture="江门市" province="广东省" +440784 county="鹤山市" prefecture="江门市" province="广东省" +440785 county="恩平市" prefecture="江门市" province="广东省" +440801 county="市辖区" prefecture="湛江市" province="广东省" +440802 county="赤坎区" prefecture="湛江市" province="广东省" +440803 county="霞山区" prefecture="湛江市" province="广东省" +440804 county="坡头区" prefecture="湛江市" province="广东省" +440811 county="麻章区" prefecture="湛江市" province="广东省" +440823 county="遂溪县" prefecture="湛江市" province="广东省" +440825 county="徐闻县" prefecture="湛江市" province="广东省" +440881 county="廉江市" prefecture="湛江市" province="广东省" +440882 county="雷州市" prefecture="湛江市" province="广东省" +440883 county="吴川市" prefecture="湛江市" province="广东省" +440901 county="市辖区" prefecture="茂名市" province="广东省" +440902 county="茂南区" prefecture="茂名市" province="广东省" +440903 county="茂港区" prefecture="茂名市" province="广东省" +440923 county="电白县" prefecture="茂名市" province="广东省" +440981 county="高州市" prefecture="茂名市" province="广东省" +440982 county="化州市" prefecture="茂名市" province="广东省" +440983 county="信宜市" prefecture="茂名市" province="广东省" +441201 county="市辖区" prefecture="肇庆市" province="广东省" +441202 county="端州区" prefecture="肇庆市" province="广东省" +441203 county="鼎湖区" prefecture="肇庆市" province="广东省" +441223 county="广宁县" prefecture="肇庆市" province="广东省" +441224 county="怀集县" prefecture="肇庆市" province="广东省" +441225 county="封开县" prefecture="肇庆市" province="广东省" +441226 county="德庆县" prefecture="肇庆市" province="广东省" +441283 county="高要市" prefecture="肇庆市" province="广东省" +441284 county="四会市" prefecture="肇庆市" province="广东省" +441301 county="市辖区" prefecture="惠州市" province="广东省" +441302 county="惠城区" prefecture="惠州市" province="广东省" +441303 county="惠阳区" prefecture="惠州市" province="广东省" +441322 county="博罗县" prefecture="惠州市" province="广东省" +441323 county="惠东县" prefecture="惠州市" province="广东省" +441324 county="龙门县" prefecture="惠州市" province="广东省" +441401 county="市辖区" prefecture="梅州市" province="广东省" +441402 county="梅江区" prefecture="梅州市" province="广东省" +441421 county="梅县" prefecture="梅州市" province="广东省" +441422 county="大埔县" prefecture="梅州市" province="广东省" +441423 county="丰顺县" prefecture="梅州市" province="广东省" +441424 county="五华县" prefecture="梅州市" province="广东省" +441426 county="平远县" prefecture="梅州市" province="广东省" +441427 county="蕉岭县" prefecture="梅州市" province="广东省" +441481 county="兴宁市" prefecture="梅州市" province="广东省" +441501 county="市辖区" prefecture="汕尾市" province="广东省" +441502 county="城区" prefecture="汕尾市" province="广东省" +441521 county="海丰县" prefecture="汕尾市" province="广东省" +441523 county="陆河县" prefecture="汕尾市" province="广东省" +441581 county="陆丰市" prefecture="汕尾市" province="广东省" +441601 county="市辖区" prefecture="河源市" province="广东省" +441602 county="源城区" prefecture="河源市" province="广东省" +441621 county="紫金县" prefecture="河源市" province="广东省" +441622 county="龙川县" prefecture="河源市" province="广东省" +441623 county="连平县" prefecture="河源市" province="广东省" +441624 county="和平县" prefecture="河源市" province="广东省" +441625 county="东源县" prefecture="河源市" province="广东省" +441701 county="市辖区" prefecture="阳江市" province="广东省" +441702 county="江城区" prefecture="阳江市" province="广东省" +441721 county="阳西县" prefecture="阳江市" province="广东省" +441723 county="阳东县" prefecture="阳江市" province="广东省" +441781 county="阳春市" prefecture="阳江市" province="广东省" +441801 county="市辖区" prefecture="清远市" province="广东省" +441802 county="清城区" prefecture="清远市" province="广东省" +441803 county="清新区" prefecture="清远市" province="广东省" +441821 county="佛冈县" prefecture="清远市" province="广东省" +441823 county="阳山县" prefecture="清远市" province="广东省" +441825 county="连山壮族瑶族自治县" prefecture="清远市" province="广东省" +441826 county="连南瑶族自治县" prefecture="清远市" province="广东省" +441881 county="英德市" prefecture="清远市" province="广东省" +441882 county="连州市" prefecture="清远市" province="广东省" +445101 county="市辖区" prefecture="潮州市" province="广东省" +445102 county="湘桥区" prefecture="潮州市" province="广东省" +445103 county="潮安区" prefecture="潮州市" province="广东省" +445122 county="饶平县" prefecture="潮州市" province="广东省" +445201 county="市辖区" prefecture="揭阳市" province="广东省" +445202 county="榕城区" prefecture="揭阳市" province="广东省" +445203 county="揭东区" prefecture="揭阳市" province="广东省" +445222 county="揭西县" prefecture="揭阳市" province="广东省" +445224 county="惠来县" prefecture="揭阳市" province="广东省" +445281 county="普宁市" prefecture="揭阳市" province="广东省" +445301 county="市辖区" prefecture="云浮市" province="广东省" +445302 county="云城区" prefecture="云浮市" province="广东省" +445321 county="新兴县" prefecture="云浮市" province="广东省" +445322 county="郁南县" prefecture="云浮市" province="广东省" +445323 county="云安县" prefecture="云浮市" province="广东省" +445381 county="罗定市" prefecture="云浮市" province="广东省" +450101 county="市辖区" prefecture="南宁市" province="广西壮族自治区" +450102 county="兴宁区" prefecture="南宁市" province="广西壮族自治区" +450103 county="青秀区" prefecture="南宁市" province="广西壮族自治区" +450105 county="江南区" prefecture="南宁市" province="广西壮族自治区" +450107 county="西乡塘区" prefecture="南宁市" province="广西壮族自治区" +450108 county="良庆区" prefecture="南宁市" province="广西壮族自治区" +450109 county="邕宁区" prefecture="南宁市" province="广西壮族自治区" +450122 county="武鸣县" prefecture="南宁市" province="广西壮族自治区" +450123 county="隆安县" prefecture="南宁市" province="广西壮族自治区" +450124 county="马山县" prefecture="南宁市" province="广西壮族自治区" +450125 county="上林县" prefecture="南宁市" province="广西壮族自治区" +450126 county="宾阳县" prefecture="南宁市" province="广西壮族自治区" +450127 county="横县" prefecture="南宁市" province="广西壮族自治区" +450201 county="市辖区" prefecture="柳州市" province="广西壮族自治区" +450202 county="城中区" prefecture="柳州市" province="广西壮族自治区" +450203 county="鱼峰区" prefecture="柳州市" province="广西壮族自治区" +450204 county="柳南区" prefecture="柳州市" province="广西壮族自治区" +450205 county="柳北区" prefecture="柳州市" province="广西壮族自治区" +450221 county="柳江县" prefecture="柳州市" province="广西壮族自治区" +450222 county="柳城县" prefecture="柳州市" province="广西壮族自治区" +450223 county="鹿寨县" prefecture="柳州市" province="广西壮族自治区" +450224 county="融安县" prefecture="柳州市" province="广西壮族自治区" +450225 county="融水苗族自治县" prefecture="柳州市" province="广西壮族自治区" +450226 county="三江侗族自治县" prefecture="柳州市" province="广西壮族自治区" +450301 county="市辖区" prefecture="桂林市" province="广西壮族自治区" +450302 county="秀峰区" prefecture="桂林市" province="广西壮族自治区" +450303 county="叠彩区" prefecture="桂林市" province="广西壮族自治区" +450304 county="象山区" prefecture="桂林市" province="广西壮族自治区" +450305 county="七星区" prefecture="桂林市" province="广西壮族自治区" +450311 county="雁山区" prefecture="桂林市" province="广西壮族自治区" +450312 county="临桂区" prefecture="桂林市" province="广西壮族自治区" +450321 county="阳朔县" prefecture="桂林市" province="广西壮族自治区" +450323 county="灵川县" prefecture="桂林市" province="广西壮族自治区" +450324 county="全州县" prefecture="桂林市" province="广西壮族自治区" +450325 county="兴安县" prefecture="桂林市" province="广西壮族自治区" +450326 county="永福县" prefecture="桂林市" province="广西壮族自治区" +450327 county="灌阳县" prefecture="桂林市" province="广西壮族自治区" +450328 county="龙胜各族自治县" prefecture="桂林市" province="广西壮族自治区" +450329 county="资源县" prefecture="桂林市" province="广西壮族自治区" +450330 county="平乐县" prefecture="桂林市" province="广西壮族自治区" +450331 county="荔浦县" prefecture="桂林市" province="广西壮族自治区" +450332 county="恭城瑶族自治县" prefecture="桂林市" province="广西壮族自治区" +450401 county="市辖区" prefecture="梧州市" province="广西壮族自治区" +450403 county="万秀区" prefecture="梧州市" province="广西壮族自治区" +450405 county="长洲区" prefecture="梧州市" province="广西壮族自治区" +450406 county="龙圩区" prefecture="梧州市" province="广西壮族自治区" +450421 county="苍梧县" prefecture="梧州市" province="广西壮族自治区" +450422 county="藤县" prefecture="梧州市" province="广西壮族自治区" +450423 county="蒙山县" prefecture="梧州市" province="广西壮族自治区" +450481 county="岑溪市" prefecture="梧州市" province="广西壮族自治区" +450501 county="市辖区" prefecture="北海市" province="广西壮族自治区" +450502 county="海城区" prefecture="北海市" province="广西壮族自治区" +450503 county="银海区" prefecture="北海市" province="广西壮族自治区" +450512 county="铁山港区" prefecture="北海市" province="广西壮族自治区" +450521 county="合浦县" prefecture="北海市" province="广西壮族自治区" +450601 county="市辖区" prefecture="防城港市" province="广西壮族自治区" +450602 county="港口区" prefecture="防城港市" province="广西壮族自治区" +450603 county="防城区" prefecture="防城港市" province="广西壮族自治区" +450621 county="上思县" prefecture="防城港市" province="广西壮族自治区" +450681 county="东兴市" prefecture="防城港市" province="广西壮族自治区" +450701 county="市辖区" prefecture="钦州市" province="广西壮族自治区" +450702 county="钦南区" prefecture="钦州市" province="广西壮族自治区" +450703 county="钦北区" prefecture="钦州市" province="广西壮族自治区" +450721 county="灵山县" prefecture="钦州市" province="广西壮族自治区" +450722 county="浦北县" prefecture="钦州市" province="广西壮族自治区" +450801 county="市辖区" prefecture="贵港市" province="广西壮族自治区" +450802 county="港北区" prefecture="贵港市" province="广西壮族自治区" +450803 county="港南区" prefecture="贵港市" province="广西壮族自治区" +450804 county="覃塘区" prefecture="贵港市" province="广西壮族自治区" +450821 county="平南县" prefecture="贵港市" province="广西壮族自治区" +450881 county="桂平市" prefecture="贵港市" province="广西壮族自治区" +450901 county="市辖区" prefecture="玉林市" province="广西壮族自治区" +450902 county="玉州区" prefecture="玉林市" province="广西壮族自治区" +450903 county="福绵区" prefecture="玉林市" province="广西壮族自治区" +450921 county="容县" prefecture="玉林市" province="广西壮族自治区" +450922 county="陆川县" prefecture="玉林市" province="广西壮族自治区" +450923 county="博白县" prefecture="玉林市" province="广西壮族自治区" +450924 county="兴业县" prefecture="玉林市" province="广西壮族自治区" +450981 county="北流市" prefecture="玉林市" province="广西壮族自治区" +451001 county="市辖区" prefecture="百色市" province="广西壮族自治区" +451002 county="右江区" prefecture="百色市" province="广西壮族自治区" +451021 county="田阳县" prefecture="百色市" province="广西壮族自治区" +451022 county="田东县" prefecture="百色市" province="广西壮族自治区" +451023 county="平果县" prefecture="百色市" province="广西壮族自治区" +451024 county="德保县" prefecture="百色市" province="广西壮族自治区" +451025 county="靖西县" prefecture="百色市" province="广西壮族自治区" +451026 county="那坡县" prefecture="百色市" province="广西壮族自治区" +451027 county="凌云县" prefecture="百色市" province="广西壮族自治区" +451028 county="乐业县" prefecture="百色市" province="广西壮族自治区" +451029 county="田林县" prefecture="百色市" province="广西壮族自治区" +451030 county="西林县" prefecture="百色市" province="广西壮族自治区" +451031 county="隆林各族自治县" prefecture="百色市" province="广西壮族自治区" +451101 county="市辖区" prefecture="贺州市" province="广西壮族自治区" +451102 county="八步区" prefecture="贺州市" province="广西壮族自治区" +451121 county="昭平县" prefecture="贺州市" province="广西壮族自治区" +451122 county="钟山县" prefecture="贺州市" province="广西壮族自治区" +451123 county="富川瑶族自治县" prefecture="贺州市" province="广西壮族自治区" +451201 county="市辖区" prefecture="河池市" province="广西壮族自治区" +451202 county="金城江区" prefecture="河池市" province="广西壮族自治区" +451221 county="南丹县" prefecture="河池市" province="广西壮族自治区" +451222 county="天峨县" prefecture="河池市" province="广西壮族自治区" +451223 county="凤山县" prefecture="河池市" province="广西壮族自治区" +451224 county="东兰县" prefecture="河池市" province="广西壮族自治区" +451225 county="罗城仫佬族自治县" prefecture="河池市" province="广西壮族自治区" +451226 county="环江毛南族自治县" prefecture="河池市" province="广西壮族自治区" +451227 county="巴马瑶族自治县" prefecture="河池市" province="广西壮族自治区" +451228 county="都安瑶族自治县" prefecture="河池市" province="广西壮族自治区" +451229 county="大化瑶族自治县" prefecture="河池市" province="广西壮族自治区" +451281 county="宜州市" prefecture="河池市" province="广西壮族自治区" +451301 county="市辖区" prefecture="来宾市" province="广西壮族自治区" +451302 county="兴宾区" prefecture="来宾市" province="广西壮族自治区" +451321 county="忻城县" prefecture="来宾市" province="广西壮族自治区" +451322 county="象州县" prefecture="来宾市" province="广西壮族自治区" +451323 county="武宣县" prefecture="来宾市" province="广西壮族自治区" +451324 county="金秀瑶族自治县" prefecture="来宾市" province="广西壮族自治区" +451381 county="合山市" prefecture="来宾市" province="广西壮族自治区" +451401 county="市辖区" prefecture="崇左市" province="广西壮族自治区" +451402 county="江州区" prefecture="崇左市" province="广西壮族自治区" +451421 county="扶绥县" prefecture="崇左市" province="广西壮族自治区" +451422 county="宁明县" prefecture="崇左市" province="广西壮族自治区" +451423 county="龙州县" prefecture="崇左市" province="广西壮族自治区" +451424 county="大新县" prefecture="崇左市" province="广西壮族自治区" +451425 county="天等县" prefecture="崇左市" province="广西壮族自治区" +451481 county="凭祥市" prefecture="崇左市" province="广西壮族自治区" +460101 county="市辖区" prefecture="海口市" province="海南省" +460105 county="秀英区" prefecture="海口市" province="海南省" +460106 county="龙华区" prefecture="海口市" province="海南省" +460107 county="琼山区" prefecture="海口市" province="海南省" +460108 county="美兰区" prefecture="海口市" province="海南省" +460201 county="市辖区" prefecture="三亚市" province="海南省" +460321 county="西沙群岛" prefecture="三沙市" province="海南省" +460322 county="南沙群岛" prefecture="三沙市" province="海南省" +460323 county="中沙群岛的岛礁及其海域" prefecture="三沙市" province="海南省" +469001 county="五指山市" prefecture="省直辖县级行政区划" province="海南省" +469002 county="琼海市" prefecture="省直辖县级行政区划" province="海南省" +469003 county="儋州市" prefecture="省直辖县级行政区划" province="海南省" +469005 county="文昌市" prefecture="省直辖县级行政区划" province="海南省" +469006 county="万宁市" prefecture="省直辖县级行政区划" province="海南省" +469007 county="东方市" prefecture="省直辖县级行政区划" province="海南省" +469021 county="定安县" prefecture="省直辖县级行政区划" province="海南省" +469022 county="屯昌县" prefecture="省直辖县级行政区划" province="海南省" +469023 county="澄迈县" prefecture="省直辖县级行政区划" province="海南省" +469024 county="临高县" prefecture="省直辖县级行政区划" province="海南省" +469025 county="白沙黎族自治县" prefecture="省直辖县级行政区划" province="海南省" +469026 county="昌江黎族自治县" prefecture="省直辖县级行政区划" province="海南省" +469027 county="乐东黎族自治县" prefecture="省直辖县级行政区划" province="海南省" +469028 county="陵水黎族自治县" prefecture="省直辖县级行政区划" province="海南省" +469029 county="保亭黎族苗族自治县" prefecture="省直辖县级行政区划" province="海南省" +469030 county="琼中黎族苗族自治县" prefecture="省直辖县级行政区划" province="海南省" +500101 county="万州区" prefecture="市辖区" province="重庆市" +500102 county="涪陵区" prefecture="市辖区" province="重庆市" +500103 county="渝中区" prefecture="市辖区" province="重庆市" +500104 county="大渡口区" prefecture="市辖区" province="重庆市" +500105 county="江北区" prefecture="市辖区" province="重庆市" +500106 county="沙坪坝区" prefecture="市辖区" province="重庆市" +500107 county="九龙坡区" prefecture="市辖区" province="重庆市" +500108 county="南岸区" prefecture="市辖区" province="重庆市" +500109 county="北碚区" prefecture="市辖区" province="重庆市" +500110 county="綦江区" prefecture="市辖区" province="重庆市" +500111 county="大足区" prefecture="市辖区" province="重庆市" +500112 county="渝北区" prefecture="市辖区" province="重庆市" +500113 county="巴南区" prefecture="市辖区" province="重庆市" +500114 county="黔江区" prefecture="市辖区" province="重庆市" +500115 county="长寿区" prefecture="市辖区" province="重庆市" +500116 county="江津区" prefecture="市辖区" province="重庆市" +500117 county="合川区" prefecture="市辖区" province="重庆市" +500118 county="永川区" prefecture="市辖区" province="重庆市" +500119 county="南川区" prefecture="市辖区" province="重庆市" +500223 county="潼南县" prefecture="县" province="重庆市" +500224 county="铜梁县" prefecture="县" province="重庆市" +500226 county="荣昌县" prefecture="县" province="重庆市" +500227 county="璧山县" prefecture="县" province="重庆市" +500228 county="梁平县" prefecture="县" province="重庆市" +500229 county="城口县" prefecture="县" province="重庆市" +500230 county="丰都县" prefecture="县" province="重庆市" +500231 county="垫江县" prefecture="县" province="重庆市" +500232 county="武隆县" prefecture="县" province="重庆市" +500233 county="忠县" prefecture="县" province="重庆市" +500234 county="开县" prefecture="县" province="重庆市" +500235 county="云阳县" prefecture="县" province="重庆市" +500236 county="奉节县" prefecture="县" province="重庆市" +500237 county="巫山县" prefecture="县" province="重庆市" +500238 county="巫溪县" prefecture="县" province="重庆市" +500240 county="石柱土家族自治县" prefecture="县" province="重庆市" +500241 county="秀山土家族苗族自治县" prefecture="县" province="重庆市" +500242 county="酉阳土家族苗族自治县" prefecture="县" province="重庆市" +500243 county="彭水苗族土家族自治县" prefecture="县" province="重庆市" +510101 county="市辖区" prefecture="成都市" province="四川省" +510104 county="锦江区" prefecture="成都市" province="四川省" +510105 county="青羊区" prefecture="成都市" province="四川省" +510106 county="金牛区" prefecture="成都市" province="四川省" +510107 county="武侯区" prefecture="成都市" province="四川省" +510108 county="成华区" prefecture="成都市" province="四川省" +510112 county="龙泉驿区" prefecture="成都市" province="四川省" +510113 county="青白江区" prefecture="成都市" province="四川省" +510114 county="新都区" prefecture="成都市" province="四川省" +510115 county="温江区" prefecture="成都市" province="四川省" +510121 county="金堂县" prefecture="成都市" province="四川省" +510122 county="双流县" prefecture="成都市" province="四川省" +510124 county="郫县" prefecture="成都市" province="四川省" +510129 county="大邑县" prefecture="成都市" province="四川省" +510131 county="蒲江县" prefecture="成都市" province="四川省" +510132 county="新津县" prefecture="成都市" province="四川省" +510181 county="都江堰市" prefecture="成都市" province="四川省" +510182 county="彭州市" prefecture="成都市" province="四川省" +510183 county="邛崃市" prefecture="成都市" province="四川省" +510184 county="崇州市" prefecture="成都市" province="四川省" +510301 county="市辖区" prefecture="自贡市" province="四川省" +510302 county="自流井区" prefecture="自贡市" province="四川省" +510303 county="贡井区" prefecture="自贡市" province="四川省" +510304 county="大安区" prefecture="自贡市" province="四川省" +510311 county="沿滩区" prefecture="自贡市" province="四川省" +510321 county="荣县" prefecture="自贡市" province="四川省" +510322 county="富顺县" prefecture="自贡市" province="四川省" +510401 county="市辖区" prefecture="攀枝花市" province="四川省" +510402 county="东区" prefecture="攀枝花市" province="四川省" +510403 county="西区" prefecture="攀枝花市" province="四川省" +510411 county="仁和区" prefecture="攀枝花市" province="四川省" +510421 county="米易县" prefecture="攀枝花市" province="四川省" +510422 county="盐边县" prefecture="攀枝花市" province="四川省" +510501 county="市辖区" prefecture="泸州市" province="四川省" +510502 county="江阳区" prefecture="泸州市" province="四川省" +510503 county="纳溪区" prefecture="泸州市" province="四川省" +510504 county="龙马潭区" prefecture="泸州市" province="四川省" +510521 county="泸县" prefecture="泸州市" province="四川省" +510522 county="合江县" prefecture="泸州市" province="四川省" +510524 county="叙永县" prefecture="泸州市" province="四川省" +510525 county="古蔺县" prefecture="泸州市" province="四川省" +510601 county="市辖区" prefecture="德阳市" province="四川省" +510603 county="旌阳区" prefecture="德阳市" province="四川省" +510623 county="中江县" prefecture="德阳市" province="四川省" +510626 county="罗江县" prefecture="德阳市" province="四川省" +510681 county="广汉市" prefecture="德阳市" province="四川省" +510682 county="什邡市" prefecture="德阳市" province="四川省" +510683 county="绵竹市" prefecture="德阳市" province="四川省" +510701 county="市辖区" prefecture="绵阳市" province="四川省" +510703 county="涪城区" prefecture="绵阳市" province="四川省" +510704 county="游仙区" prefecture="绵阳市" province="四川省" +510722 county="三台县" prefecture="绵阳市" province="四川省" +510723 county="盐亭县" prefecture="绵阳市" province="四川省" +510724 county="安县" prefecture="绵阳市" province="四川省" +510725 county="梓潼县" prefecture="绵阳市" province="四川省" +510726 county="北川羌族自治县" prefecture="绵阳市" province="四川省" +510727 county="平武县" prefecture="绵阳市" province="四川省" +510781 county="江油市" prefecture="绵阳市" province="四川省" +510801 county="市辖区" prefecture="广元市" province="四川省" +510802 county="利州区" prefecture="广元市" province="四川省" +510811 county="元坝区" prefecture="广元市" province="四川省" +510812 county="朝天区" prefecture="广元市" province="四川省" +510821 county="旺苍县" prefecture="广元市" province="四川省" +510822 county="青川县" prefecture="广元市" province="四川省" +510823 county="剑阁县" prefecture="广元市" province="四川省" +510824 county="苍溪县" prefecture="广元市" province="四川省" +510901 county="市辖区" prefecture="遂宁市" province="四川省" +510903 county="船山区" prefecture="遂宁市" province="四川省" +510904 county="安居区" prefecture="遂宁市" province="四川省" +510921 county="蓬溪县" prefecture="遂宁市" province="四川省" +510922 county="射洪县" prefecture="遂宁市" province="四川省" +510923 county="大英县" prefecture="遂宁市" province="四川省" +511001 county="市辖区" prefecture="内江市" province="四川省" +511002 county="市中区" prefecture="内江市" province="四川省" +511011 county="东兴区" prefecture="内江市" province="四川省" +511024 county="威远县" prefecture="内江市" province="四川省" +511025 county="资中县" prefecture="内江市" province="四川省" +511028 county="隆昌县" prefecture="内江市" province="四川省" +511101 county="市辖区" prefecture="乐山市" province="四川省" +511102 county="市中区" prefecture="乐山市" province="四川省" +511111 county="沙湾区" prefecture="乐山市" province="四川省" +511112 county="五通桥区" prefecture="乐山市" province="四川省" +511113 county="金口河区" prefecture="乐山市" province="四川省" +511123 county="犍为县" prefecture="乐山市" province="四川省" +511124 county="井研县" prefecture="乐山市" province="四川省" +511126 county="夹江县" prefecture="乐山市" province="四川省" +511129 county="沐川县" prefecture="乐山市" province="四川省" +511132 county="峨边彝族自治县" prefecture="乐山市" province="四川省" +511133 county="马边彝族自治县" prefecture="乐山市" province="四川省" +511181 county="峨眉山市" prefecture="乐山市" province="四川省" +511301 county="市辖区" prefecture="南充市" province="四川省" +511302 county="顺庆区" prefecture="南充市" province="四川省" +511303 county="高坪区" prefecture="南充市" province="四川省" +511304 county="嘉陵区" prefecture="南充市" province="四川省" +511321 county="南部县" prefecture="南充市" province="四川省" +511322 county="营山县" prefecture="南充市" province="四川省" +511323 county="蓬安县" prefecture="南充市" province="四川省" +511324 county="仪陇县" prefecture="南充市" province="四川省" +511325 county="西充县" prefecture="南充市" province="四川省" +511381 county="阆中市" prefecture="南充市" province="四川省" +511401 county="市辖区" prefecture="眉山市" province="四川省" +511402 county="东坡区" prefecture="眉山市" province="四川省" +511421 county="仁寿县" prefecture="眉山市" province="四川省" +511422 county="彭山县" prefecture="眉山市" province="四川省" +511423 county="洪雅县" prefecture="眉山市" province="四川省" +511424 county="丹棱县" prefecture="眉山市" province="四川省" +511425 county="青神县" prefecture="眉山市" province="四川省" +511501 county="市辖区" prefecture="宜宾市" province="四川省" +511502 county="翠屏区" prefecture="宜宾市" province="四川省" +511503 county="南溪区" prefecture="宜宾市" province="四川省" +511521 county="宜宾县" prefecture="宜宾市" province="四川省" +511523 county="江安县" prefecture="宜宾市" province="四川省" +511524 county="长宁县" prefecture="宜宾市" province="四川省" +511525 county="高县" prefecture="宜宾市" province="四川省" +511526 county="珙县" prefecture="宜宾市" province="四川省" +511527 county="筠连县" prefecture="宜宾市" province="四川省" +511528 county="兴文县" prefecture="宜宾市" province="四川省" +511529 county="屏山县" prefecture="宜宾市" province="四川省" +511601 county="市辖区" prefecture="广安市" province="四川省" +511602 county="广安区" prefecture="广安市" province="四川省" +511603 county="前锋区" prefecture="广安市" province="四川省" +511621 county="岳池县" prefecture="广安市" province="四川省" +511622 county="武胜县" prefecture="广安市" province="四川省" +511623 county="邻水县" prefecture="广安市" province="四川省" +511681 county="华蓥市" prefecture="广安市" province="四川省" +511701 county="市辖区" prefecture="达州市" province="四川省" +511702 county="通川区" prefecture="达州市" province="四川省" +511703 county="达川区" prefecture="达州市" province="四川省" +511722 county="宣汉县" prefecture="达州市" province="四川省" +511723 county="开江县" prefecture="达州市" province="四川省" +511724 county="大竹县" prefecture="达州市" province="四川省" +511725 county="渠县" prefecture="达州市" province="四川省" +511781 county="万源市" prefecture="达州市" province="四川省" +511801 county="市辖区" prefecture="雅安市" province="四川省" +511802 county="雨城区" prefecture="雅安市" province="四川省" +511803 county="名山区" prefecture="雅安市" province="四川省" +511822 county="荥经县" prefecture="雅安市" province="四川省" +511823 county="汉源县" prefecture="雅安市" province="四川省" +511824 county="石棉县" prefecture="雅安市" province="四川省" +511825 county="天全县" prefecture="雅安市" province="四川省" +511826 county="芦山县" prefecture="雅安市" province="四川省" +511827 county="宝兴县" prefecture="雅安市" province="四川省" +511901 county="市辖区" prefecture="巴中市" province="四川省" +511902 county="巴州区" prefecture="巴中市" province="四川省" +511903 county="恩阳区" prefecture="巴中市" province="四川省" +511921 county="通江县" prefecture="巴中市" province="四川省" +511922 county="南江县" prefecture="巴中市" province="四川省" +511923 county="平昌县" prefecture="巴中市" province="四川省" +512001 county="市辖区" prefecture="资阳市" province="四川省" +512002 county="雁江区" prefecture="资阳市" province="四川省" +512021 county="安岳县" prefecture="资阳市" province="四川省" +512022 county="乐至县" prefecture="资阳市" province="四川省" +512081 county="简阳市" prefecture="资阳市" province="四川省" +513221 county="汶川县" prefecture="阿坝藏族羌族自治州" province="四川省" +513222 county="理县" prefecture="阿坝藏族羌族自治州" province="四川省" +513223 county="茂县" prefecture="阿坝藏族羌族自治州" province="四川省" +513224 county="松潘县" prefecture="阿坝藏族羌族自治州" province="四川省" +513225 county="九寨沟县" prefecture="阿坝藏族羌族自治州" province="四川省" +513226 county="金川县" prefecture="阿坝藏族羌族自治州" province="四川省" +513227 county="小金县" prefecture="阿坝藏族羌族自治州" province="四川省" +513228 county="黑水县" prefecture="阿坝藏族羌族自治州" province="四川省" +513229 county="马尔康县" prefecture="阿坝藏族羌族自治州" province="四川省" +513230 county="壤塘县" prefecture="阿坝藏族羌族自治州" province="四川省" +513231 county="阿坝县" prefecture="阿坝藏族羌族自治州" province="四川省" +513232 county="若尔盖县" prefecture="阿坝藏族羌族自治州" province="四川省" +513233 county="红原县" prefecture="阿坝藏族羌族自治州" province="四川省" +513321 county="康定县" prefecture="甘孜藏族自治州" province="四川省" +513322 county="泸定县" prefecture="甘孜藏族自治州" province="四川省" +513323 county="丹巴县" prefecture="甘孜藏族自治州" province="四川省" +513324 county="九龙县" prefecture="甘孜藏族自治州" province="四川省" +513325 county="雅江县" prefecture="甘孜藏族自治州" province="四川省" +513326 county="道孚县" prefecture="甘孜藏族自治州" province="四川省" +513327 county="炉霍县" prefecture="甘孜藏族自治州" province="四川省" +513328 county="甘孜县" prefecture="甘孜藏族自治州" province="四川省" +513329 county="新龙县" prefecture="甘孜藏族自治州" province="四川省" +513330 county="德格县" prefecture="甘孜藏族自治州" province="四川省" +513331 county="白玉县" prefecture="甘孜藏族自治州" province="四川省" +513332 county="石渠县" prefecture="甘孜藏族自治州" province="四川省" +513333 county="色达县" prefecture="甘孜藏族自治州" province="四川省" +513334 county="理塘县" prefecture="甘孜藏族自治州" province="四川省" +513335 county="巴塘县" prefecture="甘孜藏族自治州" province="四川省" +513336 county="乡城县" prefecture="甘孜藏族自治州" province="四川省" +513337 county="稻城县" prefecture="甘孜藏族自治州" province="四川省" +513338 county="得荣县" prefecture="甘孜藏族自治州" province="四川省" +513401 county="西昌市" prefecture="凉山彝族自治州" province="四川省" +513422 county="木里藏族自治县" prefecture="凉山彝族自治州" province="四川省" +513423 county="盐源县" prefecture="凉山彝族自治州" province="四川省" +513424 county="德昌县" prefecture="凉山彝族自治州" province="四川省" +513425 county="会理县" prefecture="凉山彝族自治州" province="四川省" +513426 county="会东县" prefecture="凉山彝族自治州" province="四川省" +513427 county="宁南县" prefecture="凉山彝族自治州" province="四川省" +513428 county="普格县" prefecture="凉山彝族自治州" province="四川省" +513429 county="布拖县" prefecture="凉山彝族自治州" province="四川省" +513430 county="金阳县" prefecture="凉山彝族自治州" province="四川省" +513431 county="昭觉县" prefecture="凉山彝族自治州" province="四川省" +513432 county="喜德县" prefecture="凉山彝族自治州" province="四川省" +513433 county="冕宁县" prefecture="凉山彝族自治州" province="四川省" +513434 county="越西县" prefecture="凉山彝族自治州" province="四川省" +513435 county="甘洛县" prefecture="凉山彝族自治州" province="四川省" +513436 county="美姑县" prefecture="凉山彝族自治州" province="四川省" +513437 county="雷波县" prefecture="凉山彝族自治州" province="四川省" +520101 county="市辖区" prefecture="贵阳市" province="贵州省" +520102 county="南明区" prefecture="贵阳市" province="贵州省" +520103 county="云岩区" prefecture="贵阳市" province="贵州省" +520111 county="花溪区" prefecture="贵阳市" province="贵州省" +520112 county="乌当区" prefecture="贵阳市" province="贵州省" +520113 county="白云区" prefecture="贵阳市" province="贵州省" +520115 county="观山湖区" prefecture="贵阳市" province="贵州省" +520121 county="开阳县" prefecture="贵阳市" province="贵州省" +520122 county="息烽县" prefecture="贵阳市" province="贵州省" +520123 county="修文县" prefecture="贵阳市" province="贵州省" +520181 county="清镇市" prefecture="贵阳市" province="贵州省" +520201 county="钟山区" prefecture="六盘水市" province="贵州省" +520203 county="六枝特区" prefecture="六盘水市" province="贵州省" +520221 county="水城县" prefecture="六盘水市" province="贵州省" +520222 county="盘县" prefecture="六盘水市" province="贵州省" +520301 county="市辖区" prefecture="遵义市" province="贵州省" +520302 county="红花岗区" prefecture="遵义市" province="贵州省" +520303 county="汇川区" prefecture="遵义市" province="贵州省" +520321 county="遵义县" prefecture="遵义市" province="贵州省" +520322 county="桐梓县" prefecture="遵义市" province="贵州省" +520323 county="绥阳县" prefecture="遵义市" province="贵州省" +520324 county="正安县" prefecture="遵义市" province="贵州省" +520325 county="道真仡佬族苗族自治县" prefecture="遵义市" province="贵州省" +520326 county="务川仡佬族苗族自治县" prefecture="遵义市" province="贵州省" +520327 county="凤冈县" prefecture="遵义市" province="贵州省" +520328 county="湄潭县" prefecture="遵义市" province="贵州省" +520329 county="余庆县" prefecture="遵义市" province="贵州省" +520330 county="习水县" prefecture="遵义市" province="贵州省" +520381 county="赤水市" prefecture="遵义市" province="贵州省" +520382 county="仁怀市" prefecture="遵义市" province="贵州省" +520401 county="市辖区" prefecture="安顺市" province="贵州省" +520402 county="西秀区" prefecture="安顺市" province="贵州省" +520421 county="平坝县" prefecture="安顺市" province="贵州省" +520422 county="普定县" prefecture="安顺市" province="贵州省" +520423 county="镇宁布依族苗族自治县" prefecture="安顺市" province="贵州省" +520424 county="关岭布依族苗族自治县" prefecture="安顺市" province="贵州省" +520425 county="紫云苗族布依族自治县" prefecture="安顺市" province="贵州省" +520501 county="市辖区" prefecture="毕节市" province="贵州省" +520502 county="七星关区" prefecture="毕节市" province="贵州省" +520521 county="大方县" prefecture="毕节市" province="贵州省" +520522 county="黔西县" prefecture="毕节市" province="贵州省" +520523 county="金沙县" prefecture="毕节市" province="贵州省" +520524 county="织金县" prefecture="毕节市" province="贵州省" +520525 county="纳雍县" prefecture="毕节市" province="贵州省" +520526 county="威宁彝族回族苗族自治县" prefecture="毕节市" province="贵州省" +520527 county="赫章县" prefecture="毕节市" province="贵州省" +520601 county="市辖区" prefecture="铜仁市" province="贵州省" +520602 county="碧江区" prefecture="铜仁市" province="贵州省" +520603 county="万山区" prefecture="铜仁市" province="贵州省" +520621 county="江口县" prefecture="铜仁市" province="贵州省" +520622 county="玉屏侗族自治县" prefecture="铜仁市" province="贵州省" +520623 county="石阡县" prefecture="铜仁市" province="贵州省" +520624 county="思南县" prefecture="铜仁市" province="贵州省" +520625 county="印江土家族苗族自治县" prefecture="铜仁市" province="贵州省" +520626 county="德江县" prefecture="铜仁市" province="贵州省" +520627 county="沿河土家族自治县" prefecture="铜仁市" province="贵州省" +520628 county="松桃苗族自治县" prefecture="铜仁市" province="贵州省" +522301 county="兴义市" prefecture="黔西南布依族苗族自治州" province="贵州省" +522322 county="兴仁县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522323 county="普安县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522324 county="晴隆县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522325 county="贞丰县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522326 county="望谟县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522327 county="册亨县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522328 county="安龙县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522601 county="凯里市" prefecture="黔东南苗族侗族自治州" province="贵州省" +522622 county="黄平县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522623 county="施秉县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522624 county="三穗县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522625 county="镇远县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522626 county="岑巩县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522627 county="天柱县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522628 county="锦屏县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522629 county="剑河县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522630 county="台江县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522631 county="黎平县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522632 county="榕江县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522633 county="从江县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522634 county="雷山县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522635 county="麻江县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522636 county="丹寨县" prefecture="黔东南苗族侗族自治州" province="贵州省" +522701 county="都匀市" prefecture="黔南布依族苗族自治州" province="贵州省" +522702 county="福泉市" prefecture="黔南布依族苗族自治州" province="贵州省" +522722 county="荔波县" prefecture="黔南布依族苗族自治州" province="贵州省" +522723 county="贵定县" prefecture="黔南布依族苗族自治州" province="贵州省" +522725 county="瓮安县" prefecture="黔南布依族苗族自治州" province="贵州省" +522726 county="独山县" prefecture="黔南布依族苗族自治州" province="贵州省" +522727 county="平塘县" prefecture="黔南布依族苗族自治州" province="贵州省" +522728 county="罗甸县" prefecture="黔南布依族苗族自治州" province="贵州省" +522729 county="长顺县" prefecture="黔南布依族苗族自治州" province="贵州省" +522730 county="龙里县" prefecture="黔南布依族苗族自治州" province="贵州省" +522731 county="惠水县" prefecture="黔南布依族苗族自治州" province="贵州省" +522732 county="三都水族自治县" prefecture="黔南布依族苗族自治州" province="贵州省" +530101 county="市辖区" prefecture="昆明市" province="云南省" +530102 county="五华区" prefecture="昆明市" province="云南省" +530103 county="盘龙区" prefecture="昆明市" province="云南省" +530111 county="官渡区" prefecture="昆明市" province="云南省" +530112 county="西山区" prefecture="昆明市" province="云南省" +530113 county="东川区" prefecture="昆明市" province="云南省" +530114 county="呈贡区" prefecture="昆明市" province="云南省" +530122 county="晋宁县" prefecture="昆明市" province="云南省" +530124 county="富民县" prefecture="昆明市" province="云南省" +530125 county="宜良县" prefecture="昆明市" province="云南省" +530126 county="石林彝族自治县" prefecture="昆明市" province="云南省" +530127 county="嵩明县" prefecture="昆明市" province="云南省" +530128 county="禄劝彝族苗族自治县" prefecture="昆明市" province="云南省" +530129 county="寻甸回族彝族自治县" prefecture="昆明市" province="云南省" +530181 county="安宁市" prefecture="昆明市" province="云南省" +530301 county="市辖区" prefecture="曲靖市" province="云南省" +530302 county="麒麟区" prefecture="曲靖市" province="云南省" +530321 county="马龙县" prefecture="曲靖市" province="云南省" +530322 county="陆良县" prefecture="曲靖市" province="云南省" +530323 county="师宗县" prefecture="曲靖市" province="云南省" +530324 county="罗平县" prefecture="曲靖市" province="云南省" +530325 county="富源县" prefecture="曲靖市" province="云南省" +530326 county="会泽县" prefecture="曲靖市" province="云南省" +530328 county="沾益县" prefecture="曲靖市" province="云南省" +530381 county="宣威市" prefecture="曲靖市" province="云南省" +530401 county="市辖区" prefecture="玉溪市" province="云南省" +530402 county="红塔区" prefecture="玉溪市" province="云南省" +530421 county="江川县" prefecture="玉溪市" province="云南省" +530422 county="澄江县" prefecture="玉溪市" province="云南省" +530423 county="通海县" prefecture="玉溪市" province="云南省" +530424 county="华宁县" prefecture="玉溪市" province="云南省" +530425 county="易门县" prefecture="玉溪市" province="云南省" +530426 county="峨山彝族自治县" prefecture="玉溪市" province="云南省" +530427 county="新平彝族傣族自治县" prefecture="玉溪市" province="云南省" +530428 county="元江哈尼族彝族傣族自治县" prefecture="玉溪市" province="云南省" +530501 county="市辖区" prefecture="保山市" province="云南省" +530502 county="隆阳区" prefecture="保山市" province="云南省" +530521 county="施甸县" prefecture="保山市" province="云南省" +530522 county="腾冲县" prefecture="保山市" province="云南省" +530523 county="龙陵县" prefecture="保山市" province="云南省" +530524 county="昌宁县" prefecture="保山市" province="云南省" +530601 county="市辖区" prefecture="昭通市" province="云南省" +530602 county="昭阳区" prefecture="昭通市" province="云南省" +530621 county="鲁甸县" prefecture="昭通市" province="云南省" +530622 county="巧家县" prefecture="昭通市" province="云南省" +530623 county="盐津县" prefecture="昭通市" province="云南省" +530624 county="大关县" prefecture="昭通市" province="云南省" +530625 county="永善县" prefecture="昭通市" province="云南省" +530626 county="绥江县" prefecture="昭通市" province="云南省" +530627 county="镇雄县" prefecture="昭通市" province="云南省" +530628 county="彝良县" prefecture="昭通市" province="云南省" +530629 county="威信县" prefecture="昭通市" province="云南省" +530630 county="水富县" prefecture="昭通市" province="云南省" +530701 county="市辖区" prefecture="丽江市" province="云南省" +530702 county="古城区" prefecture="丽江市" province="云南省" +530721 county="玉龙纳西族自治县" prefecture="丽江市" province="云南省" +530722 county="永胜县" prefecture="丽江市" province="云南省" +530723 county="华坪县" prefecture="丽江市" province="云南省" +530724 county="宁蒗彝族自治县" prefecture="丽江市" province="云南省" +530801 county="市辖区" prefecture="普洱市" province="云南省" +530802 county="思茅区" prefecture="普洱市" province="云南省" +530821 county="宁洱哈尼族彝族自治县" prefecture="普洱市" province="云南省" +530822 county="墨江哈尼族自治县" prefecture="普洱市" province="云南省" +530823 county="景东彝族自治县" prefecture="普洱市" province="云南省" +530824 county="景谷傣族彝族自治县" prefecture="普洱市" province="云南省" +530825 county="镇沅彝族哈尼族拉祜族自治县" prefecture="普洱市" province="云南省" +530826 county="江城哈尼族彝族自治县" prefecture="普洱市" province="云南省" +530827 county="孟连傣族拉祜族佤族自治县" prefecture="普洱市" province="云南省" +530828 county="澜沧拉祜族自治县" prefecture="普洱市" province="云南省" +530829 county="西盟佤族自治县" prefecture="普洱市" province="云南省" +530901 county="市辖区" prefecture="临沧市" province="云南省" +530902 county="临翔区" prefecture="临沧市" province="云南省" +530921 county="凤庆县" prefecture="临沧市" province="云南省" +530922 county="云县" prefecture="临沧市" province="云南省" +530923 county="永德县" prefecture="临沧市" province="云南省" +530924 county="镇康县" prefecture="临沧市" province="云南省" +530925 county="双江拉祜族佤族布朗族傣族自治县" prefecture="临沧市" province="云南省" +530926 county="耿马傣族佤族自治县" prefecture="临沧市" province="云南省" +530927 county="沧源佤族自治县" prefecture="临沧市" province="云南省" +532301 county="楚雄市" prefecture="楚雄彝族自治州" province="云南省" +532322 county="双柏县" prefecture="楚雄彝族自治州" province="云南省" +532323 county="牟定县" prefecture="楚雄彝族自治州" province="云南省" +532324 county="南华县" prefecture="楚雄彝族自治州" province="云南省" +532325 county="姚安县" prefecture="楚雄彝族自治州" province="云南省" +532326 county="大姚县" prefecture="楚雄彝族自治州" province="云南省" +532327 county="永仁县" prefecture="楚雄彝族自治州" province="云南省" +532328 county="元谋县" prefecture="楚雄彝族自治州" province="云南省" +532329 county="武定县" prefecture="楚雄彝族自治州" province="云南省" +532331 county="禄丰县" prefecture="楚雄彝族自治州" province="云南省" +532501 county="个旧市" prefecture="红河哈尼族彝族自治州" province="云南省" +532502 county="开远市" prefecture="红河哈尼族彝族自治州" province="云南省" +532503 county="蒙自市" prefecture="红河哈尼族彝族自治州" province="云南省" +532504 county="弥勒市" prefecture="红河哈尼族彝族自治州" province="云南省" +532523 county="屏边苗族自治县" prefecture="红河哈尼族彝族自治州" province="云南省" +532524 county="建水县" prefecture="红河哈尼族彝族自治州" province="云南省" +532525 county="石屏县" prefecture="红河哈尼族彝族自治州" province="云南省" +532527 county="泸西县" prefecture="红河哈尼族彝族自治州" province="云南省" +532528 county="元阳县" prefecture="红河哈尼族彝族自治州" province="云南省" +532529 county="红河县" prefecture="红河哈尼族彝族自治州" province="云南省" +532530 county="金平苗族瑶族傣族自治县" prefecture="红河哈尼族彝族自治州" province="云南省" +532531 county="绿春县" prefecture="红河哈尼族彝族自治州" province="云南省" +532532 county="河口瑶族自治县" prefecture="红河哈尼族彝族自治州" province="云南省" +532601 county="文山市" prefecture="文山壮族苗族自治州" province="云南省" +532622 county="砚山县" prefecture="文山壮族苗族自治州" province="云南省" +532623 county="西畴县" prefecture="文山壮族苗族自治州" province="云南省" +532624 county="麻栗坡县" prefecture="文山壮族苗族自治州" province="云南省" +532625 county="马关县" prefecture="文山壮族苗族自治州" province="云南省" +532626 county="丘北县" prefecture="文山壮族苗族自治州" province="云南省" +532627 county="广南县" prefecture="文山壮族苗族自治州" province="云南省" +532628 county="富宁县" prefecture="文山壮族苗族自治州" province="云南省" +532801 county="景洪市" prefecture="西双版纳傣族自治州" province="云南省" +532822 county="勐海县" prefecture="西双版纳傣族自治州" province="云南省" +532823 county="勐腊县" prefecture="西双版纳傣族自治州" province="云南省" +532901 county="大理市" prefecture="大理白族自治州" province="云南省" +532922 county="漾濞彝族自治县" prefecture="大理白族自治州" province="云南省" +532923 county="祥云县" prefecture="大理白族自治州" province="云南省" +532924 county="宾川县" prefecture="大理白族自治州" province="云南省" +532925 county="弥渡县" prefecture="大理白族自治州" province="云南省" +532926 county="南涧彝族自治县" prefecture="大理白族自治州" province="云南省" +532927 county="巍山彝族回族自治县" prefecture="大理白族自治州" province="云南省" +532928 county="永平县" prefecture="大理白族自治州" province="云南省" +532929 county="云龙县" prefecture="大理白族自治州" province="云南省" +532930 county="洱源县" prefecture="大理白族自治州" province="云南省" +532931 county="剑川县" prefecture="大理白族自治州" province="云南省" +532932 county="鹤庆县" prefecture="大理白族自治州" province="云南省" +533102 county="瑞丽市" prefecture="德宏傣族景颇族自治州" province="云南省" +533103 county="芒市" prefecture="德宏傣族景颇族自治州" province="云南省" +533122 county="梁河县" prefecture="德宏傣族景颇族自治州" province="云南省" +533123 county="盈江县" prefecture="德宏傣族景颇族自治州" province="云南省" +533124 county="陇川县" prefecture="德宏傣族景颇族自治州" province="云南省" +533321 county="泸水县" prefecture="怒江傈僳族自治州" province="云南省" +533323 county="福贡县" prefecture="怒江傈僳族自治州" province="云南省" +533324 county="贡山独龙族怒族自治县" prefecture="怒江傈僳族自治州" province="云南省" +533325 county="兰坪白族普米族自治县" prefecture="怒江傈僳族自治州" province="云南省" +533421 county="香格里拉县" prefecture="迪庆藏族自治州" province="云南省" +533422 county="德钦县" prefecture="迪庆藏族自治州" province="云南省" +533423 county="维西傈僳族自治县" prefecture="迪庆藏族自治州" province="云南省" +540101 county="市辖区" prefecture="拉萨市" province="西藏自治区" +540102 county="城关区" prefecture="拉萨市" province="西藏自治区" +540121 county="林周县" prefecture="拉萨市" province="西藏自治区" +540122 county="当雄县" prefecture="拉萨市" province="西藏自治区" +540123 county="尼木县" prefecture="拉萨市" province="西藏自治区" +540124 county="曲水县" prefecture="拉萨市" province="西藏自治区" +540125 county="堆龙德庆县" prefecture="拉萨市" province="西藏自治区" +540126 county="达孜县" prefecture="拉萨市" province="西藏自治区" +540127 county="墨竹工卡县" prefecture="拉萨市" province="西藏自治区" +542121 county="昌都县" prefecture="昌都地区" province="西藏自治区" +542122 county="江达县" prefecture="昌都地区" province="西藏自治区" +542123 county="贡觉县" prefecture="昌都地区" province="西藏自治区" +542124 county="类乌齐县" prefecture="昌都地区" province="西藏自治区" +542125 county="丁青县" prefecture="昌都地区" province="西藏自治区" +542126 county="察雅县" prefecture="昌都地区" province="西藏自治区" +542127 county="八宿县" prefecture="昌都地区" province="西藏自治区" +542128 county="左贡县" prefecture="昌都地区" province="西藏自治区" +542129 county="芒康县" prefecture="昌都地区" province="西藏自治区" +542132 county="洛隆县" prefecture="昌都地区" province="西藏自治区" +542133 county="边坝县" prefecture="昌都地区" province="西藏自治区" +542221 county="乃东县" prefecture="山南地区" province="西藏自治区" +542222 county="扎囊县" prefecture="山南地区" province="西藏自治区" +542223 county="贡嘎县" prefecture="山南地区" province="西藏自治区" +542224 county="桑日县" prefecture="山南地区" province="西藏自治区" +542225 county="琼结县" prefecture="山南地区" province="西藏自治区" +542226 county="曲松县" prefecture="山南地区" province="西藏自治区" +542227 county="措美县" prefecture="山南地区" province="西藏自治区" +542228 county="洛扎县" prefecture="山南地区" province="西藏自治区" +542229 county="加查县" prefecture="山南地区" province="西藏自治区" +542231 county="隆子县" prefecture="山南地区" province="西藏自治区" +542232 county="错那县" prefecture="山南地区" province="西藏自治区" +542233 county="浪卡子县" prefecture="山南地区" province="西藏自治区" +542301 county="日喀则市" prefecture="日喀则地区" province="西藏自治区" +542322 county="南木林县" prefecture="日喀则地区" province="西藏自治区" +542323 county="江孜县" prefecture="日喀则地区" province="西藏自治区" +542324 county="定日县" prefecture="日喀则地区" province="西藏自治区" +542325 county="萨迦县" prefecture="日喀则地区" province="西藏自治区" +542326 county="拉孜县" prefecture="日喀则地区" province="西藏自治区" +542327 county="昂仁县" prefecture="日喀则地区" province="西藏自治区" +542328 county="谢通门县" prefecture="日喀则地区" province="西藏自治区" +542329 county="白朗县" prefecture="日喀则地区" province="西藏自治区" +542330 county="仁布县" prefecture="日喀则地区" province="西藏自治区" +542331 county="康马县" prefecture="日喀则地区" province="西藏自治区" +542332 county="定结县" prefecture="日喀则地区" province="西藏自治区" +542333 county="仲巴县" prefecture="日喀则地区" province="西藏自治区" +542334 county="亚东县" prefecture="日喀则地区" province="西藏自治区" +542335 county="吉隆县" prefecture="日喀则地区" province="西藏自治区" +542336 county="聂拉木县" prefecture="日喀则地区" province="西藏自治区" +542337 county="萨嘎县" prefecture="日喀则地区" province="西藏自治区" +542338 county="岗巴县" prefecture="日喀则地区" province="西藏自治区" +542421 county="那曲县" prefecture="那曲地区" province="西藏自治区" +542422 county="嘉黎县" prefecture="那曲地区" province="西藏自治区" +542423 county="比如县" prefecture="那曲地区" province="西藏自治区" +542424 county="聂荣县" prefecture="那曲地区" province="西藏自治区" +542425 county="安多县" prefecture="那曲地区" province="西藏自治区" +542426 county="申扎县" prefecture="那曲地区" province="西藏自治区" +542427 county="索县" prefecture="那曲地区" province="西藏自治区" +542428 county="班戈县" prefecture="那曲地区" province="西藏自治区" +542429 county="巴青县" prefecture="那曲地区" province="西藏自治区" +542430 county="尼玛县" prefecture="那曲地区" province="西藏自治区" +542431 county="双湖县" prefecture="那曲地区" province="西藏自治区" +542521 county="普兰县" prefecture="阿里地区" province="西藏自治区" +542522 county="札达县" prefecture="阿里地区" province="西藏自治区" +542523 county="噶尔县" prefecture="阿里地区" province="西藏自治区" +542524 county="日土县" prefecture="阿里地区" province="西藏自治区" +542525 county="革吉县" prefecture="阿里地区" province="西藏自治区" +542526 county="改则县" prefecture="阿里地区" province="西藏自治区" +542527 county="措勤县" prefecture="阿里地区" province="西藏自治区" +542621 county="林芝县" prefecture="林芝地区" province="西藏自治区" +542622 county="工布江达县" prefecture="林芝地区" province="西藏自治区" +542623 county="米林县" prefecture="林芝地区" province="西藏自治区" +542624 county="墨脱县" prefecture="林芝地区" province="西藏自治区" +542625 county="波密县" prefecture="林芝地区" province="西藏自治区" +542626 county="察隅县" prefecture="林芝地区" province="西藏自治区" +542627 county="朗县" prefecture="林芝地区" province="西藏自治区" +610101 county="市辖区" prefecture="西安市" province="陕西省" +610102 county="新城区" prefecture="西安市" province="陕西省" +610103 county="碑林区" prefecture="西安市" province="陕西省" +610104 county="莲湖区" prefecture="西安市" province="陕西省" +610111 county="灞桥区" prefecture="西安市" province="陕西省" +610112 county="未央区" prefecture="西安市" province="陕西省" +610113 county="雁塔区" prefecture="西安市" province="陕西省" +610114 county="阎良区" prefecture="西安市" province="陕西省" +610115 county="临潼区" prefecture="西安市" province="陕西省" +610116 county="长安区" prefecture="西安市" province="陕西省" +610122 county="蓝田县" prefecture="西安市" province="陕西省" +610124 county="周至县" prefecture="西安市" province="陕西省" +610125 county="户县" prefecture="西安市" province="陕西省" +610126 county="高陵县" prefecture="西安市" province="陕西省" +610201 county="市辖区" prefecture="铜川市" province="陕西省" +610202 county="王益区" prefecture="铜川市" province="陕西省" +610203 county="印台区" prefecture="铜川市" province="陕西省" +610204 county="耀州区" prefecture="铜川市" province="陕西省" +610222 county="宜君县" prefecture="铜川市" province="陕西省" +610301 county="市辖区" prefecture="宝鸡市" province="陕西省" +610302 county="渭滨区" prefecture="宝鸡市" province="陕西省" +610303 county="金台区" prefecture="宝鸡市" province="陕西省" +610304 county="陈仓区" prefecture="宝鸡市" province="陕西省" +610322 county="凤翔县" prefecture="宝鸡市" province="陕西省" +610323 county="岐山县" prefecture="宝鸡市" province="陕西省" +610324 county="扶风县" prefecture="宝鸡市" province="陕西省" +610326 county="眉县" prefecture="宝鸡市" province="陕西省" +610327 county="陇县" prefecture="宝鸡市" province="陕西省" +610328 county="千阳县" prefecture="宝鸡市" province="陕西省" +610329 county="麟游县" prefecture="宝鸡市" province="陕西省" +610330 county="凤县" prefecture="宝鸡市" province="陕西省" +610331 county="太白县" prefecture="宝鸡市" province="陕西省" +610401 county="市辖区" prefecture="咸阳市" province="陕西省" +610402 county="秦都区" prefecture="咸阳市" province="陕西省" +610403 county="杨陵区" prefecture="咸阳市" province="陕西省" +610404 county="渭城区" prefecture="咸阳市" province="陕西省" +610422 county="三原县" prefecture="咸阳市" province="陕西省" +610423 county="泾阳县" prefecture="咸阳市" province="陕西省" +610424 county="乾县" prefecture="咸阳市" province="陕西省" +610425 county="礼泉县" prefecture="咸阳市" province="陕西省" +610426 county="永寿县" prefecture="咸阳市" province="陕西省" +610427 county="彬县" prefecture="咸阳市" province="陕西省" +610428 county="长武县" prefecture="咸阳市" province="陕西省" +610429 county="旬邑县" prefecture="咸阳市" province="陕西省" +610430 county="淳化县" prefecture="咸阳市" province="陕西省" +610431 county="武功县" prefecture="咸阳市" province="陕西省" +610481 county="兴平市" prefecture="咸阳市" province="陕西省" +610501 county="市辖区" prefecture="渭南市" province="陕西省" +610502 county="临渭区" prefecture="渭南市" province="陕西省" +610521 county="华县" prefecture="渭南市" province="陕西省" +610522 county="潼关县" prefecture="渭南市" province="陕西省" +610523 county="大荔县" prefecture="渭南市" province="陕西省" +610524 county="合阳县" prefecture="渭南市" province="陕西省" +610525 county="澄城县" prefecture="渭南市" province="陕西省" +610526 county="蒲城县" prefecture="渭南市" province="陕西省" +610527 county="白水县" prefecture="渭南市" province="陕西省" +610528 county="富平县" prefecture="渭南市" province="陕西省" +610581 county="韩城市" prefecture="渭南市" province="陕西省" +610582 county="华阴市" prefecture="渭南市" province="陕西省" +610601 county="市辖区" prefecture="延安市" province="陕西省" +610602 county="宝塔区" prefecture="延安市" province="陕西省" +610621 county="延长县" prefecture="延安市" province="陕西省" +610622 county="延川县" prefecture="延安市" province="陕西省" +610623 county="子长县" prefecture="延安市" province="陕西省" +610624 county="安塞县" prefecture="延安市" province="陕西省" +610625 county="志丹县" prefecture="延安市" province="陕西省" +610626 county="吴起县" prefecture="延安市" province="陕西省" +610627 county="甘泉县" prefecture="延安市" province="陕西省" +610628 county="富县" prefecture="延安市" province="陕西省" +610629 county="洛川县" prefecture="延安市" province="陕西省" +610630 county="宜川县" prefecture="延安市" province="陕西省" +610631 county="黄龙县" prefecture="延安市" province="陕西省" +610632 county="黄陵县" prefecture="延安市" province="陕西省" +610701 county="市辖区" prefecture="汉中市" province="陕西省" +610702 county="汉台区" prefecture="汉中市" province="陕西省" +610721 county="南郑县" prefecture="汉中市" province="陕西省" +610722 county="城固县" prefecture="汉中市" province="陕西省" +610723 county="洋县" prefecture="汉中市" province="陕西省" +610724 county="西乡县" prefecture="汉中市" province="陕西省" +610725 county="勉县" prefecture="汉中市" province="陕西省" +610726 county="宁强县" prefecture="汉中市" province="陕西省" +610727 county="略阳县" prefecture="汉中市" province="陕西省" +610728 county="镇巴县" prefecture="汉中市" province="陕西省" +610729 county="留坝县" prefecture="汉中市" province="陕西省" +610730 county="佛坪县" prefecture="汉中市" province="陕西省" +610801 county="市辖区" prefecture="榆林市" province="陕西省" +610802 county="榆阳区" prefecture="榆林市" province="陕西省" +610821 county="神木县" prefecture="榆林市" province="陕西省" +610822 county="府谷县" prefecture="榆林市" province="陕西省" +610823 county="横山县" prefecture="榆林市" province="陕西省" +610824 county="靖边县" prefecture="榆林市" province="陕西省" +610825 county="定边县" prefecture="榆林市" province="陕西省" +610826 county="绥德县" prefecture="榆林市" province="陕西省" +610827 county="米脂县" prefecture="榆林市" province="陕西省" +610828 county="佳县" prefecture="榆林市" province="陕西省" +610829 county="吴堡县" prefecture="榆林市" province="陕西省" +610830 county="清涧县" prefecture="榆林市" province="陕西省" +610831 county="子洲县" prefecture="榆林市" province="陕西省" +610901 county="市辖区" prefecture="安康市" province="陕西省" +610902 county="汉滨区" prefecture="安康市" province="陕西省" +610921 county="汉阴县" prefecture="安康市" province="陕西省" +610922 county="石泉县" prefecture="安康市" province="陕西省" +610923 county="宁陕县" prefecture="安康市" province="陕西省" +610924 county="紫阳县" prefecture="安康市" province="陕西省" +610925 county="岚皋县" prefecture="安康市" province="陕西省" +610926 county="平利县" prefecture="安康市" province="陕西省" +610927 county="镇坪县" prefecture="安康市" province="陕西省" +610928 county="旬阳县" prefecture="安康市" province="陕西省" +610929 county="白河县" prefecture="安康市" province="陕西省" +611001 county="市辖区" prefecture="商洛市" province="陕西省" +611002 county="商州区" prefecture="商洛市" province="陕西省" +611021 county="洛南县" prefecture="商洛市" province="陕西省" +611022 county="丹凤县" prefecture="商洛市" province="陕西省" +611023 county="商南县" prefecture="商洛市" province="陕西省" +611024 county="山阳县" prefecture="商洛市" province="陕西省" +611025 county="镇安县" prefecture="商洛市" province="陕西省" +611026 county="柞水县" prefecture="商洛市" province="陕西省" +620101 county="市辖区" prefecture="兰州市" province="甘肃省" +620102 county="城关区" prefecture="兰州市" province="甘肃省" +620103 county="七里河区" prefecture="兰州市" province="甘肃省" +620104 county="西固区" prefecture="兰州市" province="甘肃省" +620105 county="安宁区" prefecture="兰州市" province="甘肃省" +620111 county="红古区" prefecture="兰州市" province="甘肃省" +620121 county="永登县" prefecture="兰州市" province="甘肃省" +620122 county="皋兰县" prefecture="兰州市" province="甘肃省" +620123 county="榆中县" prefecture="兰州市" province="甘肃省" +620201 county="市辖区" prefecture="嘉峪关市" province="甘肃省" +620301 county="市辖区" prefecture="金昌市" province="甘肃省" +620302 county="金川区" prefecture="金昌市" province="甘肃省" +620321 county="永昌县" prefecture="金昌市" province="甘肃省" +620401 county="市辖区" prefecture="白银市" province="甘肃省" +620402 county="白银区" prefecture="白银市" province="甘肃省" +620403 county="平川区" prefecture="白银市" province="甘肃省" +620421 county="靖远县" prefecture="白银市" province="甘肃省" +620422 county="会宁县" prefecture="白银市" province="甘肃省" +620423 county="景泰县" prefecture="白银市" province="甘肃省" +620501 county="市辖区" prefecture="天水市" province="甘肃省" +620502 county="秦州区" prefecture="天水市" province="甘肃省" +620503 county="麦积区" prefecture="天水市" province="甘肃省" +620521 county="清水县" prefecture="天水市" province="甘肃省" +620522 county="秦安县" prefecture="天水市" province="甘肃省" +620523 county="甘谷县" prefecture="天水市" province="甘肃省" +620524 county="武山县" prefecture="天水市" province="甘肃省" +620525 county="张家川回族自治县" prefecture="天水市" province="甘肃省" +620601 county="市辖区" prefecture="武威市" province="甘肃省" +620602 county="凉州区" prefecture="武威市" province="甘肃省" +620621 county="民勤县" prefecture="武威市" province="甘肃省" +620622 county="古浪县" prefecture="武威市" province="甘肃省" +620623 county="天祝藏族自治县" prefecture="武威市" province="甘肃省" +620701 county="市辖区" prefecture="张掖市" province="甘肃省" +620702 county="甘州区" prefecture="张掖市" province="甘肃省" +620721 county="肃南裕固族自治县" prefecture="张掖市" province="甘肃省" +620722 county="民乐县" prefecture="张掖市" province="甘肃省" +620723 county="临泽县" prefecture="张掖市" province="甘肃省" +620724 county="高台县" prefecture="张掖市" province="甘肃省" +620725 county="山丹县" prefecture="张掖市" province="甘肃省" +620801 county="市辖区" prefecture="平凉市" province="甘肃省" +620802 county="崆峒区" prefecture="平凉市" province="甘肃省" +620821 county="泾川县" prefecture="平凉市" province="甘肃省" +620822 county="灵台县" prefecture="平凉市" province="甘肃省" +620823 county="崇信县" prefecture="平凉市" province="甘肃省" +620824 county="华亭县" prefecture="平凉市" province="甘肃省" +620825 county="庄浪县" prefecture="平凉市" province="甘肃省" +620826 county="静宁县" prefecture="平凉市" province="甘肃省" +620901 county="市辖区" prefecture="酒泉市" province="甘肃省" +620902 county="肃州区" prefecture="酒泉市" province="甘肃省" +620921 county="金塔县" prefecture="酒泉市" province="甘肃省" +620922 county="瓜州县" prefecture="酒泉市" province="甘肃省" +620923 county="肃北蒙古族自治县" prefecture="酒泉市" province="甘肃省" +620924 county="阿克塞哈萨克族自治县" prefecture="酒泉市" province="甘肃省" +620981 county="玉门市" prefecture="酒泉市" province="甘肃省" +620982 county="敦煌市" prefecture="酒泉市" province="甘肃省" +621001 county="市辖区" prefecture="庆阳市" province="甘肃省" +621002 county="西峰区" prefecture="庆阳市" province="甘肃省" +621021 county="庆城县" prefecture="庆阳市" province="甘肃省" +621022 county="环县" prefecture="庆阳市" province="甘肃省" +621023 county="华池县" prefecture="庆阳市" province="甘肃省" +621024 county="合水县" prefecture="庆阳市" province="甘肃省" +621025 county="正宁县" prefecture="庆阳市" province="甘肃省" +621026 county="宁县" prefecture="庆阳市" province="甘肃省" +621027 county="镇原县" prefecture="庆阳市" province="甘肃省" +621101 county="市辖区" prefecture="定西市" province="甘肃省" +621102 county="安定区" prefecture="定西市" province="甘肃省" +621121 county="通渭县" prefecture="定西市" province="甘肃省" +621122 county="陇西县" prefecture="定西市" province="甘肃省" +621123 county="渭源县" prefecture="定西市" province="甘肃省" +621124 county="临洮县" prefecture="定西市" province="甘肃省" +621125 county="漳县" prefecture="定西市" province="甘肃省" +621126 county="岷县" prefecture="定西市" province="甘肃省" +621201 county="市辖区" prefecture="陇南市" province="甘肃省" +621202 county="武都区" prefecture="陇南市" province="甘肃省" +621221 county="成县" prefecture="陇南市" province="甘肃省" +621222 county="文县" prefecture="陇南市" province="甘肃省" +621223 county="宕昌县" prefecture="陇南市" province="甘肃省" +621224 county="康县" prefecture="陇南市" province="甘肃省" +621225 county="西和县" prefecture="陇南市" province="甘肃省" +621226 county="礼县" prefecture="陇南市" province="甘肃省" +621227 county="徽县" prefecture="陇南市" province="甘肃省" +621228 county="两当县" prefecture="陇南市" province="甘肃省" +622901 county="临夏市" prefecture="临夏回族自治州" province="甘肃省" +622921 county="临夏县" prefecture="临夏回族自治州" province="甘肃省" +622922 county="康乐县" prefecture="临夏回族自治州" province="甘肃省" +622923 county="永靖县" prefecture="临夏回族自治州" province="甘肃省" +622924 county="广河县" prefecture="临夏回族自治州" province="甘肃省" +622925 county="和政县" prefecture="临夏回族自治州" province="甘肃省" +622926 county="东乡族自治县" prefecture="临夏回族自治州" province="甘肃省" +622927 county="积石山保安族东乡族撒拉族自治县" prefecture="临夏回族自治州" province="甘肃省" +623001 county="合作市" prefecture="甘南藏族自治州" province="甘肃省" +623021 county="临潭县" prefecture="甘南藏族自治州" province="甘肃省" +623022 county="卓尼县" prefecture="甘南藏族自治州" province="甘肃省" +623023 county="舟曲县" prefecture="甘南藏族自治州" province="甘肃省" +623024 county="迭部县" prefecture="甘南藏族自治州" province="甘肃省" +623025 county="玛曲县" prefecture="甘南藏族自治州" province="甘肃省" +623026 county="碌曲县" prefecture="甘南藏族自治州" province="甘肃省" +623027 county="夏河县" prefecture="甘南藏族自治州" province="甘肃省" +630101 county="市辖区" prefecture="西宁市" province="青海省" +630102 county="城东区" prefecture="西宁市" province="青海省" +630103 county="城中区" prefecture="西宁市" province="青海省" +630104 county="城西区" prefecture="西宁市" province="青海省" +630105 county="城北区" prefecture="西宁市" province="青海省" +630121 county="大通回族土族自治县" prefecture="西宁市" province="青海省" +630122 county="湟中县" prefecture="西宁市" province="青海省" +630123 county="湟源县" prefecture="西宁市" province="青海省" +630202 county="乐都区" prefecture="海东市" province="青海省" +630221 county="平安县" prefecture="海东市" province="青海省" +630222 county="民和回族土族自治县" prefecture="海东市" province="青海省" +630223 county="互助土族自治县" prefecture="海东市" province="青海省" +630224 county="化隆回族自治县" prefecture="海东市" province="青海省" +630225 county="循化撒拉族自治县" prefecture="海东市" province="青海省" +632221 county="门源回族自治县" prefecture="海北藏族自治州" province="青海省" +632222 county="祁连县" prefecture="海北藏族自治州" province="青海省" +632223 county="海晏县" prefecture="海北藏族自治州" province="青海省" +632224 county="刚察县" prefecture="海北藏族自治州" province="青海省" +632321 county="同仁县" prefecture="黄南藏族自治州" province="青海省" +632322 county="尖扎县" prefecture="黄南藏族自治州" province="青海省" +632323 county="泽库县" prefecture="黄南藏族自治州" province="青海省" +632324 county="河南蒙古族自治县" prefecture="黄南藏族自治州" province="青海省" +632521 county="共和县" prefecture="海南藏族自治州" province="青海省" +632522 county="同德县" prefecture="海南藏族自治州" province="青海省" +632523 county="贵德县" prefecture="海南藏族自治州" province="青海省" +632524 county="兴海县" prefecture="海南藏族自治州" province="青海省" +632525 county="贵南县" prefecture="海南藏族自治州" province="青海省" +632621 county="玛沁县" prefecture="果洛藏族自治州" province="青海省" +632622 county="班玛县" prefecture="果洛藏族自治州" province="青海省" +632623 county="甘德县" prefecture="果洛藏族自治州" province="青海省" +632624 county="达日县" prefecture="果洛藏族自治州" province="青海省" +632625 county="久治县" prefecture="果洛藏族自治州" province="青海省" +632626 county="玛多县" prefecture="果洛藏族自治州" province="青海省" +632701 county="玉树市" prefecture="玉树藏族自治州" province="青海省" +632722 county="杂多县" prefecture="玉树藏族自治州" province="青海省" +632723 county="称多县" prefecture="玉树藏族自治州" province="青海省" +632724 county="治多县" prefecture="玉树藏族自治州" province="青海省" +632725 county="囊谦县" prefecture="玉树藏族自治州" province="青海省" +632726 county="曲麻莱县" prefecture="玉树藏族自治州" province="青海省" +632801 county="格尔木市" prefecture="海西蒙古族藏族自治州" province="青海省" +632802 county="德令哈市" prefecture="海西蒙古族藏族自治州" province="青海省" +632821 county="乌兰县" prefecture="海西蒙古族藏族自治州" province="青海省" +632822 county="都兰县" prefecture="海西蒙古族藏族自治州" province="青海省" +632823 county="天峻县" prefecture="海西蒙古族藏族自治州" province="青海省" +640101 county="市辖区" prefecture="银川市" province="宁夏回族自治区" +640104 county="兴庆区" prefecture="银川市" province="宁夏回族自治区" +640105 county="西夏区" prefecture="银川市" province="宁夏回族自治区" +640106 county="金凤区" prefecture="银川市" province="宁夏回族自治区" +640121 county="永宁县" prefecture="银川市" province="宁夏回族自治区" +640122 county="贺兰县" prefecture="银川市" province="宁夏回族自治区" +640181 county="灵武市" prefecture="银川市" province="宁夏回族自治区" +640201 county="市辖区" prefecture="石嘴山市" province="宁夏回族自治区" +640202 county="大武口区" prefecture="石嘴山市" province="宁夏回族自治区" +640205 county="惠农区" prefecture="石嘴山市" province="宁夏回族自治区" +640221 county="平罗县" prefecture="石嘴山市" province="宁夏回族自治区" +640301 county="市辖区" prefecture="吴忠市" province="宁夏回族自治区" +640302 county="利通区" prefecture="吴忠市" province="宁夏回族自治区" +640303 county="红寺堡区" prefecture="吴忠市" province="宁夏回族自治区" +640323 county="盐池县" prefecture="吴忠市" province="宁夏回族自治区" +640324 county="同心县" prefecture="吴忠市" province="宁夏回族自治区" +640381 county="青铜峡市" prefecture="吴忠市" province="宁夏回族自治区" +640401 county="市辖区" prefecture="固原市" province="宁夏回族自治区" +640402 county="原州区" prefecture="固原市" province="宁夏回族自治区" +640422 county="西吉县" prefecture="固原市" province="宁夏回族自治区" +640423 county="隆德县" prefecture="固原市" province="宁夏回族自治区" +640424 county="泾源县" prefecture="固原市" province="宁夏回族自治区" +640425 county="彭阳县" prefecture="固原市" province="宁夏回族自治区" +640501 county="市辖区" prefecture="中卫市" province="宁夏回族自治区" +640502 county="沙坡头区" prefecture="中卫市" province="宁夏回族自治区" +640521 county="中宁县" prefecture="中卫市" province="宁夏回族自治区" +640522 county="海原县" prefecture="中卫市" province="宁夏回族自治区" +650101 county="市辖区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650102 county="天山区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650103 county="沙依巴克区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650104 county="新市区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650105 county="水磨沟区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650106 county="头屯河区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650107 county="达坂城区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650109 county="米东区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650121 county="乌鲁木齐县" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650201 county="市辖区" prefecture="克拉玛依市" province="新疆维吾尔自治区" +650202 county="独山子区" prefecture="克拉玛依市" province="新疆维吾尔自治区" +650203 county="克拉玛依区" prefecture="克拉玛依市" province="新疆维吾尔自治区" +650204 county="白碱滩区" prefecture="克拉玛依市" province="新疆维吾尔自治区" +650205 county="乌尔禾区" prefecture="克拉玛依市" province="新疆维吾尔自治区" +652101 county="吐鲁番市" prefecture="吐鲁番地区" province="新疆维吾尔自治区" +652122 county="鄯善县" prefecture="吐鲁番地区" province="新疆维吾尔自治区" +652123 county="托克逊县" prefecture="吐鲁番地区" province="新疆维吾尔自治区" +652201 county="哈密市" prefecture="哈密地区" province="新疆维吾尔自治区" +652222 county="巴里坤哈萨克自治县" prefecture="哈密地区" province="新疆维吾尔自治区" +652223 county="伊吾县" prefecture="哈密地区" province="新疆维吾尔自治区" +652301 county="昌吉市" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652302 county="阜康市" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652323 county="呼图壁县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652324 county="玛纳斯县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652325 county="奇台县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652327 county="吉木萨尔县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652328 county="木垒哈萨克自治县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652701 county="博乐市" prefecture="博尔塔拉蒙古自治州" province="新疆维吾尔自治区" +652702 county="阿拉山口市" prefecture="博尔塔拉蒙古自治州" province="新疆维吾尔自治区" +652722 county="精河县" prefecture="博尔塔拉蒙古自治州" province="新疆维吾尔自治区" +652723 county="温泉县" prefecture="博尔塔拉蒙古自治州" province="新疆维吾尔自治区" +652801 county="库尔勒市" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652822 county="轮台县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652823 county="尉犁县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652824 county="若羌县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652825 county="且末县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652826 county="焉耆回族自治县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652827 county="和静县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652828 county="和硕县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652829 county="博湖县" prefecture="巴音郭楞蒙古自治州" province="新疆维吾尔自治区" +652901 county="阿克苏市" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652922 county="温宿县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652923 county="库车县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652924 county="沙雅县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652925 county="新和县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652926 county="拜城县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652927 county="乌什县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652928 county="阿瓦提县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +652929 county="柯坪县" prefecture="阿克苏地区" province="新疆维吾尔自治区" +653001 county="阿图什市" prefecture="克孜勒苏柯尔克孜自治州" province="新疆维吾尔自治区" +653022 county="阿克陶县" prefecture="克孜勒苏柯尔克孜自治州" province="新疆维吾尔自治区" +653023 county="阿合奇县" prefecture="克孜勒苏柯尔克孜自治州" province="新疆维吾尔自治区" +653024 county="乌恰县" prefecture="克孜勒苏柯尔克孜自治州" province="新疆维吾尔自治区" +653101 county="喀什市" prefecture="喀什地区" province="新疆维吾尔自治区" +653121 county="疏附县" prefecture="喀什地区" province="新疆维吾尔自治区" +653122 county="疏勒县" prefecture="喀什地区" province="新疆维吾尔自治区" +653123 county="英吉沙县" prefecture="喀什地区" province="新疆维吾尔自治区" +653124 county="泽普县" prefecture="喀什地区" province="新疆维吾尔自治区" +653125 county="莎车县" prefecture="喀什地区" province="新疆维吾尔自治区" +653126 county="叶城县" prefecture="喀什地区" province="新疆维吾尔自治区" +653127 county="麦盖提县" prefecture="喀什地区" province="新疆维吾尔自治区" +653128 county="岳普湖县" prefecture="喀什地区" province="新疆维吾尔自治区" +653129 county="伽师县" prefecture="喀什地区" province="新疆维吾尔自治区" +653130 county="巴楚县" prefecture="喀什地区" province="新疆维吾尔自治区" +653131 county="塔什库尔干塔吉克自治县" prefecture="喀什地区" province="新疆维吾尔自治区" +653201 county="和田市" prefecture="和田地区" province="新疆维吾尔自治区" +653221 county="和田县" prefecture="和田地区" province="新疆维吾尔自治区" +653222 county="墨玉县" prefecture="和田地区" province="新疆维吾尔自治区" +653223 county="皮山县" prefecture="和田地区" province="新疆维吾尔自治区" +653224 county="洛浦县" prefecture="和田地区" province="新疆维吾尔自治区" +653225 county="策勒县" prefecture="和田地区" province="新疆维吾尔自治区" +653226 county="于田县" prefecture="和田地区" province="新疆维吾尔自治区" +653227 county="民丰县" prefecture="和田地区" province="新疆维吾尔自治区" +654002 county="伊宁市" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654003 county="奎屯市" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654021 county="伊宁县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654022 county="察布查尔锡伯自治县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654023 county="霍城县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654024 county="巩留县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654025 county="新源县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654026 county="昭苏县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654027 county="特克斯县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654028 county="尼勒克县" prefecture="伊犁哈萨克自治州" province="新疆维吾尔自治区" +654201 county="塔城市" prefecture="塔城地区" province="新疆维吾尔自治区" +654202 county="乌苏市" prefecture="塔城地区" province="新疆维吾尔自治区" +654221 county="额敏县" prefecture="塔城地区" province="新疆维吾尔自治区" +654223 county="沙湾县" prefecture="塔城地区" province="新疆维吾尔自治区" +654224 county="托里县" prefecture="塔城地区" province="新疆维吾尔自治区" +654225 county="裕民县" prefecture="塔城地区" province="新疆维吾尔自治区" +654226 county="和布克赛尔蒙古自治县" prefecture="塔城地区" province="新疆维吾尔自治区" +654301 county="阿勒泰市" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +654321 county="布尔津县" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +654322 county="富蕴县" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +654323 county="福海县" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +654324 county="哈巴河县" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +654325 county="青河县" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +654326 county="吉木乃县" prefecture="阿勒泰地区" province="新疆维吾尔自治区" +659001 county="石河子市" prefecture="自治区直辖县级行政区划" province="新疆维吾尔自治区" +659002 county="阿拉尔市" prefecture="自治区直辖县级行政区划" province="新疆维吾尔自治区" +659003 county="图木舒克市" prefecture="自治区直辖县级行政区划" province="新疆维吾尔自治区" +659004 county="五家渠市" prefecture="自治区直辖县级行政区划" province="新疆维吾尔自治区" From 141d576c6e9ff90a1c7f8e314763399d1ae0693a Mon Sep 17 00:00:00 2001 From: Jiangge Zhang Date: Mon, 6 Oct 2014 16:27:44 +0200 Subject: [PATCH 009/654] Support the Resident Identity Card Number of People's Republic China --- stdnum/cn/ric.py | 106 ++++++++++++++++++++++++++++++++++++++ tests/test_cn_ric.doctest | 90 ++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 stdnum/cn/ric.py create mode 100644 tests/test_cn_ric.doctest diff --git a/stdnum/cn/ric.py b/stdnum/cn/ric.py new file mode 100644 index 00000000..800a94be --- /dev/null +++ b/stdnum/cn/ric.py @@ -0,0 +1,106 @@ +# ric.py - functions for handling Chinese Resident Identity Card Number +# +# Copyright (C) 2014 Jiangge Zhang +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""RIC No. (Chinese Resident Identity Card Number). + +The RIC No. is the unique identifier for issued to China (PRC) residents. + +The number consist of 18 digits in four sections. The first 6 digits refers to +the resident's location, followed by 8 digits represeting the resident's birth +day in the form YYYY-MM-DD. The next 3 digits is the order code which is the +code used to disambiguate people with the same date of birth and address code. +Men are assigned to odd numbers, women assigned to even numbers. The final +digit is the checksum. + +>>> validate('360426199101010071') +'360426199101010071' +""" + +import datetime + +from stdnum.exceptions import ( + ValidationError, InvalidLength, InvalidFormat, InvalidChecksum, + InvalidComponent) +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number).upper().strip() + + +def get_birth_date(number): + """Split the date parts from the number and return the birth date. + Note that in some cases it may return the registration date instead of + the birth date and it may be a century off.""" + number = compact(number) + year = int(number[6:10]) + month = int(number[10:12]) + day = int(number[12:14]) + try: + return datetime.date(year, month, day) + except ValueError: + raise InvalidComponent() + + +def get_birth_place(number): + """Use the number to look up the place of birth of the person.""" + from stdnum import numdb + number = compact(number) + results = numdb.get('cn/loc').info(number[:6])[0][1] + if not results: + raise InvalidComponent() + return results + + +def calc_check_digit(number): + checksum = (1 - 2 * int(number[:-1], 13)) % 11 + return 'X' if checksum == 10 else str(checksum) + + +def validate(number): + """Checks to see if the number provided is a valid RIC numbers. This + checks the length, formatting and birth date and place.""" + number = compact(number) + if len(number) != 18: + raise InvalidLength() + if not number[:-1].isdigit(): + raise InvalidFormat() + if not number[-1].isdigit() and number[-1] != 'X': + raise InvalidFormat() + if number[-1] != calc_check_digit(number): + raise InvalidChecksum() + get_birth_date(number) + get_birth_place(number) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid RIC numbers. This + checks the length, formatting and birth date and place.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + return compact(number) diff --git a/tests/test_cn_ric.doctest b/tests/test_cn_ric.doctest new file mode 100644 index 00000000..5b219481 --- /dev/null +++ b/tests/test_cn_ric.doctest @@ -0,0 +1,90 @@ +test_cn_ric.doctest - more detailed doctests for stdnum.cn.ric module + +Copyright (C) 2014 Jiangge Zhang + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.cn.ric. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.cn import ric +>>> from stdnum.exceptions import * # noqa + + +Normal values that should just work. + +>>> ric.validate('360426199101010071') +'360426199101010071' +>>> ric.validate('44011320141005001x') +'44011320141005001X' +>>> ric.format('44011320141005001x') +'44011320141005001X' + + +Get the birth date: + +>>> ric.get_birth_date('360426199101010071') +datetime.date(1991, 1, 1) +>>> ric.get_birth_date('44011320141005001x') +datetime.date(2014, 10, 5) + + +Get the birth place: + +>>> c = ric.get_birth_place('360426199101010071')['county'] +>>> c == u'\u5fb7\u5b89\u53bf' +True +>>> c = ric.get_birth_place('44011320141005001x')['county'] +>>> c == u'\u756a\u79ba\u533a' +True + + +Invalid format: + +>>> ric.validate('36042619910101007V') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> ric.validate('T60426199101010078') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +Invalid date: + +>>> ric.validate('360426199113010079') +Traceback (most recent call last): + ... +InvalidComponent: ... + + +Invalid checksum: + +>>> ric.validate('36042619910102009X') +Traceback (most recent call last): + ... +InvalidChecksum: ... + + +Invalid location: + +>>> ric.validate('990426199112010074') # unknown birth place code +Traceback (most recent call last): + ... +InvalidComponent: ... From e8f1ca6022fa7e6e1fe309f4c1b141d85b73ed30 Mon Sep 17 00:00:00 2001 From: Jonathan Finlay Date: Sun, 12 Oct 2014 04:23:12 +0200 Subject: [PATCH 010/654] Add Ecuadorian CI and RUC numbers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add modules for Ecuadorian Identification Card (CI - Cédula de identidad) and Fiscal Numbers (RUC - Registro Único de Contribuyentes) --- stdnum/ec/__init__.py | 24 +++++++++ stdnum/ec/ci.py | 77 ++++++++++++++++++++++++++++ stdnum/ec/ruc.py | 114 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 215 insertions(+) create mode 100644 stdnum/ec/__init__.py create mode 100644 stdnum/ec/ci.py create mode 100644 stdnum/ec/ruc.py diff --git a/stdnum/ec/__init__.py b/stdnum/ec/__init__.py new file mode 100644 index 00000000..18d02a88 --- /dev/null +++ b/stdnum/ec/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Ecuadorian numbers +# coding: utf-8 +# +# Copyright (C) 2014 Jonathan Finlay +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Ecuadorian numbers.""" + +# provide vat as an alias +from stdnum.ec import ruc as vat diff --git a/stdnum/ec/ci.py b/stdnum/ec/ci.py new file mode 100644 index 00000000..4834d587 --- /dev/null +++ b/stdnum/ec/ci.py @@ -0,0 +1,77 @@ +# dni.py - functions for handling Ecuadorian personal identity codes +# coding: utf-8 +# +# Copyright (C) 2014 Jonathan Finlay +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CI (Cédula de identidad, Ecuadorian personal identity codes). + +The CI is a 10 digit number used to identify Ecuadorian citizens. + +>>> validate('1714307103') +'1714307103' +>>> validate('171430710-3') +'1714307103' +>>> validate('1714307104') # invalid document +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('171430710') # digit missing +Traceback (most recent call last): + ... +InvalidLength: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').upper().strip() + + +def checksum(number): + """Calculate the check digit.""" + value = [int(number[x]) * (2 - x % 2) for x in range(9)] + total = sum(map(lambda x: x > 9 and x - 9 or x, value)) + if int(int(number[9] if int(number[9]) != 0 else 10)) != (10 - int(str(total)[-1:])): + return False + return True + + +def validate(number): + """Checks to see if the number provided is a valid CI number. This + checks the length, formatting and check digit.""" + number = compact(number) + if len(number) != 10: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if not checksum(number): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid CI number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/stdnum/ec/ruc.py b/stdnum/ec/ruc.py new file mode 100644 index 00000000..c39e73e7 --- /dev/null +++ b/stdnum/ec/ruc.py @@ -0,0 +1,114 @@ +# cif.py - functions for handling Ecuadorian fiscal numbers +# coding: utf-8 +# +# Copyright (C) 2014 Jonathan Finlay +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""RUC (Registro Único de Contribuyentes, Ecuadorian company tax number). + +The RUC is a tax identification number for legal entities. It has 13 digits +where the third digit is a number who denoting the type of entity. + +>>> validate('1714307103001') # Natural entity +'1714307103001' +>>> validate('1768152130001') # Public entity +'1768152130001' +>>> validate('1792060346001') # Juridical entity +'1792060346001' +>>> validate('1792060346-001') +'1792060346001' +>>> validate('1763154690001') # Invalid +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('179206034601') # too short +Traceback (most recent call last): + ... +InvalidLength: ... +""" + +from stdnum.ec import ci +from stdnum.exceptions import * + + +__all__ = ['compact', 'validate', 'is_valid'] + + +# use the same compact function as CI +compact = ci.compact + + +def calc_check_sum(number): + result = 0 + if int(number[2]) == 6: + # 6 = Public RUC + coefficient = "32765432" + result = sum(int(number[i]) * int(coefficient[i]) for i in range(8)) + residue = result % 11 + if residue == 0: + result = residue + else: + result = 11 - residue + elif int(number[2]) == 9: + # 9 = Juridical RUC + coefficient = "432765432" + result = sum(int(number[i]) * int(coefficient[i]) for i in range(9)) + residue = result % 11 + if residue == 0: + result = residue + else: + result = 11 - residue + elif int(number[2]) < 6: + # less than 6 = Natural RUC + coefficient = "212121212" + for i in range(9): + suma = int(number[i]) * int(coefficient[i]) + if suma > 10: + str_sum = str(suma) + suma = int(str_sum[0]) + int(str_sum[1]) + result += suma + residue = result % 10 + if residue == 0: + result = residue + else: + result = 10 - residue + else: + raise InvalidFormat() + return result + + +def validate(number): + """Checks to see if the number provided is a valid RUC number. This + checks the length, formatting, check digit and check sum.""" + number = compact(number) + if len(number) != 13: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + checker = int(number[8]) if int(number[2]) == 6 else int(number[9]) + if calc_check_sum(number) != checker: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid RUC number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False From f61b855cf64bc1a91b196040b27dd176a3a50890 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 17 Oct 2014 18:33:02 +0200 Subject: [PATCH 011/654] Use dedicated doctests This moves a number of the existing test cases to dedicated doctest files and extend the tests with more numbers and corner cases. This also fixes a few docstrings. --- stdnum/ec/ci.py | 10 ++- stdnum/ec/ruc.py | 12 +--- tests/test_ec_ci.doctest | 57 ++++++++++++++++ tests/test_ec_ruc.doctest | 138 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 202 insertions(+), 15 deletions(-) create mode 100644 tests/test_ec_ci.doctest create mode 100644 tests/test_ec_ruc.doctest diff --git a/stdnum/ec/ci.py b/stdnum/ec/ci.py index 4834d587..bf4ad3e3 100644 --- a/stdnum/ec/ci.py +++ b/stdnum/ec/ci.py @@ -1,4 +1,4 @@ -# dni.py - functions for handling Ecuadorian personal identity codes +# ci.py - functions for handling Ecuadorian personal identity codes # coding: utf-8 # # Copyright (C) 2014 Jonathan Finlay @@ -18,15 +18,13 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA -"""CI (Cédula de identidad, Ecuadorian personal identity codes). +"""CI (Cédula de identidad, Ecuadorian personal identity code). The CI is a 10 digit number used to identify Ecuadorian citizens. ->>> validate('1714307103') -'1714307103' >>> validate('171430710-3') '1714307103' ->>> validate('1714307104') # invalid document +>>> validate('1714307104') # invalid check digit Traceback (most recent call last): ... InvalidChecksum: ... @@ -47,7 +45,7 @@ def compact(number): def checksum(number): - """Calculate the check digit.""" + """Calculate a checksum over the number.""" value = [int(number[x]) * (2 - x % 2) for x in range(9)] total = sum(map(lambda x: x > 9 and x - 9 or x, value)) if int(int(number[9] if int(number[9]) != 0 else 10)) != (10 - int(str(total)[-1:])): diff --git a/stdnum/ec/ruc.py b/stdnum/ec/ruc.py index c39e73e7..7a4a1c87 100644 --- a/stdnum/ec/ruc.py +++ b/stdnum/ec/ruc.py @@ -1,4 +1,4 @@ -# cif.py - functions for handling Ecuadorian fiscal numbers +# ruc.py - functions for handling Ecuadorian fiscal numbers # coding: utf-8 # # Copyright (C) 2014 Jonathan Finlay @@ -21,17 +21,11 @@ """RUC (Registro Único de Contribuyentes, Ecuadorian company tax number). The RUC is a tax identification number for legal entities. It has 13 digits -where the third digit is a number who denoting the type of entity. +where the third digit is a number denoting the type of entity. ->>> validate('1714307103001') # Natural entity -'1714307103001' ->>> validate('1768152130001') # Public entity -'1768152130001' ->>> validate('1792060346001') # Juridical entity -'1792060346001' >>> validate('1792060346-001') '1792060346001' ->>> validate('1763154690001') # Invalid +>>> validate('1763154690001') # invalid check digit Traceback (most recent call last): ... InvalidChecksum: ... diff --git a/tests/test_ec_ci.doctest b/tests/test_ec_ci.doctest new file mode 100644 index 00000000..2ab58fb8 --- /dev/null +++ b/tests/test_ec_ci.doctest @@ -0,0 +1,57 @@ +test_ec_ci.doctest - more detailed doctests for stdnum.ec.ci module + +Copyright (C) 2014 Jonathan Finlay +Copyright (C) 2014 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ec.ci. It tries to +cover more corner cases and detailed functionality that is not really useful +as module documentation. + +>>> from stdnum.ec import ci +>>> from stdnum.exceptions import * + + +Normal values that should just work. + +>>> ci.validate('1714307103') +'1714307103' +>>> ci.validate('171430710-3') +'1714307103' +>>> ci.validate('0602910945') +'0602910945' +>>> ci.validate('0926687856') +'0926687856' +>>> ci.validate('0910005917') +'0910005917' + + +Some invalid numbers. + +>>> ci.validate('1714307104') # invalid check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> ci.validate('171430710') # digit missing +Traceback (most recent call last): + ... +InvalidLength: ... +>>> ci.validate('123A567890') # contains a letter +Traceback (most recent call last): + ... +InvalidFormat: ... diff --git a/tests/test_ec_ruc.doctest b/tests/test_ec_ruc.doctest new file mode 100644 index 00000000..e64346be --- /dev/null +++ b/tests/test_ec_ruc.doctest @@ -0,0 +1,138 @@ +test_ec_ruc.doctest - more detailed doctests for stdnum.ec.ruc module + +Copyright (C) 2014 Jonathan Finlay +Copyright (C) 2014 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ec.ruc. It tries to +cover more corner cases and detailed functionality that is not really useful +as module documentation. + +>>> from stdnum.ec import ruc +>>> from stdnum.exceptions import * + + +Normal natural RUC values (third digit less than 6) that should just work. + +>>> numbers = ''' +... 0101016905001 +... 0602910945001 +... 0910005917001 +... 0926687856001 +... 1001152287001 +... 1102755442001 +... 1104552037001 +... 1311919078001 +... 1700672486001 +... 1702264233001 +... 1704159860001 +... 1710034065001 +... 1710585264001 +... 1710589373001 +... 1713238234001 +... 1714307103001 +... 1721788659001 +... 1803557964001 +... ''' +>>> [x for x in numbers.splitlines() if x and not ruc.is_valid(x)] +[] + + +Normal public RUC values (third digit is 6) that should just work. + +>>> numbers = ''' +... 0160001910001 +... 0260001060001 +... 0360001040001 +... 0560000540001 +... 0660000280001 +... 0660000600001 +... 0660000870001 +... 0968529830001 +... 1060000420001 +... 1060000690001 +... 1060008080001 +... 1060024600001 +... 1360000630001 +... 1560000780001 +... 1760001040001 +... 1760001550001 +... 1760009880001 +... 1768007390001 +... 1768152130001 +... 2160011760001 +... ''' +>>> [x for x in numbers.splitlines() if x and not ruc.is_valid(x)] +[] + + +Normal juridical RUC values (third digit is 9) that should just work. + +>>> numbers = ''' +... 0190155722001 +... 0490002669001 +... 0590041920001 +... 0790024656001 +... 0990138850001 +... 0992397535001 +... 1190015110001 +... 1390007791001 +... 1390089410001 +... 1390091474001 +... 1790011674001 +... 1790085783001 +... 1790325083001 +... 1791280172001 +... 1791714350001 +... 1792060346001 +... 1792141869001 +... 1792373255001 +... 1890001323001 +... 1890037646001 +... ''' +>>> [x for x in numbers.splitlines() if x and not ruc.is_valid(x)] +[] + + +Values that are invalid in one way or another: + +>>> ruc.validate('179206034601') # too short +Traceback (most recent call last): + ... +InvalidLength: ... +>>> ruc.validate('17920603A6001') # contains a character +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> ruc.validate('0170000610001') # third digit invalid +Traceback (most recent call last): + ... +InvalidComponent: ... + +>>> ruc.validate('1763154690001') # invalid check digit in natural RUC +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> ruc.validate('0160000610001') # invalid check digit in public RUC +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> ruc.validate('0190115799001') # invalid check digit in juridical RUC +Traceback (most recent call last): + ... +InvalidChecksum: ... From 10a044fe6efd05dcb9ead2d17c33f27dbd2b780c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 17 Oct 2014 21:12:43 +0200 Subject: [PATCH 012/654] Refactor checksum functions Use the CI checks from within the RUC module for natural RUC numbers (thereby eliminating a bug in the RUC checksum calculation) and simplify the checksum functions. --- stdnum/ec/ci.py | 13 +++++------ stdnum/ec/ruc.py | 57 +++++++++++++++--------------------------------- 2 files changed, 23 insertions(+), 47 deletions(-) diff --git a/stdnum/ec/ci.py b/stdnum/ec/ci.py index bf4ad3e3..a32c6e3b 100644 --- a/stdnum/ec/ci.py +++ b/stdnum/ec/ci.py @@ -2,6 +2,7 @@ # coding: utf-8 # # Copyright (C) 2014 Jonathan Finlay +# Copyright (C) 2014 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -44,13 +45,11 @@ def compact(number): return clean(number, ' -').upper().strip() -def checksum(number): +def _checksum(number): """Calculate a checksum over the number.""" - value = [int(number[x]) * (2 - x % 2) for x in range(9)] - total = sum(map(lambda x: x > 9 and x - 9 or x, value)) - if int(int(number[9] if int(number[9]) != 0 else 10)) != (10 - int(str(total)[-1:])): - return False - return True + fold = lambda x: x - 9 if x > 9 else x + return sum(fold((2 - (i % 2)) * int(n)) + for i, n in enumerate(number)) % 10 def validate(number): @@ -61,7 +60,7 @@ def validate(number): raise InvalidLength() if not number.isdigit(): raise InvalidFormat() - if not checksum(number): + if _checksum(number) != 0: raise InvalidChecksum() return number diff --git a/stdnum/ec/ruc.py b/stdnum/ec/ruc.py index 7a4a1c87..0bc62b5b 100644 --- a/stdnum/ec/ruc.py +++ b/stdnum/ec/ruc.py @@ -2,6 +2,7 @@ # coding: utf-8 # # Copyright (C) 2014 Jonathan Finlay +# Copyright (C) 2014 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -46,43 +47,9 @@ compact = ci.compact -def calc_check_sum(number): - result = 0 - if int(number[2]) == 6: - # 6 = Public RUC - coefficient = "32765432" - result = sum(int(number[i]) * int(coefficient[i]) for i in range(8)) - residue = result % 11 - if residue == 0: - result = residue - else: - result = 11 - residue - elif int(number[2]) == 9: - # 9 = Juridical RUC - coefficient = "432765432" - result = sum(int(number[i]) * int(coefficient[i]) for i in range(9)) - residue = result % 11 - if residue == 0: - result = residue - else: - result = 11 - residue - elif int(number[2]) < 6: - # less than 6 = Natural RUC - coefficient = "212121212" - for i in range(9): - suma = int(number[i]) * int(coefficient[i]) - if suma > 10: - str_sum = str(suma) - suma = int(str_sum[0]) + int(str_sum[1]) - result += suma - residue = result % 10 - if residue == 0: - result = residue - else: - result = 10 - residue - else: - raise InvalidFormat() - return result +def _checksum(number, weights): + """Calculate a checksum over the number given the weights.""" + return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 def validate(number): @@ -93,9 +60,19 @@ def validate(number): raise InvalidLength() if not number.isdigit(): raise InvalidFormat() - checker = int(number[8]) if int(number[2]) == 6 else int(number[9]) - if calc_check_sum(number) != checker: - raise InvalidChecksum() + if number[2] < '6': + # 0..5 = natural RUC: CI plus establishment number + ci.validate(number[:10]) + elif number[2] == '6': + # 6 = public RUC + if _checksum(number[:9], (3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0: + raise InvalidChecksum() + elif number[2] == '9': + # 9 = juridical RUC + if _checksum(number[:10], (4, 3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0: + raise InvalidChecksum() + else: + raise InvalidComponent() # third digit wrong return number From e5250be45092363504ff61c868938439ec958985 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 17 Oct 2014 21:14:42 +0200 Subject: [PATCH 013/654] Validate parts of numbers This raises exceptions when the provice or establishment number part of the number contains invalid values. --- stdnum/ec/ci.py | 4 ++++ stdnum/ec/ruc.py | 8 ++++++++ tests/test_ec_ci.doctest | 8 ++++++++ tests/test_ec_ruc.doctest | 26 ++++++++++++++++++++++++++ 4 files changed, 46 insertions(+) diff --git a/stdnum/ec/ci.py b/stdnum/ec/ci.py index a32c6e3b..9343e471 100644 --- a/stdnum/ec/ci.py +++ b/stdnum/ec/ci.py @@ -60,6 +60,10 @@ def validate(number): raise InvalidLength() if not number.isdigit(): raise InvalidFormat() + if number[:2] < '01' or number[:2] > '24': + raise InvalidComponent() # invalid province code + if number[2] > '5': + raise InvalidComponent() # third digit wrong if _checksum(number) != 0: raise InvalidChecksum() return number diff --git a/stdnum/ec/ruc.py b/stdnum/ec/ruc.py index 0bc62b5b..88874674 100644 --- a/stdnum/ec/ruc.py +++ b/stdnum/ec/ruc.py @@ -60,15 +60,23 @@ def validate(number): raise InvalidLength() if not number.isdigit(): raise InvalidFormat() + if number[:2] < '01' or number[:2] > '24': + raise InvalidComponent() # invalid province code if number[2] < '6': # 0..5 = natural RUC: CI plus establishment number + if number[-3:] == '000': + raise InvalidComponent() # establishment number wrong ci.validate(number[:10]) elif number[2] == '6': # 6 = public RUC + if number[-4:] == '0000': + raise InvalidComponent() # establishment number wrong if _checksum(number[:9], (3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0: raise InvalidChecksum() elif number[2] == '9': # 9 = juridical RUC + if number[-3:] == '000': + raise InvalidComponent() # establishment number wrong if _checksum(number[:10], (4, 3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0: raise InvalidChecksum() else: diff --git a/tests/test_ec_ci.doctest b/tests/test_ec_ci.doctest index 2ab58fb8..08efb8b3 100644 --- a/tests/test_ec_ci.doctest +++ b/tests/test_ec_ci.doctest @@ -55,3 +55,11 @@ InvalidLength: ... Traceback (most recent call last): ... InvalidFormat: ... +>>> ci.validate('1784307108') # third digit wrong +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ci.validate('8814307107') # invalid province code +Traceback (most recent call last): + ... +InvalidComponent: ... diff --git a/tests/test_ec_ruc.doctest b/tests/test_ec_ruc.doctest index e64346be..2f1065f9 100644 --- a/tests/test_ec_ruc.doctest +++ b/tests/test_ec_ruc.doctest @@ -136,3 +136,29 @@ InvalidChecksum: ... Traceback (most recent call last): ... InvalidChecksum: ... + +>>> ruc.validate('8810034069001') # invalid province code in natural RUC +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ruc.validate('8868152120001') # invalid province code in public RUC +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ruc.validate('8892397539001') # invalid province code in juridical RUC +Traceback (most recent call last): + ... +InvalidComponent: ... + +>>> ruc.validate('0926687856000') # invalid establishment in natural RUC +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ruc.validate('1760001550000') # invalid establishment in public RUC +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ruc.validate('0992397535000') # invalid establishment in juridical RUC +Traceback (most recent call last): + ... +InvalidComponent: ... From 2cc50e2e561613b9a0814fbd048b003cf03cce10 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 18 Oct 2014 12:47:27 +0200 Subject: [PATCH 014/654] Only catch Exception --- stdnum/eu/at_02.py | 2 +- stdnum/iban.py | 2 +- stdnum/imei.py | 2 +- stdnum/iso7064/mod_11_10.py | 2 +- stdnum/iso7064/mod_11_2.py | 2 +- stdnum/iso7064/mod_37_2.py | 2 +- stdnum/iso7064/mod_37_36.py | 2 +- stdnum/iso7064/mod_97_10.py | 2 +- stdnum/luhn.py | 2 +- stdnum/util.py | 2 +- stdnum/verhoeff.py | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/stdnum/eu/at_02.py b/stdnum/eu/at_02.py index dc1fa18a..d4363083 100644 --- a/stdnum/eu/at_02.py +++ b/stdnum/eu/at_02.py @@ -61,7 +61,7 @@ def validate(number): number = compact(number) try: test_number = _to_base10(number) - except: + except Exception: raise InvalidFormat() # ensure that checksum is valid mod_97_10.validate(test_number) diff --git a/stdnum/iban.py b/stdnum/iban.py index bab80b96..fe3b093b 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -87,7 +87,7 @@ def validate(number): number = compact(number) try: test_number = _to_base10(number) - except: + except Exception: raise InvalidFormat() # ensure that checksum is valid mod_97_10.validate(test_number) diff --git a/stdnum/imei.py b/stdnum/imei.py index 33d38c55..1fad6c38 100644 --- a/stdnum/imei.py +++ b/stdnum/imei.py @@ -72,7 +72,7 @@ def imei_type(number): invalid) for checking the type of number passed.""" try: number = validate(number) - except: + except Exception: return None if len(number) in (14, 15): return 'IMEI' diff --git a/stdnum/iso7064/mod_11_10.py b/stdnum/iso7064/mod_11_10.py index 4b691ff9..690682b7 100644 --- a/stdnum/iso7064/mod_11_10.py +++ b/stdnum/iso7064/mod_11_10.py @@ -56,7 +56,7 @@ def validate(number): """Checks whether the check digit is valid.""" try: valid = checksum(number) == 1 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() diff --git a/stdnum/iso7064/mod_11_2.py b/stdnum/iso7064/mod_11_2.py index 69a1595b..9d7c2538 100644 --- a/stdnum/iso7064/mod_11_2.py +++ b/stdnum/iso7064/mod_11_2.py @@ -59,7 +59,7 @@ def validate(number): """Checks whether the check digit is valid.""" try: valid = checksum(number) == 1 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() diff --git a/stdnum/iso7064/mod_37_2.py b/stdnum/iso7064/mod_37_2.py index ecdf125f..ece48cb5 100644 --- a/stdnum/iso7064/mod_37_2.py +++ b/stdnum/iso7064/mod_37_2.py @@ -63,7 +63,7 @@ def validate(number, alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*'): """Checks whether the check digit is valid.""" try: valid = checksum(number, alphabet) == 1 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() diff --git a/stdnum/iso7064/mod_37_36.py b/stdnum/iso7064/mod_37_36.py index 6a153e09..0787e5ab 100644 --- a/stdnum/iso7064/mod_37_36.py +++ b/stdnum/iso7064/mod_37_36.py @@ -61,7 +61,7 @@ def validate(number, alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): """Checks whether the check digit is valid.""" try: valid = checksum(number, alphabet) == 1 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() diff --git a/stdnum/iso7064/mod_97_10.py b/stdnum/iso7064/mod_97_10.py index 8696d3cd..618fbc7f 100644 --- a/stdnum/iso7064/mod_97_10.py +++ b/stdnum/iso7064/mod_97_10.py @@ -52,7 +52,7 @@ def validate(number): """Checks whether the check digit is valid.""" try: valid = checksum(number) == 1 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() diff --git a/stdnum/luhn.py b/stdnum/luhn.py index bc1b5ac1..5a11a0d5 100644 --- a/stdnum/luhn.py +++ b/stdnum/luhn.py @@ -64,7 +64,7 @@ def validate(number, alphabet='0123456789'): raise InvalidFormat() try: valid = checksum(number, alphabet) == 0 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() diff --git a/stdnum/util.py b/stdnum/util.py index a832f424..420d3637 100644 --- a/stdnum/util.py +++ b/stdnum/util.py @@ -106,7 +106,7 @@ def clean(number, deletechars=''): """ try: number = ''.join(x for x in number) - except: + except Exception: raise InvalidFormat() if sys.version < '3' and isinstance(number, str): # pragma: no cover (Python 2/3 specific code) try: diff --git a/stdnum/verhoeff.py b/stdnum/verhoeff.py index 4fb93155..00037e0f 100644 --- a/stdnum/verhoeff.py +++ b/stdnum/verhoeff.py @@ -81,7 +81,7 @@ def validate(number): raise InvalidFormat() try: valid = checksum(number) == 0 - except: + except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() From 256aa49be625314bc7837df22b3a70d32269e088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Krienb=C3=BChl?= Date: Mon, 13 Oct 2014 16:15:03 +0200 Subject: [PATCH 015/654] Adds the Swiss social security number Also known as "Sozialversicherungsnummer" / "Neue AHV Nummer". --- stdnum/ch/__init__.py | 21 +++++++++++++ stdnum/ch/ssn.py | 72 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 stdnum/ch/__init__.py create mode 100644 stdnum/ch/ssn.py diff --git a/stdnum/ch/__init__.py b/stdnum/ch/__init__.py new file mode 100644 index 00000000..cea35648 --- /dev/null +++ b/stdnum/ch/__init__.py @@ -0,0 +1,21 @@ +# __init__.py - collection of Swiss numbers +# coding: utf-8 +# +# Copyright (C) 2014 Denis Krienbuehl +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Swiss numbers.""" diff --git a/stdnum/ch/ssn.py b/stdnum/ch/ssn.py new file mode 100644 index 00000000..548ffa1a --- /dev/null +++ b/stdnum/ch/ssn.py @@ -0,0 +1,72 @@ +# vat.py - functions for handling Swiss social security numbers +# +# Copyright (C) 2014 Denis Krienbuehl +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Swiss social security number ("Sozialversicherungsnummer"). + +Also known as "Neue AHV Nummer". + +The Swiss Sozialversicherungsnummer is used to identify indivduals for taxation +and pension purposes. + +The number is validated using EAN-13, though dashes are substitued for dots. + +>>> compact('756.9217.0769.85') +'7569217076985' +>>> format('7569217076985') +'756.9217.0769.85' +>>> validate('7569217076985') +'7569217076985' +>>> validate('756.9217.0769.85') +'7569217076985' +>>> validate('756.9217.0769.84') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import ValidationError +from stdnum import ean +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' .').strip() + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return '.'.join((number[:3], number[3:7], number[7:11], number[11:])) + + +def validate(number): + """Checks to see if the number provided is a valid + Swiss Sozialversicherungsnummer.""" + return ean.validate(compact(number)) + + +def is_valid(number): + """Checks to see if the number provided is a valid + Sozialversicherungsnummer.""" + try: + return bool(validate(number)) + except ValidationError: + return False From e713cc7764b9de1faaf9181c2635194342bec385 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 19 Oct 2014 14:48:57 +0200 Subject: [PATCH 016/654] Update database files --- stdnum/iban.dat | 5 +- stdnum/imsi.dat | 1286 ++++++++++++++++++++++++++++------------------- stdnum/isbn.dat | 33 +- stdnum/isil.dat | 11 +- 4 files changed, 782 insertions(+), 553 deletions(-) diff --git a/stdnum/iban.dat b/stdnum/iban.dat index aa6e8dd2..692531a2 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -30,6 +30,8 @@ IS country="Iceland" bban="4!n2!n6!n10!n" IE country="Ireland" bban="4!a6!n8!n" IL country="Israel" bban="3!n3!n13!n" IT country="Italy" bban="1!a5!n5!n12!c" +JO country="Jordan" bban="4!a4!n18!c" +XK country="Republic of Kosovo" bban="4!n10!n2!n" KW country="Kuwait" bban="4!a22!c" KZ country="Kazakhstan" bban="3!n13!c" LV country="Latvia" bban="4!a13!c" @@ -41,7 +43,7 @@ MK country="Macedonia, Former Yugoslav Republic of" bban="3!n10!c2!n" MT country="Malta" bban="4!a5!n18!c" MR country="Mauritania" bban="5!n5!n11!n2!n" MU country="Mauritius" bban="4!a2!n2!n12!n3!n3!a" -MD country="Republic of Moldova" bban="2!c18!c" +MD country="Moldova" bban="2!c18!c" MC country="Monaco" bban="5!n5!n11!c2!n" ME country="Montenegro" bban="3!n13!n2!n" NL country="The Netherlands" bban="4!a10!n" @@ -60,6 +62,7 @@ SI country="Slovenia" bban="5!n8!n2!n" ES country="Spain" bban="4!n4!n1!n1!n10!n" SE country="Sweden" bban="3!n16!n1!n" CH country="Switzerland" bban="5!n12!c" +TL country="Timor-Leste" bban="3!n 14!n 2!n" TN country="Tunisia" bban="2!n3!n13!n2!n" TR country="Turkey" bban="5!n1!c16!c" AE country="United Arab Emirates" bban="3!n16!n" diff --git a/stdnum/imsi.dat b/stdnum/imsi.dat index 946b962d..1214f1cb 100644 --- a/stdnum/imsi.dat +++ b/stdnum/imsi.dat @@ -1,51 +1,69 @@ # generated from various sources # https://en.wikipedia.org/w/index.php?title=Mobile_country_code&action=raw 001 - 01 bands="GSM 900 / GSM 1800" brand="TEST" country="National operators" operator="Test Network" status="Operational" + 01 bands="GSM 900 / GSM 1800" brand="TEST" country="Test networks" operator="Test Network" status="Operational" 00-99 202 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="gr" country="Greece" operator="Vodafone Greece" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" + 03 bands="" cc="gr" country="Greece" operator="OTE" status="" + 04 bands="" cc="gr" country="Greece" operator="EDISY" status="" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="gr" country="Greece" operator="Vodafone Greece" status="Operational" + 06 bands="" cc="gr" country="Greece" operator="Cosmoline" status="" + 07 bands="" cc="gr" country="Greece" operator="AMD Telecom" status="" 09 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" 00-99 204 - 01 cc="nl" country="Netherlands" operator="VastMobiel B.V." status="Non-Operational" + 01 bands="" cc="nl" country="Netherlands" operator="RadioAccess Network Services BV" status="" 02 bands="LTE 2600" brand="Tele2" cc="nl" country="Netherlands" operator="Tele2 Nederland B.V." status="Operational" 03 bands="MVNE / PrivateGSM 1800" brand="Voiceworks" cc="nl" country="Netherlands" operator="Voiceworks B.V." status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800/2600" brand="Vodafone" cc="nl" country="Netherlands" operator="Vodafone Libertel B.V." status="Operational" - 05 cc="nl" country="Netherlands" operator="Elephant Talk Communications Premium Rate Services" - 06 brand="Vectone Mobile Delight Mobile" cc="nl" country="Netherlands" operator="Mundio Mobile (Netherlands) Ltd" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="nl" country="Netherlands" operator="Vodafone Libertel B.V." status="Operational" + 05 bands="" cc="nl" country="Netherlands" operator="Elephant Talk Communications Premium Rate Services" status="" + 06 bands="MVNO" brand="Vectone Mobile Delight Mobile" cc="nl" country="Netherlands" operator="Mundio Mobile (Netherlands) Ltd" status="Operational" 07 bands="MVNE" cc="nl" country="Netherlands" operator="Teleena (MVNE)" status="Operational" - 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="KPN" cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="Operational" - 09 brand="Lycamobile" cc="nl" country="Netherlands" operator="Lycamobile Netherlands Limited" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="KPN" cc="nl" country="Netherlands" operator="KPN B.V." status="Operational" - 12 bands="National Roaming Agreement on KPN" brand="Telfort" cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="Operational" - 13 cc="nl" country="Netherlands" operator="Unica Installatietechniek B.V." - 14 cc="nl" country="Netherlands" operator="6GMOBILE B.V." status="went into Bankruptcy" - 15 brand="Ziggo" cc="nl" country="Netherlands" operator="Ziggo B.V." - 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="T-Mobile (BEN)" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="KPN" cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="Operational" + 09 bands="MVNO" brand="Lycamobile" cc="nl" country="Netherlands" operator="Lycamobile Netherlands Limited" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="KPN" cc="nl" country="Netherlands" operator="KPN B.V." status="Operational" + 11 bands="" cc="nl" country="Netherlands" operator="VoipIT B.V." status="" + 12 brand="Telfort" cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="Operational" + 13 bands="" cc="nl" country="Netherlands" operator="Unica Installatietechniek B.V." status="" + 14 cc="nl" country="Netherlands" operator="6GMOBILE B.V." status="Reserved" + 15 bands="LTE 2600" brand="Ziggo" cc="nl" country="Netherlands" operator="Ziggo B.V." status="Operational" + 16 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile (BEN)" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 17 bands="MVNE" brand="Intercity Zakelijk" cc="nl" country="Netherlands" operator="Intercity Mobile Communications B.V." status="Operational" - 18 cc="nl" country="Netherlands" operator="UPC Nederland B.V." - 19 cc="nl" country="Netherlands" operator="Mixe Communication Solutions B.V." - 20 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="T-Mobile" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" + 18 bands="" cc="nl" country="Netherlands" operator="UPC Nederland B.V." status="" + 19 bands="" cc="nl" country="Netherlands" operator="Mixe Communication Solutions B.V." status="" + 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 21 bands="GSM-R 900" cc="nl" country="Netherlands" operator="ProRail B.V." status="Operational" - 22 cc="nl" country="Netherlands" operator="Ministerie van Defensie" + 22 bands="" cc="nl" country="Netherlands" operator="Ministerie van Defensie" status="" 23 bands="MVNE" cc="nl" country="Netherlands" operator="ASPIDER Solutions Nederland B.V." status="Operational" - 24 cc="nl" country="Netherlands" operator="Private Mobility Nederland B.V." + 24 bands="" cc="nl" country="Netherlands" operator="Private Mobility Nederland B.V." status="" 25 bands="PrivateGSM 1800" cc="nl" country="Netherlands" operator="CapX B.V." status="Operational" - 26 cc="nl" country="Netherlands" operator="SpeakUp B.V." - 27 cc="nl" country="Netherlands" operator="Breezz Nederland B.V." - 28 cc="nl" country="Netherlands" operator="Lancelot B.V." + 26 bands="" cc="nl" country="Netherlands" operator="SpeakUp B.V." status="" + 27 bands="" cc="nl" country="Netherlands" operator="Breezz Nederland B.V." status="" + 28 bands="" cc="nl" country="Netherlands" operator="Lancelot B.V." status="" + 29 bands="" cc="nl" country="Netherlands" operator="Private Mobile Ltd" status="" + 60 bands="" cc="nl" country="Netherlands" operator="Nextgen Mobile Ltd" status="" + 61 bands="" cc="nl" country="Netherlands" operator="BodyTrace Netherlands B.V." status="" + 62 bands="MVNO" brand="Voxbone" cc="nl" country="Netherlands" operator="Voxbone mobile" status="Operational" + 64 bands="" cc="nl" country="Netherlands" operator="Zetacom B.V." status="" + 65 bands="" cc="nl" country="Netherlands" operator="AGMS Netherlands B.V." status="" + 66 bands="" cc="nl" country="Netherlands" operator="Utility Connect B.V." status="" 67 bands="PrivateGSM 1800" cc="nl" country="Netherlands" operator="RadioAccess B.V." status="Operational" - 68 cc="nl" country="Netherlands" operator="Unify Group Holding B.V." + 68 bands="" cc="nl" country="Netherlands" operator="Roamware (Netherlands) B.V." status="" 69 cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." 00-99 206 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Proximus a" cc="be" country="Belgium" operator="Belgacom Mobile" status="Operational" - 05 brand="Telenet" cc="be" country="Belgium" operator="Telenet" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Mobistar" cc="be" country="Belgium" operator="Orange S.A." status="Operational" - 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="BASE" cc="be" country="Belgium" operator="KPN Group Belgium" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Proximus" cc="be" country="Belgium" operator="Belgacom Mobile" status="Operational" + 02 bands="GSM-R" cc="be" country="Belgium" operator="N.M.B.S." status="Operational" + 05 bands="MVNO" brand="Telenet" cc="be" country="Belgium" operator="Telenet" status="Operational" + 06 bands="MVNO" brand="Lycamobile" cc="be" country="Belgium" operator="Lycamobile sprl" status="Operational" + 07 bands="MVNO" brand="Vectone Mobile" cc="be" country="Belgium" operator="Mundio Mobile Belgium nv" status="Reserved" + 09 bands="MVNO" brand="Voxbone" cc="be" country="Belgium" operator="Voxbone mobile" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="Mobistar" cc="be" country="Belgium" operator="Orange S.A." status="Operational" + 15 bands="" cc="be" country="Belgium" operator="Elephant Talk Communications Schweiz GmbH" status="Not operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="BASE" cc="be" country="Belgium" operator="KPN Group Belgium" status="Operational" 00-99 208 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE" brand="Orange" cc="fr" country="France" operator="Orange S.A." status="Operational" @@ -63,25 +81,37 @@ 14 bands="GSM-R" brand="RFF" cc="fr" country="France" operator="RFF" status="Operational" 15 bands="UMTS 2100 / UMTS 900" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" 16 bands="UMTS 2100 / UMTS 900" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" - 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" + 17 bands="" brand="LEGOS" cc="fr" country="France" operator="Local Exchange Global Operation Services" status="" + 18 bands="MVNO" brand="Voxbone" cc="fr" country="France" operator="Voxbone mobile" status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE 1800 / LTE 2600" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" 21 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="" 22 bands="" brand="Transatel Mobile" cc="fr" country="France" operator="Transatel" status="" - 23 bands="GSM, UMTS" brand="Virgin Mobile (MVNO)" cc="fr" country="France" operator="Omea Telecom" status="Operational" + 23 bands="GSM / UMTS" brand="Virgin Mobile (MVNO)" cc="fr" country="France" operator="Omea Telecom" status="Operational" 24 bands="UMTS" brand="MobiquiThings" cc="fr" country="France" status="Operational" 25 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="LycaMobile" cc="fr" country="France" operator="LycaMobile" status="Operational" - 26 bands="GSM, UMTS" brand="NRJ Mobile (MVNO)" cc="fr" country="France" operator="NRJ Mobile" status="Operational" + 26 bands="GSM / UMTS" brand="NRJ Mobile (MVNO)" cc="fr" country="France" operator="NRJ Mobile" status="Operational" + 27 bands="" cc="fr" country="France" operator="Afone" status="" + 28 bands="" cc="fr" country="France" operator="Astrium SAS" status="" + 29 bands="" cc="fr" country="France" operator="Société International Mobile Communication" status="" + 30 bands="" cc="fr" country="France" operator="Symacom" status="" + 31 bands="MVNO" brand="Vectone" cc="fr" country="France" operator="Mundio Mobile" status="Operational" 88 bands="GSM 900 / GSM 1800" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" + 89 bands="" cc="fr" country="France" operator="Omer Telecom Ltd" status="" + 90 bands="" cc="fr" country="France" operator="Images & Réseaux" status="" + 91 bands="" cc="fr" country="France" operator="Orange S.A." status="" + 92 bands="LTE 2600" brand="Com4Innov" cc="fr" country="France" operator="Association Plate-forme Télécom" status="Operational" + 93 bands="" cc="fr" country="France" operator="TDF" status="" 00-99 212 01 bands="GSM 900 / UMTS 2100 / LTE 2600" brand="Office des Telephones" cc="mc" country="Monaco" operator="Monaco Telecom" status="Operational" 00-99 213 - 03 bands="GSM 900" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" 00-99 214 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" - 04 bands="UMTS 2100 / GSM 1800" brand="Yoigo" cc="es" country="Spain" operator="Xfera Moviles SA" status="Operational" + 04 bands="GSM 1800 / UMTS 2100" brand="Yoigo" cc="es" country="Spain" operator="Xfera Moviles SA" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TME" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" @@ -97,13 +127,20 @@ 22 bands="MVNO" brand="DigiMobil" cc="es" country="Spain" operator="Best Spain Telecom" status="Operational" 23 bands="MVNO" brand="Barablu" cc="es" country="Spain" operator="Barablu Móvil España" 24 bands="MVNO" brand="Eroski" cc="es" country="Spain" operator="Eroski Móvil España" status="Operational" - 25 bands="MVNO" brand="LycaMobile" cc="es" country="Spain" operator="LycaMobile S.L." status="Operational" + 25 bands="MVNO" brand="Lycamobile" cc="es" country="Spain" operator="LycaMobile S.L." status="Operational" + 28 bands="" cc="es" country="Spain" operator="Consorcio de Telecomunicaciones Avanzadas, S.A." status="" + 29 bands="" cc="es" country="Spain" operator="NEO-SKY 2002, S.A." status="" + 30 bands="" cc="es" country="Spain" operator="Compatel Limited" status="" + 31 bands="" cc="es" country="Spain" operator="Red Digital De Telecomunicaciones de las Islas Baleares, S.L." status="" + 32 bands="MVNO" brand="Tuenti" cc="es" country="Spain" operator="Tuenti Technologies S.L." status="Operational" 00-99 216 - 01 bands="GSM 900 / GSM/LTE 1800 / UMTS 2100" brand="Telenor" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" - 30 bands="GSM 900 / GSM/LTE 1800 / UMTS 2100" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" - 70 bands="GSM/UMTS 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" - 71 bands="" brand="UPC Hungary" cc="hu" country="Hungary" operator="UPC Hungary Ldt" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" + 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" + 70 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" + 71 bands="" brand="UPC Hungary" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" + 99 bands="GSM-R 900" brand="MAV GSM-R" cc="hu" country="Hungary" operator="Magyar Államvasutak" status="Planned" 00-99 218 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="HT-ERONET" cc="ba" country="Bosnia and Herzegovina" operator="Public Enterprise Croatian Telecom Ltd." status="Operational" @@ -111,9 +148,9 @@ 90 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BH Mobile" cc="ba" country="Bosnia and Herzegovina" operator="BH Telecom" status="Operational" 00-99 219 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="T-Mobile" cc="hr" country="Croatia" operator="T-Mobile Croatia" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="hr" country="Croatia" operator="T-Mobile Croatia" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tele2" cc="hr" country="Croatia" operator="Tele2" status="Operational" - 10 bands="GSM 900 / UMTS 2100" brand="Vip" cc="hr" country="Croatia" operator="Vipnet" status="Operational" + 10 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vip" cc="hr" country="Croatia" operator="Vipnet" status="Operational" 00-99 220 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Serbia" status="Operational" @@ -124,25 +161,28 @@ 222 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="Operational" 02 bands="Satellite (Globalstar)" brand="Elsacom" cc="it" country="Italy" status="Not operational" - 04 brand="Intermatica" cc="it" country="Italy" - 05 brand="Telespazio" cc="it" country="Italy" + 04 bands="" brand="Intermatica" cc="it" country="Italy" status="" + 05 bands="" brand="Telespazio" cc="it" country="Italy" status="" 07 bands="MVNO" brand="Noverca" cc="it" country="Italy" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 & 2100" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel N.V." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel N.V." status="Operational" 30 bands="GSM-R 900" brand="RFI" cc="it" country="Italy" operator="Rete Ferroviaria Italiana" status="Operational" - 35 bands="MVNO" brand="Lyca Italy" cc="it" country="Italy" operator="Lyca Mobile" status="Planned" + 34 bands="MVNO" brand="BT Italia" cc="it" country="Italy" operator="British Telecom Italia" status="Reserved" + 35 bands="MVNO" brand="Lyca Italy" cc="it" country="Italy" operator="Lyca Mobile" status="Reserved" 77 bands="UMTS 2100" brand="IPSE 2000" cc="it" country="Italy" status="Not operational" 88 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni SpA" status="Operational" 98 bands="GSM 1800" brand="Blu" cc="it" country="Italy" status="Not operational" 99 bands="UMTS 2100" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="Operational" 00-99 226 - 01 bands="GSM 900/1800
UMTS 900/2100
LTE 1800" brand="Vodafone" cc="ro" country="Romania" operator="Vodafone România" status="Operational" - 02 bands="CDMA 420" brand="Romtelecom" cc="ro" country="Romania" operator="Romtelecom" status="Operational" - 03 bands="GSM 900/1800
LTE 1800" brand="Cosmote" cc="ro" country="Romania" operator="Cosmote România" status="Operational" - 04 bands="CDMA 450" brand="Cosmote/Zapp" cc="ro" country="Romania" operator="Cosmote România" status="Not operational" - 05 bands="UMTS 2100" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" - 06 bands="UMTS 2100" brand="Cosmote/Zapp" cc="ro" country="Romania" operator="Cosmote România" status="Operational" - 10 bands="GSM 900/1800
UMTS 900/2100
LTE 1800" brand="Orange" cc="ro" country="Romania" operator="Orange România" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / TD-LTE 2600" brand="Vodafone" cc="ro" country="Romania" operator="Vodafone România" status="Operational" + 02 bands="CDMA 420" brand="Clicknet Mobile" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" + 03 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" + 04 bands="CDMA 450" brand="Cosmote/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" + 05 bands="UMTS 900 / UMTS 2100" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" + 06 bands="UMTS 2100" brand="Telekom/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="ro" country="Romania" operator="Orange România" status="Operational" + 11 bands="MVNO" cc="ro" country="Romania" operator="Enigma-System" status="" + 15 bands="TD-LTE 2600" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Planned" 00-99 228 01 bands="GSM 900 / GSM / LTE 1800 / UMTS 2100" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" @@ -159,20 +199,22 @@ 52 brand="Barablu" cc="ch" country="Switzerland" operator="Barablu" 53 cc="ch" country="Switzerland" operator="UPC" status="Inactive" 54 bands="MVNO" cc="ch" country="Switzerland" operator="Lyca Mobile" status="Operational" + 99 cc="ch" country="Switzerland" operator="Swisscom" status="" 00-99 230 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="T-Mobile" cc="cy" country="Cyprus" operator="T-Mobile Czech Republic" status="Operational" - 02 bands="CDMA2000 450 / GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="cy" country="Cyprus" operator="Telefónica Czech Republic" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="cy" country="Cyprus" operator="T-Mobile Czech Republic" status="Operational" + 02 bands="CDMA 450 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="cy" country="Cyprus" operator="Telefónica Czech Republic" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" 04 bands="CDMA2000 410 - 430" brand="U:fon" cc="cy" country="Cyprus" operator="Air Telecom a. s." status="Operational" - 05 cc="cy" country="Cyprus" operator="TRAVEL TELEKOMMUNIKATION, s.r.o." status="unknown" - 06 cc="cy" country="Cyprus" operator="OSNO TELECOMUNICATION, s.r.o." status="unknown" + 05 bands="" cc="cy" country="Cyprus" operator="TRAVEL TELEKOMMUNIKATION, s.r.o." status="" + 06 bands="" cc="cy" country="Cyprus" operator="OSNO TELECOMUNICATION, s.r.o." status="" 07 bands="MVNO" cc="cy" country="Cyprus" operator="ASTELNET, s.r.o." status="Operational" + 08 bands="" cc="cy" country="Cyprus" operator="Compatel s.r.o." status="" 98 bands="GSM-R 900" cc="cy" country="Cyprus" operator="Správa železniční dopravní cesty, s.o." status="Operational" 99 bands="GSM 1800" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" 00-99 231 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900/2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" 02 bands="GSM 900 / GSM 1800" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" 03 bands="" cc="sk" country="Slovakia" operator="Unient Communications" status="" 04 bands="UMTS 2100" brand="T-Mobile" cc="sk" country="Slovakia" operator="T-Mobile Slovensko" status="Operational" @@ -180,168 +222,196 @@ 99 bands="GSM-R" brand="ŽSR" cc="sk" country="Slovakia" operator="Železnice Slovenskej Republiky" status="Operational" 00-99 232 - 01 bands="GSM / UMTS / LTE 2600" brand="A1 TA" country="Austria - AT" operator="A1 Telekom Austria" status="operational network" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="A1 TA" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" 02 country="Austria - AT" operator="A1 Telekom Austria" status="reserved" - 03 bands="GSM / UMTS / LTE 2600" brand="T-Mobile AT" country="Austria - AT" operator="T-Mobile Austria" status="operational network" - 05 bands="GSM / UMTS" brand="Orange AT" country="Austria - AT" operator="Hutchison Drei Austria" status="operational network" - 07 brand="tele.ring" country="Austria - AT" operator="T-Mobile Austria" status="MVNE / MNVO" - 08 country="Austria - AT" status="MNVO / not active" - 09 brand="Tele2Mobil" country="Austria - AT" operator="A1 Telekom Austria" status="MVNO as of Nov. 2013" - 10 bands="UMTS / LTE" brand="3AT" country="Austria - AT" operator="Hutchison Drei Austria" status="operational network" - 11 brand="bob" country="Austria - AT" operator="A1 Telekom Austria" status="MVNO" - 12 brand="yesss!" country="Austria - AT" operator="A1 Telekom Austria" status="MNVE / MVNO" - 13 country="Austria - AT" status="MNVO / not active" - 14 country="Austria - AT" operator="Hutchison Drei Austria" status="reserved" - 15 brand="Vectone" country="Austria - AT" operator="A1 Telekom Austria" status="MNVO" - 16 country="Austria - AT" operator="Hutchison Drei Austria" status="reserved" - 91 bands="GSM-R" brand="GSM-R A" country="Austria - AT" operator="ÖBB" status="operational network" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile AT" country="Austria - AT" operator="T-Mobile Austria" status="Operational" + 04 bands="" brand="T-Mobile AT" country="Austria - AT" operator="T-Mobile Austria Gmbh" status="" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange AT" country="Austria - AT" operator="Hutchison Drei Austria" status="Operational" + 06 bands="" brand="Orange AT" country="Austria - AT" operator="Orange Austria GmbH" status="" + 07 bands="MVNO" brand="tele.ring" country="Austria - AT" operator="T-Mobile Austria" status="Operational" + 08 country="Austria - AT" status="Not operational" + 09 bands="MVNO" brand="Tele2Mobil" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" + 10 bands="UMTS 2100 / LTE 2600" brand="3AT" country="Austria - AT" operator="Hutchison Drei Austria" status="Operational" + 11 bands="MVNO" brand="bob" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" + 12 bands="MVNO" brand="yesss!" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" + 13 bands="" country="Austria - AT" status="Not operational" + 14 bands="" country="Austria - AT" operator="Hutchison Drei Austria" status="Reserved" + 15 bands="MVNO" brand="Vectone" country="Austria - AT" operator="Mundio Mobile Austria" status="Operational" + 16 country="Austria - AT" operator="Hutchison Drei Austria" status="Reserved" + 91 bands="GSM-R" brand="GSM-R A" country="Austria - AT" operator="ÖBB" status="Operational" 00-99 234 - 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" - 01 bands="GSM 1800" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="gb" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" - 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="gb" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" - 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" - 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" - 07 bands="GSM 1800" cc="gb" country="United Kingdom" operator="Cable & Wireless Worldwide" status="Operational" - 08 cc="gb" country="United Kingdom" operator="OnePhone (UK) Ltd" - 09 bands="GSM 900/1800" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Tismi BV" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 11 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 12 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Railtrack" cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" - 13 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Railtrack" cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" - 14 bands="GSM 1800" brand="Hay Systems Ltd" cc="gb" country="United Kingdom" operator="Hay Systems Ltd" status="Operational" - 15 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="Vodafone UK" cc="gb" country="United Kingdom" operator="Vodafone" status="Operational" - 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Talk Talk (Opal Tel Ltd)" cc="gb" country="United Kingdom" operator="TalkTalk Communications Limited" status="Operational" - 17 cc="gb" country="United Kingdom" operator="FleXtel Limited" - 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cloud9" cc="gb" country="United Kingdom" operator="Cloud9" status="Operational" - 19 bands="GSM 1800" brand="Private Mobile Networks PMN" cc="gb" country="United Kingdom" operator="Teleware plc" status="Operational" - 20 bands="UMTS 2100" brand="3" cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" - 22 bands="" brand="RoutoMessaging" cc="gb" country="United Kingdom" operator="Routo Telecommunications Limited" status="Operational" - 24 bands="" brand="Greenfone" cc="gb" country="United Kingdom" operator="Stour Marine" status="Operational" - 25 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Truphone" cc="gb" country="United Kingdom" operator="Truphone" status="Operational" - 26 brand="Lycamobile" cc="gb" country="United Kingdom" status="Operational" - 27 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="gb" country="United Kingdom" operator="Teleena UK Limited" status="Operational" - 30 bands="GSM 1800 / UMTS 2100" brand="T-Mobile UK" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 31 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" - 32 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" - 33 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 34 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 35 cc="gb" country="United Kingdom" operator="JSC Ingenium (UK) Limited" - 36 cc="gb" country="United Kingdom" operator="Cable and Wireless Isle of Man Limited" - 37 cc="gb" country="United Kingdom" operator="Synectiv Ltd" - 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" - 51 bands="TD-LTE" brand="UK Broadband Limited" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" - 55 bands="GSM 900 (Guernsey) / GSM 1800 (Jersey) / UMTS 2100" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Cable & Wireless Guernsey / Sure Mobile (Jersey)" status="Operational" - 58 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Pronto GSM" cc="gb" country="United Kingdom" operator="Manx Telecom" status="Operational" - 76 bands="GSM 900 / GSM 1800" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" - 78 bands="TETRA" brand="Airwave" cc="gb" country="United Kingdom" operator="Airwave (communications network)" status="Operational" + 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="uk" country="United Kingdom" operator="BT Group" status="Operational" + 01 bands="GSM 1800" brand="Vectone Mobile" cc="uk" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="uk" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="uk" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" + 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="uk" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" + 05 cc="uk" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" + 06 cc="uk" country="United Kingdom" operator="Internet Computer Bureau Limited" + 07 bands="GSM 1800" cc="uk" country="United Kingdom" operator="Cable & Wireless Worldwide" status="Operational" + 08 cc="uk" country="United Kingdom" operator="OnePhone (UK) Ltd" + 09 bands="GSM 900 / GSM 1800" brand="Sure Mobile" cc="uk" country="United Kingdom" operator="Tismi BV" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="uk" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="uk" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 12 bands="GSM-R" brand="Railtrack" cc="uk" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" + 13 bands="GSM-R" brand="Railtrack" cc="uk" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" + 14 bands="GSM 1800" brand="Hay Systems Ltd" cc="uk" country="United Kingdom" operator="Hay Systems Ltd" status="Operational" + 15 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="Vodafone UK" cc="uk" country="United Kingdom" operator="Vodafone" status="Operational" + 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Talk Talk" cc="uk" country="United Kingdom" operator="TalkTalk Communications Limited" status="Operational" + 17 cc="uk" country="United Kingdom" operator="FleXtel Limited" + 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cloud9" cc="uk" country="United Kingdom" operator="Cloud9" status="Operational" + 19 bands="GSM 1800" brand="Private Mobile Networks PMN" cc="uk" country="United Kingdom" operator="Teleware plc" status="Operational" + 20 bands="UMTS 2100" brand="3" cc="uk" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" + 22 bands="" brand="RoutoMessaging" cc="uk" country="United Kingdom" operator="Routo Telecommunications Limited" status="Operational" + 23 bands="" cc="uk" country="United Kingdom" operator="Icron Network Limited" status="" + 24 bands="" brand="Greenfone" cc="uk" country="United Kingdom" operator="Stour Marine" status="Operational" + 25 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Truphone" cc="uk" country="United Kingdom" operator="Truphone" status="Operational" + 26 brand="Lycamobile" cc="uk" country="United Kingdom" operator="Lycamobile UK Limited" status="Operational" + 27 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="uk" country="United Kingdom" operator="Teleena UK Limited" status="Operational" + 28 bands="" brand="Marathon Telecom Ltd" cc="uk" country="United Kingdom" operator="Marathon Telecom Limited" status="Operational" + 29 bands="" brand="aql" cc="uk" country="United Kingdom" operator="(aq) Limited" status="" + 30 bands="GSM 1800 / UMTS 2100" brand="T-Mobile UK" cc="uk" country="United Kingdom" operator="EE" status="Operational" + 31 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="uk" country="United Kingdom" operator="Virgin Media" status="Operational" + 32 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="uk" country="United Kingdom" operator="Virgin Media" status="Operational" + 33 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="uk" country="United Kingdom" operator="EE" status="Operational" + 34 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="uk" country="United Kingdom" operator="EE" status="Operational" + 35 bands="" cc="uk" country="United Kingdom" operator="JSC Ingenium (UK) Limited" status="" + 36 bands="" cc="uk" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="" + 37 bands="" cc="uk" country="United Kingdom" operator="Synectiv Ltd" status="" + 38 bands="" brand="Virgin Mobile UK" cc="uk" country="United Kingdom" operator="Virgin Media" status="" + 39 bands="" cc="uk" country="United Kingdom" operator="SSE Energy Supply Limited" status="" + 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="JT" cc="uk" country="United Kingdom" operator="JT Group Limited" status="Operational" + 51 bands="TD-LTE" brand="UK Broadband" cc="uk" country="United Kingdom" operator="UK Broadband Limited" status="Operational" + 52 bands="" cc="uk" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" + 53 bands="" cc="uk" country="United Kingdom" operator="Limitless Mobile Ltd" status="" + 55 bands="GSM 900 (Guernsey) / GSM 1800 (Jersey) / UMTS 2100" brand="Sure Mobile" cc="uk" country="United Kingdom" operator="Cable & Wireless Guernsey / Sure Mobile (Jersey)" status="Operational" + 58 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Pronto GSM" cc="uk" country="United Kingdom" operator="Manx Telecom" status="Operational" + 76 bands="GSM 900 / GSM 1800" brand="BT" cc="uk" country="United Kingdom" operator="BT Group" status="Operational" + 78 bands="TETRA" brand="Airwave" cc="uk" country="United Kingdom" operator="Airwave Solutions Ltd" status="Operational" + 86 bands="" cc="uk" country="United Kingdom" operator="EE" status="" 00-99 235 - 00 cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" - 01 cc="gb" country="United Kingdom" operator="EE" - 02 cc="gb" country="United Kingdom" operator="EE" - 77 brand="BT" cc="gb" country="United Kingdom" operator="BT Group" - 91 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" - 92 cc="gb" country="United Kingdom" operator="Cable & Wireless UK" - 94 cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" - 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" + 00 cc="uk" country="United Kingdom" operator="Mundio Mobile Limited" + 01 bands="" cc="uk" country="United Kingdom" operator="EE" status="" + 02 bands="" cc="uk" country="United Kingdom" operator="EE" status="" + 03 bands="" brand="UK Broadband" cc="uk" country="United Kingdom" operator="UK Broadband Limited" status="" + 77 brand="BT" cc="uk" country="United Kingdom" operator="BT Group" + 91 cc="uk" country="United Kingdom" operator="Vodafone United Kingdom" + 92 cc="uk" country="United Kingdom" operator="Cable & Wireless UK" + 94 cc="uk" country="United Kingdom" operator="Hutchison 3G UK Ltd" + 95 cc="uk" country="United Kingdom" operator="Network Rail Infrastructure Limited" 00-99 238 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" 03 bands="" brand="End2End" cc="dk" country="Denmark" operator="MIGway A/S" status="Reserved" - 05 bands="" cc="dk" country="Denmark" operator="ApS KBUS" status="Reserved" - 06 bands="UMTS 2100" brand="3" cc="dk" country="Denmark" operator="Hi3G Denmark ApS" status="Operational" - 07 bands="" cc="dk" country="Denmark" operator="Barablu Mobile Ltd." status="Reserved" - 08 bands="" brand="Nordisk Mobiltelefon" cc="dk" country="Denmark" status="" - 09 bands="-" cc="dk" country="Denmark" operator="Dansk Beredskabskommunikation A/S" status="" + 04 bands="" cc="dk" country="Denmark" operator="NextGen Mobile Ltd" status="" + 05 bands="TETRA" brand="TetraNet" cc="dk" country="Denmark" operator="ApS KBUS 38 nr. 4418" status="Operational" + 06 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="dk" country="Denmark" operator="Hi3G Denmark ApS" status="Operational" + 07 bands="MVNO" brand="Vectone Mobile" cc="dk" country="Denmark" operator="Mundio Mobile (Denmark) Limited" status="Operational" + 08 bands="MVNO" brand="Voxbone" cc="dk" country="Denmark" operator="Voxbone mobile" status="Operational" + 09 bands="TETRA" brand="SINE" cc="dk" country="Denmark" operator="Dansk Beredskabskommunikation A/S" status="Operational" 10 bands="" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" - 11 bands="" cc="dk" country="Denmark" operator="Dansk Beredskabskommunikation A/S" status="" - 12 bands="" cc="dk" country="Denmark" operator="Lycamobile Denmark Ltd" status="" - 20 bands="GSM 900 / GSM 1800" brand="Telia" cc="dk" country="Denmark" status="Operational" + 11 bands="TETRA" brand="SINE" cc="dk" country="Denmark" operator="Dansk Beredskabskommunikation A/S" status="Operational" + 12 bands="MVNO" brand="Lycamobile" cc="dk" country="Denmark" operator="Lycamobile Denmark Ltd" status="Operational" + 13 bands="" cc="dk" country="Denmark" operator="Compatel Limited" status="" + 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="dk" country="Denmark" operator="Telia" status="Operational" 23 bands="GSM-R" brand="GSM-R DK" cc="dk" country="Denmark" operator="Banedanmark" status="Operational" - 30 bands="GSM 900 / GSM 1800" brand="Telia" cc="dk" country="Denmark" operator="Telia Nättjänster Norden AB" status="Operational" + 28 bands="" cc="dk" country="Denmark" operator="CoolTEL ApS" status="" + 30 bands="" cc="dk" country="Denmark" operator="Interactive digital media GmbH" status="" 40 bands="" cc="dk" country="Denmark" operator="Ericsson Danmark A/S" status="" + 43 bands="" cc="dk" country="Denmark" operator="MobiWeb Limited" status="" + 66 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" cc="dk" country="Denmark" operator="TT-Netværket P/S" status="" 77 bands="GSM 900 / GSM 1800" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" 00-99 240 - 01 bands="GSM 900 / GSM 1800" brand="Telia" cc="se" country="Sweden" operator="TeliaSonera Sverige AB" status="Operational" - 02 bands="UMTS 900 / UMTS 2100" brand="3" cc="se" country="Sweden" operator="HI3G Access AB" status="Operational" - 03 bands="CDMA2000 450" brand="Ice.net" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="se" country="Sweden" operator="TeliaSonera Sverige AB" status="Operational" + 02 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="3" cc="se" country="Sweden" operator="HI3G Access AB" status="Operational" + 03 bands="CDMA2000 450" brand="Net 1" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" 04 bands="UMTS 2100" brand="SWEDEN" cc="se" country="Sweden" operator="3G Infrastructure Services AB" status="Operational" 05 bands="UMTS 2100" brand="Sweden 3G" cc="se" country="Sweden" operator="Svenska UMTS-Nät AB" status="Operational" 06 bands="UMTS 2100" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" - 07 bands="GSM 900 / GSM 1800 (Now merged with Telenor into Net4Mobility)" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Inactive" + 07 bands="GSM 900 / GSM 1800" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Inactive" 08 bands="GSM 900 / GSM 1800" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" - 09 bands="GSM 900 / GSM 1800" brand="djuice" cc="se" country="Sweden" operator="Djuice Mobile Sweden, filial till Telenor Mobile Sweden AS" status="Inactive" - 10 bands="Only used on femto- and nanocells" brand="Spring Mobil" cc="se" country="Sweden" operator="Spring Mobil AB" status="Operational" - 11 bands="" cc="se" country="Sweden" operator="Lindholmen Science Park AB" status="" - 12 bands="" brand="Lycamobile Sweden" cc="se" country="Sweden" operator="Lycamobile Sweden Limited" status="" + 09 bands="MVNO" brand="djuice" cc="se" country="Sweden" operator="Telenor Mobile Sweden AS" status="Not operational" + 10 brand="Spring Mobil" cc="se" country="Sweden" operator="Spring Mobil AB" status="Operational" + 11 bands="" cc="se" country="Sweden" operator="Lindholmen Science Park AB" status="Not operational" + 12 bands="MVNO" brand="Lycamobile" cc="se" country="Sweden" operator="Lycamobile Sweden Limited" status="Operational" 13 bands="" cc="se" country="Sweden" operator="Alltele Företag Sverige AB" status="" - 14 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="se" country="Sweden" operator="TDC Sverige AB" status="Inactive" + 14 bands="MVNO" cc="se" country="Sweden" operator="TDC Sverige AB" status="Inactive" 15 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="se" country="Sweden" operator="Wireless Maingate Nordic AB" status="Operational" 16 bands="GSM" cc="se" country="Sweden" operator="42 Telecom AB" status="Operational" 17 bands="" brand="Gotanet" cc="se" country="Sweden" operator="Götalandsnätet AB" status="" 18 bands="" cc="se" country="Sweden" operator="Generic Mobile Systems Sweden AB" status="" - 19 bands="" cc="se" country="Sweden" operator="Mundio Mobile (Sweden) Limited" status="" + 19 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="se" country="Sweden" operator="Mundio Mobile (Sweden) Limited" status="Operational" 20 bands="GSM" cc="se" country="Sweden" operator="Wireless Maingate Messaging Services AB" status="Operational" 21 bands="GSM-R 900" brand="MobiSir" cc="se" country="Sweden" operator="Trafikverket ICT" status="Operational" 22 bands="" cc="se" country="Sweden" operator="EuTel AB" status="" 23 bands="" cc="se" country="Sweden" operator="Infobip Limited" status="Operational" - 24 bands="GSM 900 / LTE 2600/900/1800 (LTE1800 only available in major cities)" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" - 25 bands="" cc="se" country="Sweden" operator="Digitel Mobile Srl" status="" + 24 bands="GSM 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" + 25 bands="" cc="se" country="Sweden" operator="Digitel Mobile Srl" status="Not operational" 26 bands="GSM" cc="se" country="Sweden" operator="Beepsend AB" status="Operational" - 27 bands="" cc="se" country="Sweden" operator="Fogg Mobile AB" status="" + 27 bands="MVNO" cc="se" country="Sweden" operator="Fogg Mobile AB" status="Operational" 28 bands="" cc="se" country="Sweden" operator="CoolTEL Aps" status="" 29 bands="" cc="se" country="Sweden" operator="Mercury International Carrier Services" status="" 30 bands="" cc="se" country="Sweden" operator="NextGen Mobile Ltd." status="" - 31 bands="" cc="se" country="Sweden" operator="Mobimax AB" status="" + 31 bands="" cc="se" country="Sweden" operator="Mobimax AB" status="Not operational" 32 bands="" cc="se" country="Sweden" operator="Compatel Limited" status="" 33 bands="" cc="se" country="Sweden" operator="Mobile Arts AB" status="" - 34 bands="" cc="se" country="Sweden" operator="Tigo LTD." status="" + 34 bands="" cc="se" country="Sweden" operator="Pro Net Telecommunications Services Ltd." status="" 35 bands="" cc="se" country="Sweden" operator="42 Telecom LTD" status="" 36 bands="" cc="se" country="Sweden" operator="interactive digital media GmbH" status="" 37 bands="" cc="se" country="Sweden" operator="CLX Networks AB" status="Operational" - 38 bands="" cc="se" country="Sweden" operator="Voxbone SA" status="" + 38 bands="MVNO" brand="Voxbone" cc="se" country="Sweden" operator="Voxbone mobile" status="Operational" + 39 bands="" cc="se" country="Sweden" operator="iCentrex Sweden AB" status="Not operational" 40 bands="" cc="se" country="Sweden" operator="ReWiCom Scandinavia AB" status="" 41 bands="" cc="se" country="Sweden" operator="Shyam Telecom UK Ltd." status="" 42 bands="" cc="se" country="Sweden" operator="Telenor Connexion AB" status="" + 43 bands="" cc="se" country="Sweden" operator="MobiWeb Ltd." status="" + 44 bands="" cc="se" country="Sweden" operator="Limitless Mobile AB" status="" 00-99 242 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Telenor" cc="no" country="Norway" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="NetCom" cc="no" country="Norway" operator="NetCom GSM" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="NetCom" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Operational" 03 brand="Teletopia" cc="no" country="Norway" operator="Teletopia" status="Not operational" - 04 bands="MNO" brand="Tele2" cc="no" country="Norway" operator="Tele2(Mobile Norway AS)" status="Operational" - 05 bands="UMTS 900 / UMTS 2100" brand="Network Norway" cc="no" country="Norway" operator="Tele2(Mobile Norway AS)" status="Operational" + 04 bands="MVNO" brand="Tele2" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" + 05 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Network Norway" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" 06 bands="CDMA2000 450" brand="Ice" cc="no" country="Norway" operator="Nordisk Mobiltelefon" status="Operational" - 07 bands="MVNO of Telenor NO" brand="Ventelo" cc="no" country="Norway" operator="Ventelo AS" status="Operational" + 07 bands="MVNO" brand="Ventelo" cc="no" country="Norway" operator="Ventelo AS" status="Operational" 08 bands="MVNO" brand="TDC" cc="no" country="Norway" operator="TDC Mobil AS" status="Operational" 09 bands="MVNO" brand="Com4" cc="no" country="Norway" operator="Com4 AS" status="Operational" 11 bands="Test" brand="SystemNet" cc="no" country="Norway" operator="SystemNet AS" status="" + 12 bands="" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="" 20 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" + 21 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" 23 bands="MVNO" brand="Lyca" cc="no" country="Norway" operator="Lyca Mobile Ltd" status="Operational" + 24 bands="" cc="no" country="Norway" operator="Mobile Norway AS" status="" + 25 bands="" cc="no" country="Norway" operator="Forsvarets kompetansesenter KKIS" status="" 00-99 244 03 bands="GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" 04 bands="MVNO" brand="AINA" cc="fi" country="Finland" operator="DNA Oy / Aina Oyj" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Elisa" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" - 08 bands="GSM 1800 / UMTS 2100" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not Operational" - 09 bands="GSM 900" brand="Finnet Group / Nokia Solutions and Networks" cc="fi" country="Finland" operator="Global Network" status="Not Operational" - 10 bands="MVNO" brand="TDC" cc="fi" country="Finland" operator="TDC Oy" status="Operational" + 08 bands="GSM 1800 / UMTS 2100" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" + 09 bands="GSM 900" brand="Finnet Group / Nokia Networks" cc="fi" country="Finland" operator="Global Network" status="Not operational" + 10 bands="MVNO" brand="TDC" cc="fi" country="Finland" operator="TDC Oy (DNA Oy)" status="Operational" 11 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Operational" - 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" - 13 bands="GSM 900 / GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Not Operational" - 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="AMT" cc="fi" country="Finland" operator="Ålands Telekommunikation Ab / Ålands Mobiltelefon" status="Operational" - 15 bands="GSM 900" brand="SAMK" cc="fi" country="Finland" operator="Samk Student Test Network" status="Not Operational" + 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" + 13 bands="GSM 900 / GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Not operational" + 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Ålcom" cc="fi" country="Finland" operator="Ålands Telekommunikation Ab" status="Operational" + 16 bands="MVNO" brand="Tele2" cc="fi" country="Finland" operator="Oy Finland Tele2 AB" status="Not operational" 21 bands="MVNO" brand="Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" - 25 bands="MVNO" brand="Datame" cc="fi" country="Finland" operator="Datame Oy" status="Operational" + 25 bands="CDMA" brand="Datame" cc="fi" country="Finland" operator="Datame Oy" status="Not operational" 26 bands="MVNO" brand="Compatel" cc="fi" country="Finland" operator="Compatel Ltd" status="Operational" + 29 bands="MVNO" cc="fi" country="Finland" operator="SCNL Truphone" status="Not operational" 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Operational" - 31 bands="MVNO" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukko Mobile Oy" status="Operational" - 91 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="Operational" + 31 bands="LTE 450" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukko Mobile Oy / Ukkoverkot Oy" status="Operational" + 32 bands="MVNO" brand="Voxbone" cc="fi" country="Finland" operator="Voxbone SA" status="Operational" + 33 bands="TETRA" brand="VIRVE" cc="fi" country="Finland" operator="Virve Tuotteet ja Palvelut Oy" status="Operational" + 34 bands="" brand="Elektrobit Wireless" cc="fi" country="Finland" operator="Elektrobit Wireless Communications Oy" status="Operational" + 35 bands="LTE 450" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" + 91 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="Operational" 00-99 246 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Omnitel" cc="lt" country="Lithuania" status="Operational" @@ -351,9 +421,10 @@ 06 bands="GSM 1800" brand="Mediafon" cc="lt" country="Lithuania" operator="UAB Mediafon" status="Operational" 00-99 247 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tele2" cc="lv" country="Latvia" operator="Tele2" status="Operational" - 03 bands="CDMA2000 450" brand="TRIATEL" cc="lv" country="Latvia" operator="Telekom Baltija" status="Operational" + 03 bands="CDMA 450" brand="TRIATEL" cc="lv" country="Latvia" operator="Telekom Baltija" status="Operational" + 04 bands="" cc="lv" country="Latvia" operator="Beta Telecom" status="" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Bite" cc="lv" country="Latvia" operator="Bite Latvija" status="Operational" 06 bands="" cc="lv" country="Latvia" operator="Rigatta" status="Reserved" 07 bands="MVNO" brand="MTS" cc="lv" country="Latvia" operator="Master Telecom" status="Operational" @@ -361,17 +432,20 @@ 09 bands="MVNO" brand="Camel Mobile" cc="lv" country="Latvia" operator="Camel Mobile" status="Operational" 00-99 248 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100/ LTE 1800 / LTE 2600" brand="EMT" cc="ee" country="Estonia" operator="Estonian Mobile Telecom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Elisa" cc="ee" country="Estonia" operator="Elisa Eesti" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE" brand="Tele 2" cc="ee" country="Estonia" operator="Tele 2 Eesti" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="EMT" cc="ee" country="Estonia" operator="Estonian Mobile Telecom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="ee" country="Estonia" operator="Elisa Eesti" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Tele 2" cc="ee" country="Estonia" operator="Tele 2 Eesti" status="Operational" 04 bands="MVNO" cc="ee" country="Estonia" operator="OY Top Connect" status="Operational" 05 bands="" cc="ee" country="Estonia" operator="AS Bravocom Mobiil" status="" 06 bands="UMTS 2100" cc="ee" country="Estonia" operator="Progroup Holding" status="Operational" + 07 bands="" cc="ee" country="Estonia" operator="Televõrgu AS" status="" 08 bands="MVNO" brand="VIVEX" cc="ee" country="Estonia" operator="VIVEX OU" status="Operational" + 09 bands="" cc="ee" country="Estonia" operator="Bravo Telecom" status="" + 71 bands="" cc="ee" country="Estonia" operator="Siseministeerium (Ministry of Interior)" status="" 00-99 250 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / TD-LTE 2600 (test)" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100/ TD-LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications" status="Operational" 04 bands="GSM 900" brand="Sibchallenge" cc="ru" country="Russian Federation" operator="Sibchallenge" status="Not operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA2000 450" brand="ETK" cc="ru" country="Russian Federation" operator="Yeniseytelecom" status="Operational" @@ -391,6 +465,7 @@ 20 bands="GSM 900 / GSM 1800" brand="Tele2" cc="ru" country="Russian Federation" operator="Tele2" status="Operational" 23 bands="GSM 900 / GSM 1800" brand="Mobicom - Novosibirsk" cc="ru" country="Russian Federation" operator="Mobicom - Novosibirsk" status="Not operational" 28 bands="GSM 900" brand="Beeline" cc="ru" country="Russian Federation" operator="Beeline" status="Not operational" + 32 bands="GSM 900 / GSM 1800" brand="Win Mobile" cc="ru" country="Russian Federation" operator="K-Telecom" status="Operational" 35 bands="GSM 1800" brand="MOTIV" cc="ru" country="Russian Federation" operator="EKATERINBURG-2000" status="Operational" 38 bands="GSM 900 / GSM 1800" brand="Tambov GSM" cc="ru" country="Russian Federation" operator="Central Telecommunication Company" status="Operational" 39 bands="GSM 900 / GSM 1800 /UMTS 2100" brand="Rostelecom" cc="ru" country="Russian Federation" operator="ROSTELECOM" status="Operational" @@ -399,14 +474,14 @@ 91 bands="GSM 1800" brand="Sonic Duo" cc="ru" country="Russian Federation" operator="Sonic Duo CJSC" status="Not operational" 92 bands="" cc="ru" country="Russian Federation" operator="Primtelefon" status="Not operational" 93 bands="" cc="ru" country="Russian Federation" operator="Telecom XXI" status="Not operational" - 99 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="ru" country="Russian Federation" operator="OJSC Vimpel-Communications" status="Operational" + 99 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Beeline" cc="ru" country="Russian Federation" operator="OJSC Vimpel-Communications" status="Operational" 00-99 255 01 bands="GSM 900 / GSM 1800 / CDMA 450" brand="MTS" cc="ua" country="Ukraine" operator="MTS Ukraine" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Beeline" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="Beeline" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Not operational" 03 bands="GSM 900 / GSM 1800" brand="Kyivstar" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Operational" 04 bands="CDMA 800" brand="IT" cc="ua" country="Ukraine" operator="Intertelecom" status="Operational" - 05 bands="GSM 1800" brand="Golden Telecom" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Operational" + 05 bands="GSM 1800" brand="Golden Telecom" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Not operational" 06 bands="GSM 900 / GSM 1800" brand="life:)" cc="ua" country="Ukraine" operator="Astelit" status="Operational" 07 bands="UMTS 2100" brand="3Mob" cc="ua" country="Ukraine" operator="3Mob (Ukrtelecom UMTS )" status="Operational" 21 bands="CDMA 800" brand="PEOPLEnet" cc="ua" country="Ukraine" operator="Telesystems of Ukraine" status="Operational" @@ -416,9 +491,11 @@ 257 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="velcom" cc="by" country="Belarus" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS" cc="by" country="Belarus" operator="Mobile TeleSystems" status="Operational" - 03 bands="CDMA2000" brand="DIALLOG" cc="by" country="Belarus" operator="BelCel" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="life:)" cc="by" country="Belarus" operator="Belarussian Telecommunications Network" status="Operational" - 501 brand="BelCel JV" cc="by" country="Belarus" + 03 bands="CDMA 450" brand="DIALLOG" cc="by" country="Belarus" operator="BelCel" status="Not operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="life:)" cc="by" country="Belarus" operator="Belarusian Telecommunications Network" status="Operational" + 05 bands="" cc="by" country="Belarus" operator="Beltelecom" status="" + 06 bands="" cc="by" country="Belarus" operator="Belorussian Cloud Technologies" status="" + 501 bands="" brand="BelCel JV" cc="by" country="Belarus" status="" 00-99 259 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Orange" cc="md" country="Moldova" operator="Orange Moldova" status="Operational" @@ -437,7 +514,7 @@ 06 bands="GSM 900/ GSM 1800 / UMTS 900 / UMTS 2100" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Operational" 07 bands="GSM 900 / UMTS 2100" brand="Netia" cc="pl" country="Poland" operator="Netia S.A." status="Operational" 08 bands="" cc="pl" country="Poland" operator="E-Telko Sp. z o.o." status="Not operational" - 09 brand="Lycamobile" cc="pl" country="Poland" operator="Lycamobile Sp. z o.o." status="Operational" + 09 bands="MVNO" brand="Lycamobile" cc="pl" country="Poland" operator="Lycamobile Sp. z o.o." status="Operational" 10 bands="UMTS 850" brand="Sferia" cc="pl" country="Poland" operator="Sferia S.A." status="Operational" 11 bands="CDMA2000 420" brand="Nordisk Polska" cc="pl" country="Poland" operator="Nordisk Polska Sp. z o.o." status="Operational" 12 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cyfrowy Polsat" cc="pl" country="Poland" operator="Cyfrowy Polsat S.A." status="Operational" @@ -446,52 +523,79 @@ 15 bands="LTE 1800" brand="CenterNet" cc="pl" country="Poland" operator="CenterNet S.A." status="Operational" 16 bands="GSM 1800 / LTE 1800" brand="Mobyland" cc="pl" country="Poland" operator="Mobyland Sp. z o.o." status="Operational" 17 bands="UMTS 900" brand="Aero2" cc="pl" country="Poland" operator="Aero 2 Sp. z o.o." status="Operational" + 18 bands="" brand="AMD Telecom" cc="pl" country="Poland" operator="AMD Telecom S.A." status="" + 19 bands="" brand="Teleena" cc="pl" country="Poland" operator="Teleena Holding BV" status="" + 20 bands="" brand="Mobile.Net" cc="pl" country="Poland" operator="Mobile.Net Sp. z o.o." status="" + 21 bands="" brand="Exteri" cc="pl" country="Poland" operator="Exteri Sp. z o.o." status="" + 22 bands="" brand="Arcomm" cc="pl" country="Poland" operator="Arcomm Sp. z o.o." status="" + 23 bands="" brand="Amicomm" cc="pl" country="Poland" operator="Amicomm Sp. z o.o." status="" + 24 bands="" brand="WideNet" cc="pl" country="Poland" operator="WideNet Sp. z o.o." status="" + 25 bands="" brand="BS&T" cc="pl" country="Poland" operator="Best Solutions & Technology Experience Sp. z o.o." status="" + 26 bands="" brand="ATE" cc="pl" country="Poland" operator="Advanced Technology & Experience Sp. z o.o." status="" + 27 bands="" brand="Intertelcom" cc="pl" country="Poland" operator="Intertelcom Sp. z o.o." status="" + 28 bands="" brand="PhoneNet" cc="pl" country="Poland" operator="PhoneNet Sp. z o.o." status="" + 29 bands="" brand="Interfonica" cc="pl" country="Poland" operator="Interfonica Sp. z o.o." status="" + 30 bands="" brand="GrandTel" cc="pl" country="Poland" operator="GrandTel Sp. z o.o." status="" + 31 bands="" brand="Phone IT" cc="pl" country="Poland" operator="Phone IT Sp. z o.o." status="" + 32 bands="MVNO" brand="Voxbone" cc="pl" country="Poland" operator="Voxbone mobile" status="Operational" + 33 bands="" brand="Truphone" cc="pl" country="Poland" operator="Truphone Poland Sp. z o.o." status="" 34 bands="UMTS 900" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" 98 cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Not Operational" 00-99 262 - 01 bands="LTE 800 / GSM 900 / GSM/LTE 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile" cc="de" country="Germany" operator="T-Mobile Deutschland GmbH" status="Operational" - 02 bands="LTE 800 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Operational" + 01 bands="GSM 900 / GSM 1800/ / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="de" country="Germany" status="Reserved" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Reserved" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Reserved" - 06 bands="LTE 800 / GSM 900 / GSM/LTE 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile" cc="de" country="Germany" status="Reserved" - 07 bands="LTE 800 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="O2" cc="de" country="Germany" operator="O2 (Germany) GmbH & Co. OHG" status="Operational" - 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="de" country="Germany" status="Reserved" - 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Vodafone" cc="de" country="Germany" status="Internal testing IOT" - 10 bands="GSM-R" cc="de" country="Germany" operator="Arcor AG & Co" status="Operational" - 11 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="de" country="Germany" status="Reserved" - 12 bands=""full" MVNO / MVNE" brand="Dolphin Telecom / sipgate" cc="de" country="Germany" operator="sipgate Wireless" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="Reserved" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="O2" cc="de" country="Germany" operator="Telefónica Germany GmbH & Co. oHG" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="de" country="Germany" operator="Telefónica Germany GmbH & Co. oHG" status="Reserved" + 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Operational" + 10 bands="GSM-R" cc="de" country="Germany" operator="DB Netz AG" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="de" country="Germany" operator="Telefónica Germany GmbH & Co. oHG" status="Reserved" + 12 bands=""full" MVNO / MVNE" brand="Dolphin Telecom" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" 13 bands="UMTS 2100" cc="de" country="Germany" operator="Mobilcom Multimedia" status="Not operational" 14 bands="UMTS 2100" cc="de" country="Germany" operator="Group 3G UMTS" status="Not operational" 15 bands="TD-SCDMA" brand="Airdata" cc="de" country="Germany" status="Operational" - 16 bands="GSM 900 / GSM 1800 / UMTS 2100 (MVNE)" brand="Telogic ex. Vistream" cc="de" country="Germany" status="" - 20 bands="GSM" brand="OnePhone" cc="de" country="Germany" operator="E-Plus" status="Operational" - 42 bands="GSM 1800" brand="27C3" cc="de" country="Germany" operator="Chaos Computer Club" status="Not operational" + 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telogic ex. Vistream" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="" + 17 bands="" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="" + 18 bands="MVNO" cc="de" country="Germany" operator="NetCologne" status="Operational" + 19 bands="" cc="de" country="Germany" operator="Inquam Deutschland" status="" + 20 bands="GSM" brand="OnePhone" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" + 33 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="simquadrat" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" + 41 bands="" cc="de" country="Germany" operator="First Telecom GmbH" status="" + 42 bands="GSM 1800" brand="CCC Event" cc="de" country="Germany" operator="Chaos Computer Club" status="Temporary operational" 43 bands="" brand="LYCA" cc="de" country="Germany" operator="Lycamobile" status="Operational" 60 bands="GSM-R 900" cc="de" country="Germany" operator="DB Telematik" status="Operational" - 76 bands="GSM 900" cc="de" country="Germany" operator="Siemens AG" status="Operational" - 77 bands="GSM 900" brand="E-Plus" cc="de" country="Germany" status="Operational" + 76 bands="GSM 900" cc="de" country="Germany" operator="Siemens AG" status="Not operational" + 77 bands="GSM 900" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" + 78 bands="" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="" + 79 bands="" cc="de" country="Germany" operator="ng4T GmbH" status="" 901 bands="" brand="Debitel" cc="de" country="Germany" status="Operational" - 92 bands="GSM 1800 / UMTS 2100" brand="Nash Technologies" cc="de" country="Germany" status="Operational" + 92 bands="GSM 1800 / UMTS 2100" cc="de" country="Germany" operator="Nash Technologies" status="Operational" 00-99 266 01 bands="GSM 900" brand="GibTel" cc="gi" country="Gibraltar (United Kingdom)" operator="Gibtelecom" status="Operational" - 06 bands="UMTS 2100" brand="CTS Mobile" cc="gi" country="Gibraltar (United Kingdom)" operator="CTS Gibraltar" status="Operational" - 09 brand="Shine" cc="gi" country="Gibraltar (United Kingdom)" operator="Eazi Telecom" status="Operational" + 06 bands="UMTS 2100" brand="CTS Mobile" cc="gi" country="Gibraltar (United Kingdom)" operator="CTS Gibraltar" status="Not operational" + 09 bands="GSM 1800 / UMTS 2100" brand="Shine" cc="gi" country="Gibraltar (United Kingdom)" operator="Eazitelecom" status="Operational" 00-99 268 - 01 bands="GSM 900 / GSM 1800 / UMTS 900/2100 / LTE 800/1800/2600" brand="Vodafone" cc="pt" country="Portugal" operator="Vodafone Portugal" status="Operacional" - 03 bands="GSM 900 / UMTS 2100 / LTE 800/1800/2600" brand="Optimus" cc="pt" country="Portugal" operator="Sonaecom – Serviços de Comunicações, S.A." status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 900/2100" brand="LycaMobile" cc="pt" country="Portugal" operator="MVNO" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800/1800/2600" brand="TMN" cc="pt" country="Portugal" operator="Telecomunicações Móveis Nacionais" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="pt" country="Portugal" operator="Vodafone Portugal" status="Operational" + 03 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="NOS" cc="pt" country="Portugal" operator="NOS Comunicações" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 2100" brand="LycaMobile" cc="pt" country="Portugal" operator="MVNO" status="Operational" + 05 bands="" cc="pt" country="Portugal" operator="Oniway - Inforcomunicaçôes, S.A." status="" + 06 brand="TMN" cc="pt" country="Portugal" 07 bands="GSM 900 / UMTS 2100" brand="Vectonemobile - Delightmobile" cc="pt" country="Portugal" operator="MVNO" status="Operational" 21 bands="CDMA2000 450" brand="Zapp" cc="pt" country="Portugal" operator="Zapp Portugal" status="Not operational" 00-99 270 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="LuxGSM" cc="lu" country="Luxembourg" operator="P&T Luxembourg" status="Operational" - 77 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tango" cc="lu" country="Luxembourg" operator="Tango SA" status="Operational" - 99 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="lu" country="Luxembourg" operator="Orange S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="POST" cc="lu" country="Luxembourg" operator="POST Luxembourg" status="Operational" + 02 bands="" cc="lu" country="Luxembourg" operator="MTX Connect S.a.r.l." status="" + 10 bands="" cc="lu" country="Luxembourg" operator="Blue Communications" status="" + 77 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tango" cc="lu" country="Luxembourg" operator="Tango SA" status="Operational" + 78 bands="" cc="lu" country="Luxembourg" operator="Interactive digital media GmbH" status="" + 99 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="lu" country="Luxembourg" operator="Orange S.A." status="Operational" 00-99 272 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="ie" country="Ireland" operator="Vodafone Ireland" status="Operational" @@ -506,7 +610,7 @@ 00-99 274 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Síminn" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Vodafone" cc="is" country="Iceland" operator="Og fjarskipti hf" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="is" country="Iceland" operator="Og fjarskipti hf" status="Operational" 03 bands="" brand="Vodafone" cc="is" country="Iceland" operator="Vodafone Iceland" status="Operational" 04 bands="GSM 1800" brand="Viking" cc="is" country="Iceland" operator="IMC Island ehf" status="Operational" 06 bands="" cc="is" country="Iceland" operator="Núll níu ehf" status="Reserved" @@ -518,7 +622,7 @@ 276 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="AMC" cc="al" country="Albania" operator="Albanian Mobile Communications" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="al" country="Albania" operator="Vodafone Albania" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Eagle Mobile" cc="al" country="Albania" operator="Eagle Mobile" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Eagle Mobile" cc="al" country="Albania" operator="Eagle Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Plus Communication" cc="al" country="Albania" operator="Plus Communication" status="Operational" 00-99 278 @@ -527,29 +631,34 @@ 77 bands="UMTS 2100" brand="Melita" cc="mt" country="Malta" operator="Melita Plc" status="Operational" 00-99 280 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cytamobile-Vodafone" cc="cy" country="Cyprus" operator="Cyprus Telecommunications Auth" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="cy" country="Cyprus" operator="Areeba Ltd" status="Operational" - 20 bands="GSM 900 / GSM 1800" brand="PrimeTel" cc="cy" country="Cyprus" operator="PrimeTel PLC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cytamobile-Vodafone" cc="cy" country="Cyprus" operator="Cyprus Telecommunications Authority" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="cy" country="Cyprus" operator="MTN Group" status="Operational" + 20 bands="MVNO" brand="PrimeTel" cc="cy" country="Cyprus" operator="PrimeTel PLC" status="Operational" + 22 bands="MVNO" brand="lemontel" cc="cy" country="Cyprus" operator="Lemontel Ltd" status="Operational" 00-99 282 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Geocell" cc="ge" country="Georgia" operator="Geocell Limited" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MagtiCom" cc="ge" country="Georgia" operator="Magticom GSM" status="Operational" - 03 bands="CDMA2000 450" brand="MagtiCom" cc="ge" country="Georgia" operator="Magtifix" status="Operational" + 03 bands="CDMA 450" brand="MagtiCom" cc="ge" country="Georgia" operator="Magtifix" status="Operational" 04 bands="GSM 1800" brand="Beeline" cc="ge" country="Georgia" operator="Mobitel LLC" status="Operational" - 05 bands="CDMA2000 800" brand="Silknet" cc="ge" country="Georgia" operator="Silknet CDMA" status="Operational" + 05 bands="CDMA 800" brand="Silknet" cc="ge" country="Georgia" operator="Silknet CDMA" status="Operational" + 06 bands="" cc="ge" country="Georgia" operator="JSC Compatel" status="" + 07 bands="" cc="ge" country="Georgia" operator="GlobalCell Ltd" status="" 00-99 283 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="am" country="Armenia" operator="ArmenTel" status="Operational" 04 bands="GSM 900 / UMTS 900" brand="Karabakh Telecom" cc="am" country="Armenia" operator="Karabakh Telecom" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="VivaCell-MTS" cc="am" country="Armenia" operator="K Telecom CJSC" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Orange" cc="am" country="Armenia" operator="Orange S.A." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="am" country="Armenia" operator="Orange S.A." status="Operational" 00-99 284 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="M-Tel" cc="bg" country="Bulgaria" operator="Mobiltel" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vivacom" cc="bg" country="Bulgaria" operator="BTC" status="Operational" - 04 bands="GSM 1800" brand="Undisclosed" cc="bg" country="Bulgaria" operator="Undisclosed" status="Reserved" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="GLOBUL" cc="bg" country="Bulgaria" operator="Cosmo Bulgaria Mobile" status="Operational" - 13 brand="MaxTelecom" cc="bg" country="Bulgaria" operator="Max Telecom LTD" status="Deploying" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="GLOBUL" cc="bg" country="Bulgaria" operator="Cosmo Bulgaria Mobile" status="Operational" + 07 bands="GSM-R" brand="НКЖИ" cc="bg" country="Bulgaria" operator="НАЦИОНАЛНА КОМПАНИЯ ЖЕЛЕЗОПЪТНА ИНФРАСТРУКТУРА" status="Operational" + 09 bands="" brand="COMPATEL LIMITED" cc="bg" country="Bulgaria" operator="COMPATEL LIMITED" status="Operational" + 11 bands="LTE 1800" brand="Bulsatcom" cc="bg" country="Bulgaria" operator="Undisclosed" status="Reserved" + 13 bands="LTE 1800" brand="Max Telecom" cc="bg" country="Bulgaria" operator="Max Telecom LTD" status="Operational" 00-99 286 01 bands="GSM 900 / UMTS 2100" brand="Turkcell" cc="tr" country="Turkey" operator="Turkcell Iletisim Hizmetleri A.S." status="Operational" @@ -558,23 +667,25 @@ 04 bands="GSM 1800" cc="tr" country="Turkey" operator="Aycell" status="Not operational" 00-99 288 - 01 bands="GSM 900" brand="Faroese Telecom" cc="fo" country="Faroe Islands (Denmark)" operator="Faroese Telecom" status="Operational" - 02 bands="GSM 900" brand="Vodafone" cc="fo" country="Faroe Islands (Denmark)" operator="Vodafone Faroe Islands" status="Operational" + 01 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Faroese Telecom" cc="fo" country="Faroe Islands (Denmark)" operator="Faroese Telecom" status="Operational" + 02 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="fo" country="Faroe Islands (Denmark)" operator="Vodafone Faroe Islands" status="Operational" + 03 bands="GSM 1800" cc="fo" country="Faroe Islands (Denmark)" operator="Edge Mobile Sp/F" status="Not operational" 00-99 289 - 67 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Aquafon" cc="ge" country="Abkhazia" operator="Aquafon JSC" status="Operational" - 68 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="A-Mobile" cc="ge" country="Abkhazia" operator="A-Mobile LLC" status="Operational" - 88 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="A-Mobile" cc="ge" country="Abkhazia" operator="A-Mobile LLC" status="Operational" + 67 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Aquafon" country="Abkhazia - GE-AB" operator="Aquafon JSC" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE Band 3/20" brand="A-Mobile" country="Abkhazia - GE-AB" operator="A-Mobile LLC" status="Operational" 00-99 290 - 01 bands="GSM 900" cc="gl" country="Greenland (Denmark)" operator="TELE Greenland A/S" status="Operational" + 01 bands="GSM 900 / UMTS 900 / LTE 800" cc="gl" country="Greenland (Denmark)" operator="TELE Greenland A/S" status="Operational" 00-99 292 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="PRIMA" cc="sm" country="San Marino" operator="San Marino Telecom" status="Operational" 00-99 293 + 31 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobitel" cc="si" country="Slovenia" operator="Mobitel D.D." status="Operational" 40 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Si.mobil" cc="si" country="Slovenia" operator="SI.MOBIL d.d." status="Operational" 41 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobitel" cc="si" country="Slovenia" operator="Mobitel D.D." status="Operational" + 51 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobitel" cc="si" country="Slovenia" operator="Mobitel D.D." status="Operational" 64 bands="UMTS 2100" brand="T-2" cc="si" country="Slovenia" operator="T-2 d.o.o." status="Operational" 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Tušmobil" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" 00-99 @@ -597,37 +708,57 @@ 04 bands="GSM 900 / UMTS 2100" brand="T-Mobile" cc="me" country="Montenegro" operator="T-Mobile Montenegro" status="Operational" 00-99 302 - 220 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="Telus" cc="ca" country="Canada" operator="Koodo Mobility and Telus Mobility" status="Operational" + 220 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="Telus" cc="ca" country="Canada" operator="Koodo Mobility, Public Mobile and Telus Mobility" status="Operational" 221 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" + 222 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" + 250 bands="" brand="ALO" cc="ca" country="Canada" operator="ALO Mobile Inc." status="" 270 bands="UMTS 1700 / LTE 1700" brand="EastLink" cc="ca" country="Canada" operator="EastLink" status="Operational" 290 bands="iDEN 900" brand="Airtel Wireless" cc="ca" country="Canada" operator="Airtel Wireless" status="Operational" 320 bands="UMTS 1700" brand="Mobilicity" cc="ca" country="Canada" operator="DAVE Wireless" status="Operational" + 340 bands="" brand="Execulink" cc="ca" country="Canada" operator="Execulink" status="" 350 bands="GSM 850" brand="FIRST" cc="ca" country="Canada" operator="FIRST Networks Operations" status="Operational" 360 bands="iDEN 800" brand="MiKe" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" - 361 bands="CDMA2000 800 / CDMA2000 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" + 361 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 370 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="Fido" cc="ca" country="Canada" operator="Fido Solutions (Rogers Wireless)" status="Operational" 380 bands="UMTS 850 / UMTS 1900" brand="DMTS" cc="ca" country="Canada" operator="Dryden Mobility" status="Operational" + 390 bands="" brand="DMTS" cc="ca" country="Canada" operator="Dryden Mobility" status="" + 480 bands="" brand="SSi Connexions" cc="ca" country="Canada" operator="SSi Connexions" status="" 490 bands="UMTS 1700" brand="WIND Mobile" cc="ca" country="Canada" operator="Globalive Communications" status="Operational" 500 bands="UMTS 1700" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="Operational" 510 bands="UMTS 1700" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="Operational" - 610 bands="UMTS 850 / UMTS 1900 /LTE 1700 / LTE 2600" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility and Virgin Mobile Canada" status="Operational" + 520 bands="" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="" + 530 bands="GSM" brand="Keewatinook Okimakanak Mobile" cc="ca" country="Canada" operator="Keewatinook Okimacinac" status="Operational" + 560 bands="" brand="Lynx Mobility" cc="ca" country="Canada" operator="Lynx Mobility" status="" + 570 bands="" brand="LightSquared" cc="ca" country="Canada" operator="LightSquared" status="" + 590 bands="" brand="Quadro Communication" cc="ca" country="Canada" operator="Quadro Communication" status="" + 610 bands="UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility and Virgin Mobile Canada" status="Operational" 620 bands="GSM 1900 / UMTS 1900" brand="ICE Wireless" cc="ca" country="Canada" operator="ICE Wireless" status="Operational" - 640 bands="CDMA2000 800 / CDMA2000 1900" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" + 630 bands="" brand="Aliant Mobility" cc="ca" country="Canada" operator="Aliant Mobility" status="" + 640 bands="CDMA 800 / CDMA 1900" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" 652 bands="CDMA2000" cc="ca" country="Canada" operator="BC Tel Mobility (Telus)" status="Operational" - 653 bands="CDMA2000 800 / CDMA2000 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" - 655 bands="CDMA2000 800 / CDMA2000 1900" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" + 653 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" + 655 bands="CDMA 800 / CDMA 1900" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" 656 bands="CDMA2000 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="TBay" cc="ca" country="Canada" operator="Thunder Bay Telephone Mobility" status="Operational" - 657 bands="CDMA2000 800 / CDMA2000 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" + 657 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 660 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" - 680 bands="CDMA2000 800 / CDMA2000 1900 / UMTS 850 / UMTS 1900" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" + 670 bands="" brand="CityTel Mobility" cc="ca" country="Canada" operator="CityTel Mobility" status="" + 680 bands="CDMA 850 / TDD-LTE 2600" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" 690 bands="UMTS 850 / UMTS 1900" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" 701 bands="CDMA2000" cc="ca" country="Canada" operator="MB Tel Mobility" status="Operational" 702 bands="CDMA2000" cc="ca" country="Canada" operator="MT&T Mobility (Aliant)" status="Operational" 703 bands="CDMA2000" cc="ca" country="Canada" operator="New Tel Mobility (Aliant)" status="Operational" 710 bands="Satellite CDMA" brand="Globalstar" cc="ca" country="Canada" status="Operational" 720 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Rogers Wireless" cc="ca" country="Canada" operator="Rogers Communications" status="Operational" - 780 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" + 730 bands="" brand="TerreStar Solutions" cc="ca" country="Canada" operator="TerreStar Solutions" status="" + 740 bands="" brand="Shaw Telecom G.P." cc="ca" country="Canada" operator="Shaw Telecom G.P." status="" + 750 bands="" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="" + 760 bands="" brand="Public Mobile Inc." cc="ca" country="Canada" operator="Public Mobile Inc." status="" + 770 bands="" brand="Rural Com" cc="ca" country="Canada" operator="Rural Com" status="" + 780 bands="UMTS 850 / UMTS 1900 / LTE 2100" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" + 790 bands="" cc="ca" country="Canada" operator="NetSet Communications" status="" + 860 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" 880 bands="UMTS 850 / UMTS 1900" brand="Bell / Telus / SaskTel" cc="ca" country="Canada" operator="Shared Telus, Bell, and SaskTel" status="Operational" + 940 bands="" brand="Wightman Telecom" cc="ca" country="Canada" operator="Wightman Telecom" status="" 000-999 308 01 bands="GSM 900" brand="Ameris" cc="pm" country="Saint Pierre and Miquelon (France)" operator="St. Pierre-et-Miquelon Télécom" status="Operational" @@ -644,7 +775,7 @@ 020 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Union Telephone Company" status="Operational" 026 bands="GSM 1900 / UMTS 1700 / UMTS 1900" brand="T-Mobile" cc="us" country="United States of America" status="Operational" 030 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 032 bands="CDMA2000 1900 / LTE 700" brand="IT&E Wireless" cc="gu" country="Guam (United States of America)" operator="IT&E Overseas, Inc" status="Operational" + 032 bands="CDMA 1900 / LTE 700" brand="IT&E Wireless" cc="gu" country="Guam (United States of America)" operator="IT&E Overseas, Inc" status="Operational" 033 bands="" cc="gu" country="Guam (United States of America)" operator="Guam Telephone Authority" status="" 034 bands="" brand="Airpeak" cc="us" country="United States of America" status="Operational" 040 bands="GSM 1900" brand="Concho" cc="us" country="United States of America" operator="Concho Cellular Telephone Co., Inc." status="Operational" @@ -660,7 +791,7 @@ 110 bands="GSM 850" brand="PTI Pacifica" cc="us" country="United States of America" operator="PTI Pacifica Inc." status="Operational" 120 bands="CDMA2000 1900" brand="Sprint" cc="us" country="United States of America" status="Operational" 140 bands="GSM 850 / GSM 1900" brand="mPulse" cc="gu" country="Guam (United States of America)" operator="GTA Wireless" status="Operational" - 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" + 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" 160 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 170 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 180 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="West Central" cc="us" country="United States of America" operator="West Central Wireless" status="Operational" @@ -682,7 +813,7 @@ 330 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" 340 bands="GSM 1900" brand="Westlink" cc="us" country="United States of America" operator="Westlink Communications" status="Operational" 350 bands="GSM 1900" cc="us" country="United States of America" operator="Carolina Phone" status="Not operational" - 370 bands="CDMA2000 850" brand="Docomo" cc="gu" country="Guam (United States of America)" operator="NTT Docomo Pacific" status="Not operational" + 370 bands="CDMA 850" brand="Docomo" cc="gu" country="Guam (United States of America)" operator="NTT Docomo Pacific" status="Not operational" 380 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" 390 bands="GSM 850" brand="Cellular One of East Texas" cc="us" country="United States of America" operator="TX-11 Acquisition, LLC" status="Operational" 400 bands="GSM 1900" brand="i CAN_GSM" cc="us" country="United States of America" operator="Wave Runner LLC (Guam)" status="Operational" @@ -703,7 +834,7 @@ 560 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 570 bands="GSM 1900" brand="Cellular One" cc="us" country="United States of America" operator="MTPCS, LLC" status="Operational" 580 bands="" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" - 59 bands="CDMA2000" brand="Cellular One" cc="bm" country="Bermuda" status="Operational" + 59 bands="CDMA" brand="Cellular One" cc="bm" country="Bermuda" status="Operational" 590 bands="GSM 850 / GSM 1900" brand="Alltel" cc="us" country="United States of America" operator="Alltel Communications Inc" status="Operational" 610 bands="GSM 1900" brand="Epic Touch" cc="us" country="United States of America" operator="Elkhart Telephone Co." status="Operational" 620 bands="GSM 1900" brand="Coleman County Telecom" cc="us" country="United States of America" operator="Coleman County Telecommunications" status="Operational" @@ -719,7 +850,7 @@ 750 bands="CDMA2000 850 / CDMA2000 1900 / LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="Appalachian Wireless" status="Operational" 760 bands="" brand="Panhandle" cc="us" country="United States of America" operator="Panhandle Telecommunications Systems Inc." status="Operational" 770 bands="GSM 1900" brand="i wireless" cc="us" country="United States of America" operator="Iowa Wireless Services" status="Operational" - 780 bands="" cc="us" country="United States of America" operator="Airlink PCS" status="Not operational" + 780 bands="GSM 1900" cc="us" country="United States of America" operator="Airlink PCS" status="Not operational" 790 bands="GSM 1900" brand="PinPoint" cc="us" country="United States of America" operator="PinPoint Communications" status="Operational" 800 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 830 bands="GSM 850" brand="Caprock" cc="us" country="United States of America" operator="Caprock Cellular" status="Operational" @@ -767,11 +898,15 @@ 480 bands="LTE 700 MHz C Block (4G LTE Network)" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 481 cc="us" country="United States of America" 490 bands="TDD-LTE (Band 41)" brand="Sprint Corporation" cc="us" country="United States of America" operator="Sprint" status="Operational" + 580 cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" 660 bands="CDMA2000 1900 / CDMA 2000 LTE/AWS 1700" brand="metroPCS" cc="us" country="United States of America" operator="metroPCS" status="Operational" 870 bands="" brand="Boost" cc="us" country="United States of America" operator="Boost Mobile" status="Operational" 960 bands="GSM 1900" brand="Lycamobile" cc="us" country="United States of America" operator="Lyca Technology Solutions" status="Operational" 970 bands="LTE/AWS 1700" brand="Big River Broadband" cc="us" country="United States of America" operator="Big River Broadband, LLC" status="Operational" 000-999 +312 + 590 bands="Band 7 FDD LTE 2600 MHz" brand="NMU" cc="us" country="United States of America" operator="Northern Michigan University" status="Operational" + 000-999 313 100 bands="700 MHz Public Safety Broadband" brand="700 MHz Public Safety Broadband" cc="us" country="United States of America" status="" 101 cc="us" country="United States of America" @@ -783,49 +918,62 @@ 330 00 bands="PCS 1900" brand="Open Mobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" 110 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="Claro Puerto Rico" cc="pr" country="Puerto Rico" operator="América Móvil" status="Operational" - 120 bands="LTE 700" brand="Open Mobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" + 120 bands="LTE 700" brand="tmobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" 00-99 334 - 01 bands="iDEN 800" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" - 02 bands="TDMA 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="Telcel" cc="mx" country="Mexico" operator="América Móvil" status="Operational" - 03 bands="CDMA2001 1900 / CDMA2001 800 / GSM 1900 / UMTS 850" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles (formerly Pegaso Comunicaciones y Sistemas)" status="Operational" - 05 bands="GSM 850 / GSM 1900" brand="Iusacell" cc="mx" country="Mexico" operator="Iusacell" status="Operational" - 09 bands="UMTS 1700." brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" - 00-99 + 001 bands="" cc="mx" country="Mexico" operator="Comunicaciones Digitales Del Norte, S.A. de C.V." status="" + 010 bands="iDEN 800" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" + 020 bands="TDMA 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="Telcel" cc="mx" country="Mexico" operator="América Móvil" status="Operational" + 030 bands="CDMA2000 800 / CDMA2000 1900 / GSM 1900 / UMTS 850" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles" status="Operational" + 040 bands="CDMA2000 800 / CDMA2000 1900" brand="Iusacell / Unefon" cc="mx" country="Mexico" operator="Iusacell / Unefon" status="Operational" + 050 bands="GSM 850 / GSM 1900" brand="Iusacell" cc="mx" country="Mexico" operator="Iusacell" status="Operational" + 060 bands="" cc="mx" country="Mexico" operator="Servicios de Acceso Inalambrico, S.A. de C.V." status="" + 066 bands="" cc="mx" country="Mexico" operator="Telefonos de México, S.A.B. de C.V." status="" + 070 bands="" cc="mx" country="Mexico" operator="Unefon" status="" + 080 bands="" cc="mx" country="Mexico" operator="Unefon" status="" + 090 bands="UMTS 1700" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" + 000-999 338 020 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not Operational" 050 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="tc" country="Turks and Caicos Islands" operator="Digicel (Turks & Caicos) Limited" status="Operational" - 180 bands="GSM 850 / GSM 1900 / WCDMA 850" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" + 110 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="" + 180 bands="GSM 850 / GSM 1900 / UMTS 850" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" 000-999 340 01 bands="GSM 900" brand="Orange" cc="mq" country="Martinique (France)" operator="Orange Caraïbe Mobiles" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Outremer" cc="mq" country="Martinique (France)" operator="Outremer Telecom" status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="Only" cc="mq" country="Martinique (France)" operator="Outremer Telecom" status="Operational" 03 bands="GSM 900 / GSM 1800" brand="Telcell" cc="gp" country="Guadeloupe (France)" operator="Saint Martin et Saint Barthelemy Telcell Sarl" status="Operational" 08 bands="GSM 900 / GSM 1800" brand="Dauphin" cc="gp" country="Guadeloupe (France)" operator="Dauphin Telecom" status="Operational" + 10 bands="" cc="gp" country="Guadeloupe (France)" operator="Guadeloupe Téléphone Mobile" status="" + 11 bands="" cc="gf" country="French Guiana (France)" operator="Guyane Téléphone Mobile" status="" + 12 bands="" cc="mq" country="Martinique (France)" operator="Martinique Téléphone Mobile" status="" 20 bands="GSM 900" brand="Digicel" cc="mq" country="Martinique (France)" operator="DIGICEL Antilles Française Guyane" status="Operational" 00-99 342 - 600 bands="GSM 1900" brand="LIME" cc="bb" country="Barbados" operator="LIME (formerly known as Cable & Wireless)" status="Operational" - 750 bands="GSM 900 / GSM 1800" brand="Digicel" cc="bb" country="Barbados" operator="Digicel (Barbados) Limited" status="Operational" + 600 bands="GSM 1900 / UMTS" brand="LIME" cc="bb" country="Barbados" operator="LIME (formerly known as Cable & Wireless)" status="Operational" + 750 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="bb" country="Barbados" operator="Digicel (Barbados) Limited" status="Operational" 820 bands="" cc="bb" country="Barbados" operator="Sunbeach Communications" status="Reserved" 000-999 344 030 bands="GSM 1900" brand="APUA" cc="ag" country="Antigua and Barbuda" operator="Antigua Public Utilities Authority" status="Operational" - 050 bands="GSM 900 / GSM 1900 / LTE 700" brand="Digicel" cc="ag" country="Antigua and Barbuda" operator="Antigua Wireless Ventures Limited" status="Operational" - 920 bands="GSM 850 / GSM 1800/ GSM 1900" brand="LIME" cc="ag" country="Antigua and Barbuda" operator="Cable & Wireless Caribbean Cellular (Antigua) Limited" status="Operational" + 050 bands="GSM 900 / GSM 1900 / UMTS 850 / LTE 700" brand="Digicel" cc="ag" country="Antigua and Barbuda" operator="Antigua Wireless Ventures Limited" status="Operational" + 920 bands="GSM 850 / GSM 1800 / GSM 1900" brand="LIME" cc="ag" country="Antigua and Barbuda" operator="Cable & Wireless Caribbean Cellular (Antigua) Limited" status="Operational" + 930 bands="" cc="ag" country="Antigua and Barbuda" operator="AT&T Wireless" status="" 000-999 346 - 050 bands="GSM 900 / GSM 1800" brand="Digicel" cc="ky" country="Cayman Islands (United Kingdom)" operator="Digicel Cayman Ltd." status="Operational" + 050 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Digicel" cc="ky" country="Cayman Islands (United Kingdom)" operator="Digicel Cayman Ltd." status="Operational" 140 bands="GSM 850 / GSM 1900" brand="LIME" cc="ky" country="Cayman Islands (United Kingdom)" operator="Cable & Wireless (Cayman Islands) Limited" status="Operational" 000-999 348 - 170 bands="GSM 850 / GSM 1900 / HSPA+ (4G) 850/1900" brand="LIME" cc="vg" country="British Virgin Islands" operator="Cable & Wireless" status="Operational" + 170 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="LIME" cc="vg" country="British Virgin Islands" operator="Cable & Wireless" status="Operational" + 370 bands="" cc="vg" country="British Virgin Islands" operator="BVI Cable TV Ltd" status="" 570 bands="GSM 900 / GSM 1900" brand="CCT Boatphone" cc="vg" country="British Virgin Islands" operator="Caribbean Cellular Telephone" status="Operational" - 770 bands="GSM 1800 / GSM 1900" brand="Digicel" cc="vg" country="British Virgin Islands" operator="Digicel (BVI) Limited" status="Operational" + 770 bands="GSM 1800 / GSM 1900 / UMTS" brand="Digicel" cc="vg" country="British Virgin Islands" operator="Digicel (BVI) Limited" status="Operational" 000-999 350 + 00 bands="GSM 1900 / UMTS 850" brand="CellOne" cc="bm" country="Bermuda" operator="Bermuda Digital Communications Ltd." status="Operational" 01 bands="GSM 1900" brand="Digicel Bermuda" cc="bm" country="Bermuda" operator="Telecommunications (Bermuda & West Indies) Ltd" status="Reserved" - 02 bands="GSM 1900" brand="Mobility" cc="bm" country="Bermuda" operator="M3 Wireless" status="Operational" + 02 bands="GSM 1900 / UMTS" brand="Mobility" cc="bm" country="Bermuda" operator="M3 Wireless" status="Operational" 00-99 352 030 bands="GSM 900 / GSM 1800" brand="Digicel" cc="gd" country="Grenada" operator="Digicel Grenada Ltd." status="Operational" @@ -856,15 +1004,15 @@ 95 bands="CDMA2000 850" brand="MIO" cc="an" country="Former Netherlands Antilles (Kingdom of the Netherlands)" operator="E.O.C.G. Wireless" status="Operational" 00-99 363 - 01 bands="GSM 900 / GSM 1900 / TDMA 800" brand="SETAR" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Servicio di Telecomunicacion di Aruba" status="Operational" - 02 bands="GSM 900 / GSM 1800 / HSPA+ 2100" brand="Digicel" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Digicel Aruba" status="Operational" + 01 bands="GSM 900 / GSM 1800 / GSM 1900 / UMTS 2100 / LTE 1800 / TDMA 800" brand="SETAR" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Servicio di Telecomunicacion di Aruba" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Digicel Aruba" status="Operational" 00-99 364 39 bands="GSM 850 / GSM 1900 / UMTS 850" brand="BaTelCo" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd" status="Operational" 00-99 365 010 bands="" cc="ai" country="Anguilla" operator="Weblinks Limited" status="Operational" - 840 bands="" cc="ai" country="Anguilla" operator="Cable & Wireless" status="Operational" + 840 bands="GSM 850 / UMTS" brand="LIME" cc="ai" country="Anguilla" operator="Cable & Wireless" status="Operational" 000-999 366 020 bands="GSM 900 / GSM 1900" brand="Digicel" cc="dm" country="Dominica" operator="Digicel Group Limited" status="Operational" @@ -875,9 +1023,9 @@ 00-99 370 01 bands="GSM 900 / GSM 1800 / 1900 / UMTS 900 / LTE 1800" brand="Orange" cc="do" country="Dominican Republic" operator="Orange Dominicana" status="Operational" - 02 bands="CDMA2000 1900 / GSM 850 / GSM 1900 / UMTS 850" brand="Claro" cc="do" country="Dominican Republic" operator="Compañía Dominicana de Teléfonos, C por" status="Operational" - 03 bands="AMPS / IS-95A 800 / CDMA2000 1900 / LTE 1900" brand="Tricom" cc="do" country="Dominican Republic" operator="Tricom S.A." status="Operational" - 04 bands="CDMA2000 1900 / GSM 1900" brand="Viva" cc="do" country="Dominican Republic" operator="Trilogy Dominicana, S.A." status="Operational" + 02 bands="CDMA 1900 / GSM 850 / GSM 1900 / UMTS 850" brand="Claro" cc="do" country="Dominican Republic" operator="Compañía Dominicana de Teléfonos, C por" status="Operational" + 03 bands="AMPS / IS-95A 800 / CDMA 1900 / LTE 1900" brand="Tricom" cc="do" country="Dominican Republic" operator="Tricom S.A." status="Operational" + 04 bands="CDMA 1900 / GSM 1900" brand="Viva" cc="do" country="Dominican Republic" operator="Trilogy Dominicana, S.A." status="Operational" 00-99 372 01 bands="GSM 850" brand="Voila" cc="ht" country="Haiti" operator="Communication Cellulaire d'Haiti S.A." status="Operational" @@ -885,7 +1033,7 @@ 03 bands="GSM 900" brand="Natcom" cc="ht" country="Haiti" operator="Telecommunication S.A." status="Operational" 00-99 374 - 12 bands="GSM 850 / GSM 1900" brand="bmobile" cc="tt" country="Trinidad and Tobago" operator="TSTT" status="Operational" + 12 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="bmobile" cc="tt" country="Trinidad and Tobago" operator="TSTT" status="Operational" 130 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="Digicel" cc="tt" country="Trinidad and Tobago" operator="Digicel (Trinidad & Tobago) Limited" status="Operational" 00-99 376 @@ -893,21 +1041,21 @@ 352 bands="UMTS 850" brand="Islandcom" cc="tc" country="Turks and Caicos Islands" operator="Islandcom Telecommunications" status="Operational" 000-999 400 - 01 bands="GSM 900 / GSM 1800/ UMTS 2100" brand="Azercell" cc="az" country="Azerbaijan" status="Operational" - 02 bands="GSM 900 / GSM 1800/ UMTS 2100" brand="Bakcell" cc="az" country="Azerbaijan" status="Operational" - 03 bands="CDMA2000" brand="FONEX" cc="az" country="Azerbaijan" operator="CATEL" status="Operational" + 01 bands="GSM 900 / GSM 1800/ UMTS 2100 / LTE 1800" brand="Azercell" cc="az" country="Azerbaijan" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Bakcell" cc="az" country="Azerbaijan" status="Operational" + 03 bands="CDMA" brand="FONEX" cc="az" country="Azerbaijan" operator="CATEL" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Nar Mobile" cc="az" country="Azerbaijan" operator="Azerfon" status="Operational" 00-99 401 01 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kz" country="Kazakhstan" operator="KaR-Tel LLP" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Kcell" cc="kz" country="Kazakhstan" operator="GSM Kazakhstan Ltd" status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="Kcell" cc="kz" country="Kazakhstan" operator="Kcell JSC" status="Operational" 07 bands="CDMA2000 800" brand="Dalacom" cc="kz" country="Kazakhstan" operator="Altel" status="Operational" 08 bands="CDMA2000 800 / CDMA2000 450" brand="Kazakhtelecom" cc="kz" country="Kazakhstan" status="Operational" - 77 bands="GSM 900 / GSM 1800" brand="Tele2.kz" cc="kz" country="Kazakhstan" status="Operational" + 77 bands="GSM 900 / GSM 1800" brand="Tele2.kz" cc="kz" country="Kazakhstan" operator="MTS" status="Operational" 00-99 402 - 11 bands="GSM 900" brand="B-Mobile" cc="bt" country="Bhutan" operator="B-Mobile / Bhutan Telecom Ltd." status="Operational" - 77 bands="GSM 900 / GSM 1800" brand="TashiCell" cc="bt" country="Bhutan" operator="Tashi InfoComm Limited" status="Operational" + 11 bands="GSM 900 / UMTS 850 / UMTS 2100 / LTE 1800" brand="B-Mobile" cc="bt" country="Bhutan" operator="B-Mobile / Bhutan Telecom Ltd." status="Operational" + 77 bands="GSM 900 / GSM 1800 / UMTS" brand="TashiCell" cc="bt" country="Bhutan" operator="Tashi InfoComm Limited" status="Operational" 00-99 404 01 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Haryana" status="Operational" @@ -915,12 +1063,12 @@ 03 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 04 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Delhi & NCR" status="Operational" 05 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Gujarat" status="Operational" - 07 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 07 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 09 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Assam" status="Operational" 10 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Delhi & NCR" status="Operational" 11 bands="GSM 900 / GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Delhi & NCR" status="Operational" 12 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Haryana" status="Operational" - 13 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 13 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 14 bands="GSM 900 / GSM 1800" brand="IDEA" cc="in" country="India" operator="Punjab" status="Operational" 15 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" 16 bands="GSM 900" brand="Airtel" cc="in" country="India" operator="North East" status="Operational" @@ -941,7 +1089,7 @@ 36 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Bihar & Jharkhand" status="Operational" 37 bands="GSM 900 / UMTS 2100" brand="Aircel" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" 38 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Assam" status="Operational" - 40 brand="AirTel" cc="in" country="India" operator="Chennai" status="Operational" + 40 bands="" brand="AirTel" cc="in" country="India" operator="Chennai" status="Operational" 41 bands="GSM 900" brand="Aircel" cc="in" country="India" operator="Chennai" status="Operational" 42 bands="GSM 900" brand="Aircel" cc="in" country="India" operator="Tamil Nadu" status="Operational" 43 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Tamil Nadu" status="Operational" @@ -949,7 +1097,7 @@ 45 bands="GSM" brand="Airtel" cc="in" country="India" operator="Karnataka" status="Operational" 46 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Kerala" status="Operational" 48 bands="GSM 900" brand="Dishnet Wireless" cc="in" country="India" operator="" status="Operational" - 49 bands="GSM 900" brand="Airtel" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 49 bands="GSM 900" brand="Airtel" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 50 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="North East" status="Operational" 51 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 52 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Orissa" status="Operational" @@ -967,23 +1115,23 @@ 67 bands="GSM 900 / UMTS 2100" brand="Reliance" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" 68 bands="GSM 900 / UMTS 2100" brand="DOLPHIN" cc="in" country="India" operator="Delhi & NCR" status="Operational" 69 bands="GSM 900 / UMTS 2100" brand="DOLPHIN" cc="in" country="India" operator="Mumbai" status="Operational" - 70 brand="AirTel" cc="in" country="India" operator="Rajasthan" status="Operational" + 70 bands="" brand="AirTel" cc="in" country="India" operator="Rajasthan" status="Operational" 71 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Karnataka (Bangalore)" status="Operational" 72 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Kerala" status="Operational" - 73 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 73 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 74 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="West Bengal" status="Operational" 75 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Bihar" status="Operational" 76 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Orissa" status="Operational" 77 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="North East" status="Operational" 78 bands="GSM 900 / UMTS 2100" brand="Idea Cellular Ltd" cc="in" country="India" operator="Madhya Pradesh & Chattishgarh" status="Operational" 79 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Andaman Nicobar" status="Operational" - 80 bands="GSM900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Tamil Nadu" status="Operational" + 80 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Tamil Nadu" status="Operational" 81 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Kolkata" status="Operational" 82 bands="" brand="Idea" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 83 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="Kolkata" status="Operational" 84 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Chennai" status="Operational" 85 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="West Bengal" status="Operational" - 86 bands="" brand="Vodafone IN" cc="in" country="India" operator="Karnataka" status="Operational" + 86 bands="GSM 900 / UMTS 2100" brand="Vodafone IN" cc="in" country="India" operator="Karnataka" status="Operational" 87 bands="" brand="IDEA" cc="in" country="India" operator="Rajasthan" status="Operational" 88 bands="" brand="Vodafone IN" cc="in" country="India" operator="Vodafone Punjab" status="Operational" 89 bands="" brand="Idea" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" @@ -991,15 +1139,15 @@ 91 bands="GSM 900" brand="AIRCEL" cc="in" country="India" operator="Kolkata" status="Operational" 92 bands="GSM 1800 / UMTS 2100" brand="AirTel" cc="in" country="India" operator="Mumbai" status="Operational" 93 bands="GSM 1800" brand="AirTel" cc="in" country="India" operator="Madhya Pradesh" status="Operational" - 94 brand="AirTel" cc="in" country="India" operator="Tamil Nadu" status="Operational" + 94 bands="" brand="AirTel" cc="in" country="India" operator="Tamil Nadu" status="Operational" 95 bands="GSM 1800" brand="AirTel" cc="in" country="India" operator="Kerala" status="Operational" 96 bands="GSM 1800" brand="AirTel" cc="in" country="India" operator="Haryana" status="Operational" - 97 brand="AirTel" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" - 98 brand="AirTel" cc="in" country="India" operator="Gujarat" status="Operational" + 97 bands="" brand="AirTel" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" + 98 bands="" brand="AirTel" cc="in" country="India" operator="Gujarat" status="Operational" 00-99 405 - 01 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="Andhra Pradesh" status="Operational" - 025 bands="CDMA 2000 / GSM 1800 / UMTS 2100" brand="TATA DOCOMO" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 01 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" + 025 bands="CDMA 2000 / GSM 1800 / UMTS 2100" brand="TATA DOCOMO" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 026 bands="CDMA 2000" brand="TATA DOCOMO" cc="in" country="India" operator="Assam" status="Operational" 027 bands="CDMA 2000 / GSM 1800" brand="TATA DOCOMO" cc="in" country="India" operator="Bihar/Jharkhand" status="Operational" 028 bands="CDMA 2000 / GSM 1800" brand="TATA DOCOMO" cc="in" country="India" operator="Chennai" status="Operational" @@ -1048,7 +1196,7 @@ 55 bands="GSM 900 / UTMS 2100" brand="Airtel" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" 56 bands="GSM 900 / GSM 1800" brand="AirTel" cc="in" country="India" operator="Assam" status="Operational" 66 bands="GSM 900 / GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" - 67 brand="Vodafone IN" cc="in" country="India" operator="West Bengal" status="Operational" + 67 bands="" brand="Vodafone IN" cc="in" country="India" operator="West Bengal" status="Operational" 70 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Bihar & Jharkhand" status="Operational" 750 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" 751 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Assam" status="Operational" @@ -1059,7 +1207,7 @@ 756 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" 799 bands="GSM 900 / GSM 1800" brand="IDEA" cc="in" country="India" operator="Mumbai" status="Operational" 800 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Delhi & NCR" status="Operational" - 801 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 801 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 802 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Gujarat" status="Not operational" 803 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Karnataka" status="Operational" 804 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Maharashtra & Goa" status="Operational" @@ -1072,14 +1220,14 @@ 811 bands="GSM" brand="AIRCEL" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" 812 bands="GSM" brand="AIRCEL" cc="in" country="India" operator="Punjab" status="Not operational" 818 bands="GSM" brand="Uninor" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" - 819 bands="GSM" brand="Uninor" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 819 bands="GSM" brand="Uninor" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 820 bands="GSM 1800" brand="Uninor" cc="in" country="India" operator="Karnataka" status="Operational" 821 bands="GSM 1800" brand="Uninor" cc="in" country="India" operator="Kerala" status="Operational" 822 bands="GSM" brand="Uninor" cc="in" country="India" operator="Kolkata" status="Operational" 824 bands="GSM 1800" brand="Videocon Datacom" cc="in" country="India" operator="Assam" status="Reserved" 827 bands="GSM 1800" brand="Videocon Datacom" cc="in" country="India" operator="Gujarat" status="Operational" 834 bands="GSM 1800" brand="Videocon Datacom" cc="in" country="India" operator="Madhya Pradesh" status="Reserved" - 840 bands="4G" brand="Jio" cc="in" country="India" operator="West Bengal" status="Launching Soon" + 840 bands="" brand="Jio" cc="in" country="India" operator="West Bengal" status="Reserved" 844 bands="GSM" brand="Uninor" cc="in" country="India" operator="Delhi & NCR" status="Not operational" 845 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Assam" status="Operational" 846 bands="GSM 1800 / UTMS 2100" brand="IDEA" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" @@ -1090,75 +1238,80 @@ 851 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Punjab" status="Operational" 852 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Tamil Nadu" status="Operational" 853 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="West Bengal" status="Operational" - 854 bands="4G" brand="Jio" cc="in" country="India" operator="Andra Pradesh" status="Launching Soon" - 855 bands="4G" brand="Jio" cc="in" country="India" operator="Assam" status="Launching Soon" - 856 bands="4G" brand="Jio" cc="in" country="India" operator="Bhiar" status="Launching Soon" - 857 bands="4G" brand="Jio" cc="in" country="India" operator="Gujarat" status="Launching Soon" - 858 bands="4G" brand="Jio" cc="in" country="India" operator="Haryana" status="Launching Soon" - 859 bands="4G" brand="Jio" cc="in" country="India" operator="Himachal Pradesh" status="Launching Soon" - 860 bands="4G" brand="Jio" cc="in" country="India" operator="Jammu Kashmir" status="Launching Soon" - 861 bands="4G" brand="Jio" cc="in" country="India" operator="Karnataka" status="Launching Soon" - 862 bands="4G" brand="Jio" cc="in" country="India" operator="Kerala" status="Launching Soon" - 863 bands="4G" brand="Jio" cc="in" country="India" operator="Madhyya Pradesh" status="Launching Soon" - 864 bands="4G" brand="Jio" cc="in" country="India" operator="Maharashtra" status="Launching Soon" - 865 bands="4G" brand="Jio" cc="in" country="India" operator="North East" status="Launching Soon" - 866 bands="4G" brand="Jio" cc="in" country="India" operator="Orissa" status="Launching Soon" - 867 bands="4G" brand="Jio" cc="in" country="India" operator="Punjab" status="Launching Soon" - 868 bands="4G" brand="Jio" cc="in" country="India" operator="Rajasthan" status="Launching Soon" - 869 bands="4G" brand="Jio" cc="in" country="India" operator="Tamil Nadu Chennai" status="Launching Soon" - 870 bands="4G" brand="Jio" cc="in" country="India" operator="Uttar Pradesh West" status="Launching Soon" - 871 bands="4G" brand="Jio" cc="in" country="India" operator="Uttar Pradesh East" status="Launching Soon" - 872 bands="4G" brand="Jio" cc="in" country="India" operator="Delhi" status="Launching Soon" - 873 bands="4G" brand="Jio" cc="in" country="India" operator="Kolkatta" status="Launching Soon" - 874 bands="4G" brand="Jio" cc="in" country="India" operator="Mumbai" status="Launching Soon" + 854 bands="" brand="Jio" cc="in" country="India" operator="Andra Pradesh" status="Reserved" + 855 bands="" brand="Jio" cc="in" country="India" operator="Assam" status="Reserved" + 856 bands="" brand="Jio" cc="in" country="India" operator="Bihar" status="Reserved" + 857 bands="" brand="Jio" cc="in" country="India" operator="Gujarat" status="Reserved" + 858 bands="" brand="Jio" cc="in" country="India" operator="Haryana" status="Reserved" + 859 bands="" brand="Jio" cc="in" country="India" operator="Himachal Pradesh" status="Reserved" + 860 bands="" brand="Jio" cc="in" country="India" operator="Jammu Kashmir" status="Reserved" + 861 bands="" brand="Jio" cc="in" country="India" operator="Karnataka" status="Reserved" + 862 bands="" brand="Jio" cc="in" country="India" operator="Kerala" status="Reserved" + 863 bands="" brand="Jio" cc="in" country="India" operator="Madhyya Pradesh" status="Reserved" + 864 bands="" brand="Jio" cc="in" country="India" operator="Maharashtra" status="Reserved" + 865 bands="" brand="Jio" cc="in" country="India" operator="North East" status="Reserved" + 866 bands="" brand="Jio" cc="in" country="India" operator="Orissa" status="Reserved" + 867 bands="" brand="Jio" cc="in" country="India" operator="Punjab" status="Reserved" + 868 bands="" brand="Jio" cc="in" country="India" operator="Rajasthan" status="Reserved" + 869 bands="" brand="Jio" cc="in" country="India" operator="Tamil Nadu Chennai" status="Reserved" + 870 bands="" brand="Jio" cc="in" country="India" operator="Uttar Pradesh West" status="Reserved" + 871 bands="" brand="Jio" cc="in" country="India" operator="Uttar Pradesh East" status="Reserved" + 872 bands="" brand="Jio" cc="in" country="India" operator="Delhi" status="Reserved" + 873 bands="" brand="Jio" cc="in" country="India" operator="Kolkatta" status="Reserved" + 874 bands="" brand="Jio" cc="in" country="India" operator="Mumbai" status="Reserved" 875 bands="GSM 1800" brand="Uninor" cc="in" country="India" operator="Assam" status="Reserved" 880 bands="GSM 1800" brand="Uninor" cc="in" country="India" operator="West Bengal" status="Operational" 881 bands="GSM 1800" brand="S Tel" cc="in" country="India" operator="Assam" status="Reserved" - 908 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Andhra Pradesh" status="Operational" + 908 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 909 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Delhi" status="Operational" 910 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Haryana" status="Operational" 911 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Maharashtra" status="Operational" - 912 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Andhra Pradesh" status="Non operational" - 913 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Delhi & NCR" status="Non operational" - 914 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Gujarat" status="Non operational" - 917 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Kerala" status="Non operational" - 927 bands="" brand="Uninor" cc="in" country="India" operator="Gujarat" status="operational" + 912 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Not operational" + 913 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Delhi & NCR" status="Not operational" + 914 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Gujarat" status="Not operational" + 917 bands="GSM 1800" brand="Etisalat DB(cheers)" cc="in" country="India" operator="Kerala" status="Not operational" + 927 bands="" brand="Uninor" cc="in" country="India" operator="Gujarat" status="Operational" 929 bands="GSM 1800" brand="Uninor" cc="in" country="India" operator="Maharashtra" status="Operational" 00-99 410 - 01 bands="GSM 900 / GSM 1800" brand="Mobilink" cc="pk" country="Pakistan" operator="Mobilink-PMCL" status="Operational" - 03 bands="GSM 900/ GSM 1800" brand="Ufone" cc="pk" country="Pakistan" operator="Pakistan Telecommunication Mobile Ltd" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobilink" cc="pk" country="Pakistan" operator="Mobilink-PMCL" status="Operational" + 02 bands="CDMA2000 1900" brand="PTCL" cc="pk" country="Pakistan" operator="PTCL" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="Ufone" cc="pk" country="Pakistan" operator="Pakistan Telecommunication Mobile Ltd" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Zong" cc="pk" country="Pakistan" operator="China Mobile" status="Operational" + 05 bands="GSM 900 / GSM 1800" brand="SCO Mobile" cc="pk" country="Pakistan" operator="SCO Mobile Ltd" status="Operational" 06 bands="GSM 900 / GSM 1800" brand="Telenor" cc="pk" country="Pakistan" operator="Telenor Pakistan" status="Operational" - 07 bands="GSM 900 / GSM 1800" brand="Warid" cc="pk" country="Pakistan" operator="WaridTel" status="Operational" + 07 bands="GSM 900 / GSM 1800" brand="Warid Pakistan" cc="pk" country="Pakistan" operator="WaridTel" status="Operational" 00-99 412 01 bands="GSM 900 / GSM 1800" brand="AWCC" cc="af" country="Afghanistan" operator="Afghan Wireless Communication Company" status="Operational" - 20 bands="GSM 900" brand="Roshan" cc="af" country="Afghanistan" operator="Telecom Development Company Afghanistan Ltd." status="Operational" - 40 bands="GSM 900 / GSM 1800/ UMTS 2100" brand="MTN" cc="af" country="Afghanistan" operator="MTN Group Afghanistan" status="Operational" - 50 bands="GSM 900 / GSM 1800 /UMTS 2100" brand="Etisalat" cc="af" country="Afghanistan" operator="Etisalat Afghanistan" status="Operational" - 55 bands="CDMA 800 /" brand="WASEL" cc="af" country="Afghanistan" operator="WASEL Afghanistan" status="Operational" + 20 bands="GSM 900 / UMTS" brand="Roshan" cc="af" country="Afghanistan" operator="Telecom Development Company Afghanistan Ltd." status="Operational" + 40 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="af" country="Afghanistan" operator="MTN Group Afghanistan" status="Operational" + 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="af" country="Afghanistan" operator="Etisalat Afghanistan" status="Operational" + 55 bands="CDMA 800" brand="WASEL" cc="af" country="Afghanistan" operator="WASEL Afghanistan" status="Operational" + 80 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Salaam" cc="af" country="Afghanistan" operator="Afghan Telecom" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Salaam" cc="af" country="Afghanistan" operator="Afghan Telecom" status="Operational" 00-99 413 - 01 bands="GSM-900/1800 (GPRS, EDGE)
2100 MHz UMTS, HSPA, HSPA+, DC-HSPA+
1800 MHz FD-LTE" brand="Mobitel" cc="lk" country="Sri Lanka" operator="Mobitel (Pvt) Ltd" status="Operational" - 02 bands="GSM-900/1800 (GPRS, EDGE)
2100 MHz UMTS, HSPA, HSPA+, DC-HSPA+
1800 MHz FD-LTE" brand="Dialog" cc="lk" country="Sri Lanka" operator="Dialog Axiata PLC" status="Operational" - 03 bands="GSM-900/1800 (GPRS, EDGE)
2100 MHz UMTS, HSPA, HSPA+, DC-HSPA+
1800 MHz FD-LTE (Planned)" brand="Etisalat" cc="lk" country="Sri Lanka" operator="Etisalat Lanka (Pvt) Ltd" status="Operational" - 04 bands="LTE-2300, CDMA-800" brand="Lanka Bell" cc="lk" country="Sri Lanka" operator="Lanka Bell Ltd" status="Operational" - 05 bands="GSM-900/1800 (GPRS, EDGE)
2100 MHz UMTS, HSPA, HSPA+" brand="Airtel" cc="lk" country="Sri Lanka" operator="Bharti Airtel Lanka (Pvt) Ltd" status="Operational" - 08 bands="GSM-900/1800 (GPRS, EDGE)
2100 MHz UMTS, HSPA" brand="Hutch" cc="lk" country="Sri Lanka" operator="Hutchison Telecommunications Lanka (Pvt) Ltd" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Mobitel" cc="lk" country="Sri Lanka" operator="Mobitel (Pvt) Ltd" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Dialog" cc="lk" country="Sri Lanka" operator="Dialog Axiata PLC" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="lk" country="Sri Lanka" operator="Etisalat Lanka (Pvt) Ltd" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="lk" country="Sri Lanka" operator="Bharti Airtel Lanka (Pvt) Ltd" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Hutch" cc="lk" country="Sri Lanka" operator="Hutchison Telecommunications Lanka (Pvt) Ltd" status="Operational" 00-99 414 01 bands="GSM 900" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Post and Telecommunication" status="Operational" + 05 bands="UMTS 900 / UMTS 2100" brand="Ooredoo" cc="mm" country="Myanmar" operator="Ooredoo Myanmar" status="Operational" + 06 bands="GSM 900" brand="Telenor Myanmar" cc="mm" country="Myanmar" operator="Telenor Myanmar" status="Test" 00-99 415 - 01 bands="GSM 900" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" - 03 bands="GSM 900" brand="mtc touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" + 01 bands="GSM 900 2G 3G 4G" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" + 03 bands="GSM 900 2G 3G 4G" brand="mtc touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" 05 bands="GSM 900" brand="Ogero Mobile" cc="lb" country="Lebanon" operator="Ogero Telecom" status="Planned" 00-99 416 01 bands="GSM 900" brand="zain JO" cc="jo" country="Jordan" operator="Jordan Mobile Telephone Services" status="Operational" + 02 bands="iDEN 800" brand="XPress Telecom" cc="jo" country="Jordan" operator="XPress Telecom" status="Operational" 03 bands="GSM 1800" brand="Umniah" cc="jo" country="Jordan" operator="Umniah Mobile Company" status="Operational" - 74 bands="iDEN 800" brand="XPress Telecom" cc="jo" country="Jordan" status="Operational" 77 bands="GSM 900" brand="Orange" cc="jo" country="Jordan" operator="Petra Jordanian Mobile Telecommunications Company (MobileCom)" status="Operational" 00-99 417 @@ -1172,7 +1325,7 @@ 30 bands="GSM 900" brand="Zain" cc="iq" country="Iraq" operator="Zain Iraq" status="Operational" 40 bands="GSM 900" brand="Korek" cc="iq" country="Iraq" operator="Telecom Ltd" status="Operational" 45 bands="UMTS" brand="Mobitel" cc="iq" country="Iraq" operator="Mobitel Co. Ltd." status="Operational" - 62 bands="CDMA2000 EVDO RevA 800/1900" brand="Itisaluna" cc="iq" country="Iraq" operator="Itisaluna Wireless CO." status="Operational" + 62 bands="CDMA 800 / CDMA 1900" brand="Itisaluna" cc="iq" country="Iraq" operator="Itisaluna Wireless CO." status="Operational" 92 bands="CDMA" brand="Omnnea" cc="iq" country="Iraq" operator="Omnnea Wireless" status="Operational" 00-99 419 @@ -1193,42 +1346,53 @@ 04 bands="GSM 900" brand="HiTS-UNITEL" cc="ye" country="Yemen" operator="Y" status="Operational" 00-99 422 - 02 bands="GSM 900 / GSM 1800" brand="Oman Mobile" cc="om" country="Oman" operator="Oman Telecommunications Company" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Nawras" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Oman Mobile" cc="om" country="Oman" operator="Oman Mobile Telecommunications Company" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Nawras" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" + 04 bands="" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="" 00-99 424 - 02 bands="GSM 900 / UMTS 2100" brand="Etisalat" cc="ae" country="United Arab Emirates" operator="E mirates Telecom Corp" status="Operational" + 02 bands="GSM 900 / UMTS 2100" brand="Etisalat" cc="ae" country="United Arab Emirates" operator="Emirates Telecom Corp" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="du" cc="ae" country="United Arab Emirates" operator="Emirates Integrated Telecommunications Company" status="Operational" 00-99 425 - 01 bands="GSM 900 / UMTS 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="il" country="Israel" operator="Partner Communications Company Ltd" status="Operational" - 02 bands="UMTS 850 / GSM 1800 / UMTS 2100" brand="Cellcom" cc="il" country="Israel" operator="Cellcom Israel Ltd" status="Operational" - 03 bands="CDMA2000 800 / UMTS 850 / UMTS 2100" brand="Pelephone" cc="il" country="Israel" operator="Pelephone Communications Ltd." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="il" country="Israel" operator="Partner Communications Company Ltd" status="Operational" + 02 bands="GSM 1800 / UMTS 850 / UMTS 2100" brand="Cellcom" cc="il" country="Israel" operator="Cellcom Israel Ltd" status="Operational" + 03 bands="CDMA 800 / UMTS 850 / UMTS 2100" brand="Pelephone" cc="il" country="Israel" operator="Pelephone Communications Ltd." status="Operational" + 04 bands="" cc="il" country="Israel" operator="Globalsim Ltd" status="" 05 bands="GSM 900" brand="Jawwal" cc="ps" country="Palestine, State of" operator="Palestine Cellular Communications, Ltd." status="Operational" 06 bands="GSM 900 / GSM 1800" brand="Wataniya" cc="ps" country="Palestine, State of" operator="Wataniya Palestine Mobile Telecommunications Company" status="Operational" 07 bands="iDEN 800 / UMTS 2100" brand="Hot Mobile" cc="il" country="Israel" operator="Hot Mobile Ltd" status="Operational" - 08 bands="UMTS 2100" brand="Golan Telecom" cc="il" country="Israel" status="Operational" - 14 bands="GSM 900 / UMTS 900 / GSM 1800 / UMTS 2100" brand="Youphone" cc="il" country="Israel" status="Operational" - 15 bands="UMTS 850 / GSM 1800 / UMTS 2100" brand="Home Cellular" cc="il" country="Israel" status="Operational" - 16 bands="UMTS 850 / UMTS 2100" brand="Rami Levy" cc="il" country="Israel" status="Operational" - 18 bands="UMTS 850 / UMTS 2100" brand="Cellact Communications" cc="il" country="Israel" operator="Cellact Communications Ltd." status="Operational" + 08 bands="UMTS 2100" brand="Golan Telecom" cc="il" country="Israel" operator="Golan Telecom Ltd" status="Operational" + 11 bands="MVNO" cc="il" country="Israel" operator="365 Telecom" status="" + 12 bands="MVNO" cc="il" country="Israel" operator="Free Telecom" status="" + 13 bands="" cc="il" country="Israel" operator="Ituran Cellular Communications" status="" + 14 bands="MVNO" brand="Youphone" cc="il" country="Israel" operator="Alon Cellular Ltd." status="Operational" + 15 bands="MVNO" brand="Home Cellular" cc="il" country="Israel" operator="Home Cellular" status="Operational" + 16 bands="MVNO" brand="Rami Levy" cc="il" country="Israel" operator="Rami Levy" status="Operational" + 17 bands="MVNO" cc="il" country="Israel" operator="Gale Phone" status="" + 18 bands="MVNO" brand="Cellact Communications" cc="il" country="Israel" operator="Cellact Communications Ltd." status="Operational" + 19 bands="" cc="il" country="Israel" operator="Azi Communications Ltd." status="" + 20 bands="" cc="il" country="Israel" operator="Bezeq Ltd" status="" + 21 bands="" cc="il" country="Israel" operator="B.I.P. Communications Ltd." status="" 00-99 426 - 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Batelco" cc="bh" country="Bahrain" operator="Bahrain Telecommunications Company" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="zain BH" cc="bh" country="Bahrain" operator="Zain Bahrain" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="VIVA" cc="bh" country="Bahrain" operator="Viva Bahrain" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Batelco" cc="bh" country="Bahrain" operator="Bahrain Telecommunications Company" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="zain BH" cc="bh" country="Bahrain" operator="Zain Bahrain" status="Operational" + 03 bands="" cc="bh" country="Bahrain" operator="Civil Aviation Authority" status="" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="VIVA Bahrain" cc="bh" country="Bahrain" operator="Viva Bahrain" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="Batelco" cc="bh" country="Bahrain" operator="Bahrain Telecommunications Company" status="Operational" 00-99 427 - 01 bands="GSM 900 / GSM 1800" brand="ooredoo" cc="qa" country="Qatar" operator="ooredoo" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="ooredoo" cc="qa" country="Qatar" operator="ooredoo" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="qa" country="Qatar" operator="Vodafone Qatar" status="Operational" 05 bands="TETRA 380" brand="Ministry of Interior" cc="qa" country="Qatar" operator="Ministry of Interior" status="Operational" + 06 bands="LTE" brand="Ministry of Interior" cc="qa" country="Qatar" operator="Ministry of Interior" status="Operational" 00-99 428 88 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Unitel" cc="mn" country="Mongolia" operator="Unitel LLC" status="Operational" 91 bands="CDMA2000 800 / UMTS 2100" brand="Skytel" cc="mn" country="Mongolia" operator="Skytel LLC" status="Operational" - 98 bands="CDMA2000 450" brand="G.Mobile" cc="mn" country="Mongolia" operator="G-Mobile LLC" status="Operational" - 99 bands="GSM 900 / UMTS 2100" brand="MobiCom" cc="mn" country="Mongolia" operator="Mobicom Corporation" status="Operational" + 98 bands="CDMA2000 450 / UMTS 2100" brand="G-Mobile" cc="mn" country="Mongolia" operator="G-Mobile LLC" status="Operational" + 99 bands="GSM 900 / UMTS 2100" brand="Mobicom" cc="mn" country="Mongolia" operator="Mobicom Corporation" status="Operational" 00-99 429 01 bands="GSM 900 / GSM 1800" brand="Namaste / NT Mobile" cc="np" country="Nepal" operator="Nepal Telecom" status="Operational" @@ -1237,12 +1401,12 @@ 04 bands="GSM 900" brand="SmartCell" cc="np" country="Nepal" operator="Smart Telecom Pvt. Ltd." status="Operational" 00-99 432 - 11 bands="GSM 900 / GSM 1800" brand="IR-MCI" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" - 14 bands="GSM 900" brand="TKC" cc="ir" country="Iran" operator="KFZO" status="Operational" - 19 bands="GSM 900" brand="MTCE" cc="ir" country="Iran" operator="Mobile Telecommunications Company of Esfahan" status="Operational" + 11 bands="GSM 900 / GSM 1800" brand="IR-MCI (Hamrahe Avval)" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" + 14 bands="GSM 900" brand="TKC" cc="ir" country="Iran" operator="Telecommunication Kish Company" status="Operational" + 19 bands="GSM 900" brand="MTCE (Espadan)" cc="ir" country="Iran" operator="Mobile Telecommunications Company of Esfahan" status="Operational" 20 bands="UMTS" brand="Rightel" cc="ir" country="Iran" status="Operational" 32 bands="GSM 900 / GSM 1800" brand="Taliya" cc="ir" country="Iran" operator="Rafsanjan Industrial Complex" status="Operational" - 35 bands="GSM 900 / GSM 1800" brand="Irancell" cc="ir" country="Iran" operator="Irancell Telecommunications Services Company" status="Operational" + 35 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" 70 bands="GSM 900 / GSM 1800" brand="TCI" cc="ir" country="Iran" operator="Telephone Communications Company of Iran" status="Operational" 93 bands="GSM 1800" brand="Iraphone" cc="ir" country="Iran" operator="Iraphone" status="Operational" 00-99 @@ -1256,11 +1420,11 @@ 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS" cc="uz" country="Uzbekistan" operator="Uzdunrobita" status="Operational" 00-99 436 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tcell" cc="tj" country="Tajikistan" operator="JV Somoncom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo Tajikistan" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Megafon" cc="tj" country="Tajikistan" operator="TT Mobile" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="JV Somoncom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo Tajikistan" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Megafon Tajikistan" cc="tj" country="Tajikistan" operator="TT Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2100" brand="Babilon-M" cc="tj" country="Tajikistan" operator="Babilon-Mobile" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tacom" cc="tj" country="Tajikistan" operator="Vimpelcom" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="tj" country="Tajikistan" operator="Tacom" status="Operational" 12 bands="UMTS 2100" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo" status="" 00-99 437 @@ -1377,7 +1541,7 @@ 04 bands="CDMA2000 1700" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" 05 bands="CDMA2000 800 / UMTS 2100 / LTE 850 / LTE 1800" brand="SKTelecom" cc="kr" country="South Korea" operator="SK Telecom" status="Operational" 06 bands="CDMA2000 1700 / LTE 850 2100 2600" brand="LG U+" cc="kr" country="South Korea" operator="LG Telecom" status="Operational" - 08 bands="UMTS 2100 / LTE 1800" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" + 08 bands="UMTS 2100 / LTE 900 / LTE 1800" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" 11 bands="UMTS 2100" brand="SKTelecom" cc="kr" country="South Korea" operator="Korea Cable Telecom(t-plus), Eco-mobile" status="Operational" 00-99 452 @@ -1396,13 +1560,13 @@ 02 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" 03 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="3 (2G)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" - 05 bands="CDMA2000 800" brand="3 (CDMA)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Not operational" + 05 bands="CDMA 800" brand="3 (CDMA)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" 07 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" - 08 brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" + 08 bands="" brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" 09 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="China Motion Telecom" status="Operational" 10 bands="GSM 1800" brand="New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" - 11 cc="hk" country="Hong Kong" operator="China-Hong Kong Telecom" status="Operational" + 11 bands="" cc="hk" country="Hong Kong" operator="China-Hong Kong Telecom" status="Operational" 12 bands="GSM 1800 / LTE 1800 / LTE 2600" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="Operational" 13 bands="UMTS 2100" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="MVNO" 14 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" @@ -1412,24 +1576,25 @@ 18 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" 19 bands="UMTS 2100 / LTE 1800 / LTE 2600" brand="PCCW Mobile (3G/4G)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 22 bands="GSM 1800" brand="P Plus" cc="hk" country="Hong Kong" operator="P Plus Communications" status="Not operational" - 29 bands="CDMA2000 1xEV-DO 800" brand="PCCW Mobile (CDMA)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" + 29 bands="CDMA 800" brand="PCCW Mobile (CDMA)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 00-99 455 - 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="SmarTone Macao" status="Operational" + 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="SmarTone – Comunicações Mõveis, S.A." status="Operational" 01 bands="GSM 900 / GSM 1800" brand="CTM" cc="mo" country="Macau (China)" operator="C.T.M. Telemovel+" status="Operational" - 02 bands="CDMA2000 800" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom" status="Operational" + 02 bands="CDMA 800" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom" status="Operational" 03 bands="GSM 900 / GSM 1800" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telecom" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="CTM" cc="mo" country="Macau (China)" operator="C.T.M. Telemovel+" status="Operational" 05 bands="UMTS 900 / UMTS 2100" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telecom" status="Operational" + 06 bands="" brand="SmarTone" cc="mo" country="Macau (China)" operator="SmarTone – Comunicações Mõveis, S.A." status="" 00-99 456 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" 03 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" 04 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" - 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Metfone" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" 09 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kh" country="Cambodia" operator="Sotelco Ltd." status="Operational" 11 bands="CDMA2000" brand="Excell" cc="kh" country="Cambodia" status="Operational" 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" @@ -1443,19 +1608,20 @@ 460 00 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Operational" 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / TD-LTE 2300 / TD-LTE 2600 / FDD-LTE 1800" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not Operational" + 02 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" 03 bands="CDMA2000 800 / CDMA2000 2100 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" - 05 bands="CDMA2000 800 / CDMA2000 2100 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Not Operational" - 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not Operational" + 04 bands="" cc="cn" country="China" operator="Global Star Satellite" status="" + 05 bands="CDMA2000 800 / CDMA2000 2100 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Not operational" + 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" 20 bands="GSM-R" brand="China Tietong" cc="cn" country="China" operator="China Tietong" status="Operational" 00-99 466 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" 05 bands="CDMA2000 800" brand="APTG" cc="tw" country="Taiwan" operator="Asia Pacific Telecom" status="Operational" - 06 bands="GSM 1800" brand="Tuntex" cc="tw" country="Taiwan" operator="Tuntex Telecom" status="Not operational" + 06 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="operational" 11 bands="Refer to 466-92 Chunghwa Telecom" brand="Chunghwa LDM" cc="tw" country="Taiwan" operator="LDTA/Chunghwa Telecom" status="Operational" - 88 bands="GSM 1800" brand="KG Telecom" cc="tw" country="Taiwan" operator="KG Telecom" status="Not operational" + 88 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="operational" 89 bands="UMTS 2100" brand="VIBO" cc="tw" country="Taiwan" operator="VIBO Telecom" status="Operational" 92 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Chungwa" cc="tw" country="Taiwan" operator="Chunghwa Telecom" status="Operational" 93 bands="GSM 900" brand="MobiTai" cc="tw" country="Taiwan" operator="Mobitai Communications" status="Not operational" @@ -1467,23 +1633,23 @@ 193 bands="GSM 900" brand="SunNet" cc="kp" country="North Korea" operator="Korea Posts and Telecommunications Corporation" status="discontinued" 00-99 470 - 01 bands="GSM 900/ GSM 1800" brand="Grameenphone" cc="bd" country="Bangladesh" operator="GrameenPhone Ltd" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Robi" cc="bd" country="Bangladesh" operator="Axiata Bangladesh Ltd." status="Operational" - 03 bands="GSM 900/ GSM 1800" brand="Banglalink" cc="bd" country="Bangladesh" operator="Orascom Telecom Holding" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="TeleTalk" cc="bd" country="Bangladesh" operator="Teletalk Bangladesh Limited" status="Operational" - 05 bands="CDMA2000 800" brand="Citycell" cc="bd" country="Bangladesh" operator="Pacific Bangladesh Telecom Limited" status="Operational" - 06 bands="GSM 900/ GSM 1800" brand="Beeong3G Warid Telekom" cc="bd" country="Bangladesh" operator="Beeong Ltd" status="Reserved" - 07 bands="GSM 900 / GSM 1800" brand="Airtel" cc="bd" country="Bangladesh" operator="Bharti airtel Bangladesh Ltd." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Grameenphone" cc="bd" country="Bangladesh" operator="GrameenPhone Ltd" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Robi" cc="bd" country="Bangladesh" operator="Axiata Bangladesh Ltd." status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Banglalink" cc="bd" country="Bangladesh" operator="Orascom Telecom Holding" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TeleTalk" cc="bd" country="Bangladesh" operator="Teletalk Bangladesh Limited" status="Operational" + 05 bands="CDMA 800" brand="Citycell" cc="bd" country="Bangladesh" operator="Pacific Bangladesh Telecom Limited" status="Operational" + 06 bands="GSM 900 / GSM 1800" brand="Beeong3G Warid Telekom" cc="bd" country="Bangladesh" operator="Beeong Ltd" status="Reserved" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="bd" country="Bangladesh" operator="Bharti airtel Bangladesh Ltd." status="Operational" 00-99 472 01 bands="GSM 900 / UMTS 2100" brand="Dhiraagu" cc="mv" country="Maldives" operator="Dhivehi Raajjeyge Gulhun" status="Operational" - 02 bands="GSM 900 / UMTS 2100" brand="Wataniya" cc="mv" country="Maldives" operator="Wataniya Telecom Maldives" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 2600" brand="Ooredoo" cc="mv" country="Maldives" operator="Wataniya Telecom Maldives" status="Operational" 00-99 502 01 bands="CDMA2000 450 (depreciated)011-(6digits)" brand="ATUR 450" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" 10 cc="my" country="Malaysia" operator="DiGi Telecommunications" 11 brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" - 12 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Maxis" cc="my" country="Malaysia" operator="Maxis Mobile Services SDN Berhad" status="Operational" + 12 bands="MVNO" brand="Kartu As" cc="my" country="Malaysia" operator="Telin Malaysia Sdn Bhd" status="Operational" 13 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" 14 cc="my" country="Malaysia" operator="Telekom Malaysia Berhad for PSTN SMS" 150 bands="MVNO" brand="Tune Talk" cc="my" country="Malaysia" operator="Tune Talk Sdn Bhd" status="Operational" @@ -1498,28 +1664,38 @@ 00-99 505 01 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100/ LTE 1800/2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE-TDD 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 04 bands="" cc="au" country="Australia" operator="Department of Defence" status="Operational" 05 brand="Ozitel" cc="au" country="Australia" status="Not operational" 06 bands="UMTS 2100" brand="3" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Not operational" + 07 bands="" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Network Pty. Ltd." status="" 08 bands="GSM 900" brand="One.Tel" cc="au" country="Australia" operator="One.Tel Limited" status="Not operational" 09 brand="Airnet" cc="au" country="Australia" status="Not operational" 10 bands="GSM 900" brand="Norfolk Telecom" cc="nf" country="Norfolk Island" operator="Norfolk Telecom" status="Operational" + 11 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Ltd." status="" 12 bands="UMTS 2100" brand="3" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Not operational" 13 bands="GSM 1800" brand="Railcorp" cc="au" country="Australia" operator="Rail Corporation New South Wales" status="Reserved" 14 bands="GSM 1800 / UMTS 2100" brand="AAPT" cc="au" country="Australia" operator="Telecom New Zealand" status="Operational" 15 brand="3GIS" cc="au" country="Australia" status="Not operational" - 16 bands="GSM 1800" brand="Victorian Rail Track" cc="au" country="Australia" status="Reserved" + 16 bands="GSM 1800" brand="VicTrack" cc="au" country="Australia" operator="Victorian Rail Track" status="Reserved" + 17 bands="" cc="au" country="Australia" operator="Vidid Wireless Pty. Ltd." status="" 18 brand="Pactel" cc="au" country="Australia" operator="Pactel International Pty Ltd" status="Reserved" - 19 brand="Lycamobile Pty Ltd" cc="au" country="Australia" - 21 bands="MVNO" brand="SOUL" cc="au" country="Australia" operator="TPG Telecom Limited" status="" + 19 bands="MVNO" brand="Lycamobile" cc="au" country="Australia" operator="Lycamobile Pty Ltd" status="Operational" + 20 bands="" cc="au" country="Australia" operator="Ausgrid Corporation" status="" + 21 bands="" cc="au" country="Australia" operator="Queensland Rail Limited" status="" + 22 bands="" cc="au" country="Australia" operator="iiNet Ltd" status="" 23 bands="LTE 2100" cc="au" country="Australia" operator="Challenge Networks Pty. Ltd." status="Planning" - 24 bands="" brand="Advance Communications Technologies Pty. Ltd." cc="au" country="Australia" status="" + 24 bands="" cc="au" country="Australia" operator="Advanced Communications Technologies Pty. Ltd." status="" + 25 bands="" cc="au" country="Australia" operator="Pilbara Iron Company Services Pty Ltd" status="" 26 bands="" cc="au" country="Australia" operator="Dialogue Communications Pty. Ltd." status="" 27 bands="" cc="au" country="Australia" operator="Nexium Telecommunications" status="" + 28 bands="" cc="au" country="Australia" operator="RCOM International Pty Ltd" status="" + 30 bands="" cc="au" country="Australia" operator="Compatel Limited" status="" + 31 bands="" cc="au" country="Australia" operator="BHP Billiton" status="" 38 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Crazy John's" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" - 62 cc="au" country="Australia" + 62 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" + 68 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" 71 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" 72 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" 88 brand="Localstar Holding Pty. Ltd." cc="au" country="Australia" status="Not operational" @@ -1529,22 +1705,23 @@ 510 00 bands="Satellite" brand="PSN" cc="id" country="Indonesia" operator="PT Pasifik Satelit Nusantara (ACeS)" status="Operational" 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="INDOSAT" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" - 03 bands="CDMA2000 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Operational" - 07 bands="CDMA2000 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Operational" + 03 bands="CDMA 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Operational" + 07 bands="CDMA 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Operational" 08 bands="GSM 1800 / UMTS 2100" brand="AXIS" cc="id" country="Indonesia" operator="PT Natrindo Telepon Seluler" status="Operational" - 09 bands="CDMA2000 1900" brand="SMART" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100/apn free arutmin" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" + 09 bands="CDMA 1900 / 800" brand="SMARTFREN" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" 11 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" 20 bands="GSM 1800" brand="TELKOMMobile" cc="id" country="Indonesia" operator="PT Telkom Indonesia Tbk" status="Not operational" 21 bands="GSM 1800" brand="IM3" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Not operational" - 27 bands="CDMA2000 450" brand="Ceria" cc="id" country="Indonesia" operator="PT Sampoerna Telekomunikasi Indonesia" status="Operational" - 28 bands="CDMA2000 800" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" + 27 bands="CDMA 450" brand="Ceria" cc="id" country="Indonesia" operator="PT Sampoerna Telekomunikasi Indonesia" status="Operational" + 28 bands="CDMA 800" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" 89 bands="GSM 1800 / UMTS 2100" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" - 99 bands="CDMA2000 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" - 995 cc="id" country="Indonesia" + 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" + 995 brand="Komselindo" cc="id" country="Indonesia" operator="Komselindo STKB-C" + 996 brand="Komselindo" cc="id" country="Indonesia" operator="Komselindo STKB-C" 00-99 514 - 01 bands="GSM 850/900/1800, UMTS 2100" brand="Telin" cc="tl" country="East Timor" operator="PT Telekomunikasi Indonesia International" status="Planned" + 01 bands="GSM 850 / GSM 900 / GSM 1800 / UMTS 2100" brand="Telin Telkomcel" cc="tl" country="East Timor" operator="PT Telekomunikasi Indonesia International" status="Planned" 02 bands="GSM 900" cc="tl" country="East Timor" operator="Timor Telecom" status="Operational" 03 bands="" cc="tl" country="East Timor" operator="Viettel Timor-Leste" status="Planned" 00-99 @@ -1555,20 +1732,22 @@ 05 bands="EDGE 1800 / UMTS 2100" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" 11 bands="" cc="ph" country="Philippines" operator="PLDT via ACeS Philippines" status="" 18 bands="GSM 900 / UMTS 2100 (defunct)" brand="Cure" cc="ph" country="Philippines" operator="PLDT via Smart's Connectivity Unlimited Resources Enterprise" status="Operational" + 24 bands="" brand="ABS-CBN" cc="ph" country="Philippines" operator="ABS-CBN Convergence with Globe Telecom" status="Operational" 88 bands="" cc="ph" country="Philippines" operator="Nextel" status="" 00-99 520 - 00 bands="HSPA+ 850" brand="my by CAT" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" - 01 bands="GSM 900 / HSPA+ 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Operational" - 02 bands="CDMA 2000 1x EVDO REV.A 800" brand="CAT CDMA" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" - 03 bands="HSPA+ 2100" brand="AIS 3G" cc="th" country="Thailand" operator="AWN" status="Operational" - 04 bands="HSPA+ 2100 / LTE 2100" brand="truemove H 4G LTE" cc="th" country="Thailand" operator="Real Future" status="Operational" - 05 bands="HSPA+ 2100" brand="dtac 3G" cc="th" country="Thailand" operator="DTN" status="Operational" + 00 bands="UMTS 850" brand="my by CAT" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" + 01 bands="GSM 900 / UMTS 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Operational" + 02 bands="CDMA 800" brand="CAT CDMA" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" + 03 bands="UMTS 2100" brand="AIS 3G" cc="th" country="Thailand" operator="AWN" status="Operational" + 04 bands="UMTS 2100 / LTE 2100" brand="truemove H 4G LTE" cc="th" country="Thailand" operator="Real Future" status="Operational" + 05 bands="UMTS 2100 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTN" status="Operational" 10 bands="" brand="?" cc="th" country="Thailand" operator="WCS IQ" status="" - 15 bands="HSPA+ 2100" brand="TOT 3G" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="Operational" - 18 bands="GSM 1800 / HSPA+ 850" brand="dtac" cc="th" country="Thailand" operator="Total Access Communication" status="Operational" + 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="Operational" + 18 bands="GSM 1800 / UMTS 850" brand="dtac" cc="th" country="Thailand" operator="Total Access Communication" status="Operational" 23 bands="GSM 1800" brand="AIS GSM 1800" cc="th" country="Thailand" operator="AIS)" status="Operational" 25 bands="PHS 1900" brand="WE PCT" cc="th" country="Thailand" operator="True Corporation" status="Operational" + 47 bands="" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="" 99 bands="GSM 1800" brand="truemove" cc="th" country="Thailand" operator="True Corporation" status="Operational" 00-99 525 @@ -1583,7 +1762,7 @@ 528 01 bands="" cc="bn" country="Brunei" operator="Jabatan Telekom Brunei" status="" 02 bands="UMTS 2100" brand="B-Mobile" cc="bn" country="Brunei" operator="B-Mobile Communications Sdn Bhd" status="Operational" - 11 bands="GSM 900 / UMTS 2100" brand="DSTCom" cc="bn" country="Brunei" operator="Data Stream Technology" status="Operational" + 11 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="DSTCom" cc="bn" country="Brunei" operator="Data Stream Technology" status="Operational" 00-99 530 00 bands="AMPS 800 / TDMA 800" brand="Telecom" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Not operational" @@ -1591,15 +1770,17 @@ 02 bands="CDMA2000 800" brand="Telecom" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Not operational" 03 bands="UMTS 2000" brand="Woosh" cc="nz" country="New Zealand" operator="Woosh Wireless New Zealand Walker" status="Operational" 04 bands="UMTS 2100" brand="TelstraClear" cc="nz" country="New Zealand" operator="TelstraClear New Zealand" status="Not operational" - 05 bands="UMTS 850 / UMTS 2100 / LTE 1800" brand="XT Mobile Network" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Operational" - 06 bands="UMTS 850 / UMTS 2100" brand="Skinny" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Operational" + 05 bands="UMTS 850 / UMTS 2100 / LTE 1800" brand="XT Mobile Network" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" + 06 bands="UMTS 850 / UMTS 2100" brand="Skinny" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" + 07 bands="" cc="nz" country="New Zealand" operator="Bluereach Limited" status="" 24 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="2degrees" cc="nz" country="New Zealand" operator="2degrees" status="Operational" 00-99 536 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="nr" country="Nauru" operator="Digicel (Nauru) Corporation" status="Operational" 00-99 537 - 01 bands="GSM 900" brand="BeMobile" cc="pg" country="Papua New Guinea" operator="Pacific Mobile Communications" status="Operational" + 01 bands="GSM 900 / UMTS 900" brand="bmobile" cc="pg" country="Papua New Guinea" operator="Bemobile Limited" status="Operational" + 02 bands="CDMA2000 450" cc="pg" country="Papua New Guinea" operator="Telikom PNG Ltd." status="Operational" 03 bands="GSM 900 / UMTS 900" brand="Digicel" cc="pg" country="Papua New Guinea" operator="Digicel PNG" status="Operational" 00-99 539 @@ -1615,13 +1796,15 @@ 00 bands="GSM 900" brand="AIL" cc="vu" country="Vanuatu" operator="ACeS International (AIL)" status="Operational" 01 bands="GSM 900" brand="SMILE" cc="vu" country="Vanuatu" operator="Telecom Vanuatu Ltd" status="Operational" 05 bands="GSM 900, UMTS 900" brand="Digicel" cc="vu" country="Vanuatu" operator="Digicel Vanuatu Ltd" status="Operational" + 07 bands="LTE Band 40" brand="WanTok" cc="vu" country="Vanuatu" operator="WanTok Vanuatu Ltd" status="Operational" 00-99 542 - 01 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="fj" country="Fiji" operator="Vodafone Fiji" status="Operational" - 02 bands="GSM 900 /UMTS 900 /UMTS 2100 /WIMAX 4G" brand="Digicel" cc="fj" country="Fiji" operator="Digicel Fiji" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="fj" country="Fiji" operator="Vodafone Fiji" status="Operational" + 02 bands="GSM 900 / UMTS 900 / UMTS 2100 / WIMAX 4G" brand="Digicel" cc="fj" country="Fiji" operator="Digicel Fiji" status="Operational" + 03 bands="CDMA" cc="fj" country="Fiji" operator="Telecom Fiji Ltd" status="" 00-99 544 - 11 bands="GSM" brand="Bluesky" cc="as" country="American Samoa (United States of America)" operator="Bluesky" status="Operational" + 11 bands="GSM 850 / GSM 1900 / UMTS 850" brand="Bluesky" cc="as" country="American Samoa (United States of America)" operator="Bluesky" status="Operational" 00-99 545 01 bands="UMTS 850 / LTE 700" brand="Kiribati - TSKL" cc="ki" country="Kiribati" operator="Telecom Services Kiribati Ltd" status="Operational" @@ -1631,13 +1814,15 @@ 01 bands="GSM 900" brand="Mobilis" cc="nc" country="New Caledonia (France)" operator="OPT New Caledonia" status="Operational" 00-99 547 + 10 bands="GSM 900" cc="pf" country="French Polynesia" operator="Mara Telecom" status="Not operational" + 15 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="pf" country="French Polynesia" operator="Pacific Mobile Telecom" status="Operational" 20 bands="GSM 900 / UMTS 2100" brand="Vini" cc="pf" country="French Polynesia" operator="Tikiphone SA" status="Operational" 00-99 548 01 bands="GSM 900" cc="ck" country="Cook Islands (New Zealand)" operator="Telecom Cook" status="Operational" 00-99 549 - 01 bands="GSM 900" brand="Digicel" cc="ws" country="Samoa" operator="Digicel Pacific Ltd." status="Operational" + 01 bands="GSM 900 / UMTS 2100" brand="Digicel" cc="ws" country="Samoa" operator="Digicel Pacific Ltd." status="Operational" 27 bands="GSM 900" brand="Bluesky" cc="ws" country="Samoa" operator="Bluesky Samoa Ltd" status="Operational" 00-99 550 @@ -1662,9 +1847,9 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="eg" country="Egypt" operator="Etisalat Egypt" status="Operational" 00-99 603 - 01 bands="GSM 900 / GSM 1800 / GSM 2100 / CDMA2000 1900" brand="Mobilis" cc="dz" country="Algeria" operator="ATM Mobilis" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA 1900" brand="Mobilis" cc="dz" country="Algeria" operator="ATM Mobilis" status="Operational" 02 bands="GSM 900 / GSM 1800" brand="Djezzy" cc="dz" country="Algeria" operator="Orascom Telecom Algerie Spa" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Nedjma" cc="dz" country="Algeria" operator="Wataniya Telecom Algerie" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ooredoo" cc="dz" country="Algeria" operator="Wataniya Telecom Algerie" status="Operational" 00-99 604 00 bands="GSM 900 / GSM 1800" brand="Méditel" cc="ma" country="Morocco" operator="Medi Telecom" status="Operational" @@ -1675,7 +1860,7 @@ 605 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tunicell" cc="tn" country="Tunisia" operator="Tunisie Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tunisiana" cc="tn" country="Tunisia" operator="Orascom Telecom Tunisie" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="Orascom Telecom Tunisie" status="Operational" 00-99 606 00 bands="GSM900 / GSM 1800 / UMTS 2100" brand="Libyana" cc="ly" country="Libya" operator="Libyana" status="Operational" @@ -1694,6 +1879,7 @@ 01 bands="GSM 900 / UMTS 2100" brand="Orange" cc="sn" country="Senegal" operator="Sonatel" status="Operational" 02 bands="GSM 900 / UMTS 2100" brand="Tigo" cc="sn" country="Senegal" operator="Millicom International Cellular S.A." status="Operational" 03 bands="GSM 900 / UMTS 2100" brand="Expresso" cc="sn" country="Senegal" operator="Sudatel" status="Operational" + 04 bands="" cc="sn" country="Senegal" operator="CSU-SA" status="" 00-99 609 01 bands="GSM 900" brand="Mattel" cc="mr" country="Mauritania" operator="Mattel" status="Operational" @@ -1713,15 +1899,16 @@ 00-99 612 01 bands="" cc="ci" country="Ivory Coast" operator="Cora de Comstar" status="Not operational" - 02 bands="GSM 900 / GSM 1800" brand="Moov" cc="ci" country="Ivory Coast" status="Operational" - 03 bands="GSM 900" brand="Orange" cc="ci" country="Ivory Coast" status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="Moov" cc="ci" country="Ivory Coast" operator="Atlantique Cellulaire" status="Operational" + 03 bands="GSM 900" brand="Orange" cc="ci" country="Ivory Coast" operator="Orange" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="KoZ" cc="ci" country="Ivory Coast" operator="Comium Ivory Coast Inc" status="Operational" - 05 bands="GSM 900" brand="MTN" cc="ci" country="Ivory Coast" status="Operational" - 06 bands="GSM 1800" brand="ORICEL" cc="ci" country="Ivory Coast" operator="ORICEL" status="Operational" + 05 bands="GSM 900" brand="MTN" cc="ci" country="Ivory Coast" operator="Loteny Telecom" status="Operational" + 06 bands="GSM 1800" brand="GreenN" cc="ci" country="Ivory Coast" operator="Oricel" status="Operational" + 07 bands="GSM 1800" cc="ci" country="Ivory Coast" operator="Aircomm" status="Operational" 00-99 613 - 01 bands="GSM 900" brand="Telmob" cc="bf" country="Burkina Faso" operator="Onatel" status="Operational" - 02 bands="GSM 900" brand="Airtel" cc="bf" country="Burkina Faso" operator="Airtel Burkina Faso" status="Operational" + 01 bands="GSM 900 / UMTS" brand="Telmob" cc="bf" country="Burkina Faso" operator="Onatel" status="Operational" + 02 bands="GSM 900 / UMTS" brand="Airtel" cc="bf" country="Burkina Faso" operator="Airtel Burkina Faso" status="Operational" 03 bands="GSM 900" brand="Telecel Faso" cc="bf" country="Burkina Faso" operator="Telecel Faso SA" status="Operational" 00-99 614 @@ -1737,13 +1924,14 @@ 616 01 bands="GSM 900 / GSM 1800" brand="Libercom" cc="bj" country="Benin" operator="Benin Telecoms Mobile" status="Operational" 02 bands="GSM 900" brand="Moov" cc="bj" country="Benin" operator="Telecel Benin" status="Operational" - 03 bands="GSM 900" brand="MTN" cc="bj" country="Benin" operator="Spacetel Benin" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="MTN" cc="bj" country="Benin" operator="Spacetel Benin" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="BLK" cc="bj" country="Benin" operator="BLK Communication Benin" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="Glo" cc="bj" country="Benin" operator="Glo Communication Benin" status="Operational" 00-99 617 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="mu" country="Mauritius" operator="Cellplus Mobile Communications Ltd." status="Operational" 02 bands="GSM 900 / CDMA2000" brand="MTML" cc="mu" country="Mauritius" operator="Mahanagar Telephone (Mauritius) Ltd." status="Operational" + 03 bands="" brand="MTML" cc="mu" country="Mauritius" operator="Mahanagar Telephone (Mauritius) Ltd." status="" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Emtel" cc="mu" country="Mauritius" operator="Emtel Ltd." status="Operational" 00-99 618 @@ -1755,33 +1943,34 @@ 00-99 619 01 bands="GSM 900" brand="Airtel" cc="sl" country="Sierra Leone" operator="Bharti Airtel Limited" status="Operational" - 02 bands="" brand="Tigo" cc="sl" country="Sierra Leone" operator="Millicom (SL) Limited" status="" 03 bands="GSM 900" brand="Africell" cc="sl" country="Sierra Leone" operator="Lintel Sierra Leone Limited" status="Operational" 04 bands="GSM 900/1800" brand="Comium" cc="sl" country="Sierra Leone" operator="Comium Sierra leone INC" status="Operational" 05 bands="GSM 900" brand="Africell" cc="sl" country="Sierra Leone" operator="Lintel Sierra Leone Limited" status="Operational" - 25 bands="" brand="Mobitel" cc="sl" country="Sierra Leone" operator="Mobitel" status="Operational" + 06 bands="CDMA 800" brand="SierraTel" cc="sl" country="Sierra Leone" operator="Sierra Leone Telephony" status="Operational" + 25 bands="" brand="Mobitel" cc="sl" country="Sierra Leone" operator="Mobitel" status="Reserved" 00-99 620 - 01 bands="GSM 900 / GSM 1800" brand="MTN" cc="gh" country="Ghana" operator="MTN Group" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Vodafone" cc="gh" country="Ghana" operator="Vodafone Group" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="tiGO" cc="gh" country="Ghana" operator="Millicom Ghana" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="MTN" cc="gh" country="Ghana" operator="MTN Group" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS" brand="Vodafone" cc="gh" country="Ghana" operator="Vodafone Group" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS" brand="tiGO" cc="gh" country="Ghana" operator="Millicom Ghana" status="Operational" 04 bands="CDMA2000" brand="Expresso" cc="gh" country="Ghana" operator="Kasapa / Hutchison Telecom" status="Operational" - 06 bands="GSM 900 / GSM 1800 / WCDMA" brand="Airtel" cc="gh" country="Ghana" operator="Airtel" status="Operational" - 07 bands="GSM 900 / GSM 1800 / WCDMA" brand="Globacom" cc="gh" country="Ghana" operator="Globacom Group" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="gh" country="Ghana" operator="Airtel" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS" brand="Globacom" cc="gh" country="Ghana" operator="Globacom Group" status="Operational" + 11 bands="" cc="gh" country="Ghana" operator="Netafrique Dot Com Ltd" status="" 00-99 621 20 bands="GSM 900 / GSM 1800" brand="Airtel" cc="ng" country="Nigeria" operator="Bharti Airtel Limited" status="Operational" 25 bands="CDMA2000 800 / CDMA2000 1900" brand="Visafone" cc="ng" country="Nigeria" operator="Visafone Communications Ltd." status="Operational" 30 bands="GSM 900 / GSM 1800" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" - 40 bands="GSM 900 / GSM 1800" brand="M-Tel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Non-Operational" + 40 bands="GSM 900 / GSM 1800" brand="M-Tel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Not Operational" 50 bands="GSM 900 / GSM 1800" brand="Glo" cc="ng" country="Nigeria" operator="Globacom Ltd" status="Operational" 60 bands="GSM 900 / GSM 1800" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" 00-99 622 01 bands="GSM 900" brand="Airtel" cc="td" country="Chad" operator="Bharti Airtel SA" status="Operational" - 02 bands="CDMA2000" brand="Tawali" cc="td" country="Chad" operator="Sotel Chad" status="Operational" - 03 bands="GSM 900" brand="Tigo" cc="td" country="Chad" operator="Millicom" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="Salam" cc="td" country="Chad" operator="Sotel Mobile" status="Operational" + 02 bands="CDMA2000" brand="Tawali" cc="td" country="Chad" operator="SotelTchad" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="Tigo" cc="td" country="Chad" operator="Millicom" status="Operational" + 07 bands="GSM 900 / GSM 1800" brand="Salam" cc="td" country="Chad" operator="SotelTchad" status="Operational" 00-99 623 01 bands="GSM 900" brand="CTP" cc="cf" country="Central African Republic" operator="Centrafrique Telecom Plus" status="Operational" @@ -1809,6 +1998,7 @@ 02 bands="GSM 900" brand="Moov" cc="ga" country="Gabon" operator="Atlantique Télécom (Etisalat Group) Gabon S.A." status="Operational" 03 bands="GSM 900" brand="Airtel" cc="ga" country="Gabon" operator="Airtel Gabon S.A." status="Operational" 04 bands="GSM 900" brand="Azur" cc="ga" country="Gabon" operator="USAN Gabon S.A." status="Operational" + 05 bands="" brand="RAG" cc="ga" country="Gabon" operator="Réseau de l’Administration Gabonaise" status="" 00-99 629 01 bands="GSM 900" brand="Airtel" cc="cg" country="Republic of the Congo" operator="Celtel Congo" status="Operational" @@ -1817,22 +2007,24 @@ 00-99 630 01 bands="GSM 900 / GSM 1800" brand="Vodacom" cc="cd" country="Democratic Republic of the Congo" operator="Vodacom Congo RDC sprl" status="Operational" - 02 bands="GSM 900" brand="groupe bahati" cc="cd" country="Democratic Republic of the Congo" operator="airtel Congo" status="Operational" + 02 bands="GSM 900" brand="airtel" cc="cd" country="Democratic Republic of the Congo" operator="Airtel sprl" status="Operational" 04 bands="" cc="cd" country="Democratic Republic of the Congo" operator="Cellco" status="" 05 bands="GSM 900 / GSM 1800" brand="Supercell" cc="cd" country="Democratic Republic of the Congo" operator="Supercell SPRL" status="Operational" - 10 brand="Libertis Telecom" cc="cd" country="Democratic Republic of the Congo" status="Operational" - 86 bands="GSM 900 / GSM 1800" brand="France telecom" cc="cd" country="Democratic Republic of the Congo" operator="orange.TM" status="Operational" - 89 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tigo DRC Sait Telecom" cc="cd" country="Democratic Republic of the Congo" operator="OASIS SPRL" status="Operational" - 992 bands="GSM 900" brand="lintel holding" cc="cd" country="Democratic Republic of the Congo" operator="Africell RDC sprl" status="Operational" + 10 bands="" brand="Libertis Telecom" cc="cd" country="Democratic Republic of the Congo" status="Operational" + 86 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="cd" country="Democratic Republic of the Congo" operator="Orange RDC sarl" status="Operational" + 88 bands="GSM 900 / GSM 1800" brand="YTT" cc="cd" country="Democratic Republic of the Congo" operator="Yozma Timeturns sprl" status="Not operational" + 89 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tigo" cc="cd" country="Democratic Republic of the Congo" operator="OASIS sprl" status="Operational" + 90 bands="GSM 900 / GSM 1800" brand="Africell" cc="cd" country="Democratic Republic of the Congo" operator="Africell RDC sprl" status="Operational" 00-99 631 - 02 bands="GSM 900 / GSM 1800 / LTE 2100" brand="UNITEL" cc="ao" country="Angola" operator="UNITEL S.a.r.l." status="Operational" - 04 bands="GSM 900 / UMTS 900 / LTE 1800" brand="MOVICEL" cc="ao" country="Angola" operator="MOVICEL Telecommunications S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="UNITEL" cc="ao" country="Angola" operator="UNITEL S.a.r.l." status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 1800" brand="MOVICEL" cc="ao" country="Angola" operator="MOVICEL Telecommunications S.A." status="Operational" 00-99 632 - 02 bands="GSM 900" brand="MTN Areeba" cc="gw" country="Guinea-Bissau" operator="Spacetel Guiné-Bissau S.A." status="Operational" - 03 bands="GSM 900/1800" brand="Orange" cc="gw" country="Guinea-Bissau" status="Operational" - 07 bands="GSM 900/1800" brand="Guinetel" cc="gw" country="Guinea-Bissau" status="Operational" + 01 bands="GSM 900 / GSM 1800" brand="Guinetel" cc="gw" country="Guinea-Bissau" operator="Guinétel S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="MTN Areeba" cc="gw" country="Guinea-Bissau" operator="Spacetel Guiné-Bissau S.A." status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="Orange" cc="gw" country="Guinea-Bissau" status="Operational" + 07 bands="GSM 900 / GSM 1800" brand="Guinetel" cc="gw" country="Guinea-Bissau" operator="Guinétel S.A." status="Operational" 00-99 633 01 bands="GSM 900" brand="Cable & Wireless" cc="sc" country="Seychelles" operator="Cable & Wireless Seychelles" status="Operational" @@ -1842,7 +2034,7 @@ 634 01 bands="GSM 900 / UMTS 2100" brand="Zain SD" cc="sd" country="Sudan" operator="Zain Group - Sudan" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="sd" country="Sudan" operator="MTN Sudan" status="Operational" - 05 brand="Canar Telecom" cc="sd" country="Sudan" operator="Operational" status="CDMA2000 450" + 05 bands="CDMA2000 450" brand="Canar Telecom" cc="sd" country="Sudan" status="Operational" 07 bands="GSM 1800 / UMTS 2100 / CDMA2000 800" brand="Sudani One" cc="sd" country="Sudan" operator="Sudatel Group" status="Operational" 09 brand="Privet Network" cc="sd" country="Sudan" operator="NEC" 00-99 @@ -1851,20 +2043,22 @@ 12 bands="GSM ???" brand="Rwandatel" cc="rw" country="Rwanda" operator="Rwandatel S.A." status="Not operational" 13 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tigo" cc="rw" country="Rwanda" operator="TIGO RWANDA S.A" status="Operational" 14 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="rw" country="Rwanda" operator="Airtel RWANDA" status="Operational" + 17 bands="" cc="rw" country="Rwanda" operator="Olleh Rwanda Networks" status="" 00-99 636 - 011 bands="GSM 900 / GSM 1800 / UMTS 21000" brand="ETH-MTN" cc="et" country="Ethiopia" operator="Ethio Telecom" status="Operational" - 000-999 + 01 bands="GSM 900 / GSM 1800 / UMTS 21000" brand="ETH-MTN" cc="et" country="Ethiopia" operator="Ethio Telecom" status="Operational" + 00-99 637 01 bands="GSM 900 GSM 1800 3G 2100" brand="Telesom" cc="so" country="Somalia" operator="Telesom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Somafone" cc="so" country="Somalia" operator="Somafone FZLLC" status="Operational" 10 bands="GSM 900" brand="Nationlink" cc="so" country="Somalia" operator="NationLink Telecom" status="Operational" - 25 bands="GSM 900" brand="Hormuud" cc="so" country="Somalia" operator="Hormuud Telecom Somalia Inc" status="Operational" 30 bands="GSM 900" brand="Golis" cc="so" country="Somalia" operator="Golis Telecom Somalia" status="Operational" + 50 bands="GSM 900" brand="Hormuud" cc="so" country="Somalia" operator="Hormuud Telecom Somalia Inc" status="Operational" 57 bands="GSM 900 / GSM 1800" brand="Unittel" cc="so" country="Somalia" operator="Unitted Telecom" status="Operational" 60 bands="GSM 900/ GSM 1800" brand="Nationlink Telecom" cc="so" country="Somalia" operator="Nationlink Telecom" status="Operational" + 70 bands="" cc="so" country="Somalia" operator="Onkod Telecom Ltd." status="Not operational" 71 bands="900/1800/2100" brand="Somtel" cc="so" country="Somalia" operator="2G/3G" status="Operational" - 82 bands="GSM 900 / GSM 1800 / CDMA2000" brand="Telcom" cc="so" country="Somalia" operator="Telcom Somalia" status="Operational" + 82 bands="GSM 900 / GSM 1800 / CDMA2000 / 4G LTE Alcatel-Lucent" brand="Telcom" cc="so" country="Somalia" operator="Telcom Somalia" status="Operational" 00-99 638 01 bands="GSM 900" brand="Evatis" cc="dj" country="Djibouti" operator="Djibouti Telecom SA" status="Operational" @@ -1897,11 +2091,11 @@ 66 bands="" brand="i-Tel" cc="ug" country="Uganda" operator="i-Tel Ltd" status="" 00-99 642 - 01 bands="GSM 900 / UMTS 2100" brand="Spacetel" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Spacetel" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" 02 bands="GSM 900" brand="Tempo" cc="bi" country="Burundi" operator="Africell PLC" status="Operational" 03 bands="GSM 900" brand="Onatel" cc="bi" country="Burundi" operator="Onatel" status="Operational" 07 bands="GSM 1800" brand="Smart Mobile" cc="bi" country="Burundi" operator="LACELL SU" status="Operational" - 08 brand="HiTs Telecom" cc="bi" country="Burundi" operator="HiTs Telecom" status="Revoked" + 08 bands="" brand="HiTs Telecom" cc="bi" country="Burundi" operator="HiTs Telecom" status="Not operational" 82 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Leo" cc="bi" country="Burundi" operator="Orascom Telecom (a subsidiary of Vimplecom)" status="Operational" 00-99 643 @@ -1917,11 +2111,12 @@ 646 01 bands="GSM 900 / GSM 1800" brand="Airtel" cc="mg" country="Madagascar" operator="Bharti Airtel" status="Operational" 02 bands="GSM 900" brand="Orange" cc="mg" country="Madagascar" operator="Orange Madagascar S.A." status="Operational" - 03 bands="GSM 900" brand="Sacel" cc="mg" country="Madagascar" operator="Sacel Madagascar S.A." status="Operational" + 03 bands="GSM 900" brand="Sacel" cc="mg" country="Madagascar" operator="Sacel Madagascar S.A." status="Not operational" 04 bands="GSM 900" brand="Telma" cc="mg" country="Madagascar" operator="Telma Mobile S.A." status="Operational" 00-99 647 - 00 bands="GSM 900 / GSM 1800" brand="Orange" cc="re" country="Réunion (France)" operator="Orange La Réunion" status="Operational" + 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="re" country="Réunion (France)" operator="Orange La Réunion" status="Operational" + 01 bands="" cc="re" country="Réunion (France)" operator="BJT Partners" status="" 02 bands="GSM 900 / GSM 1800" brand="Outremer" cc="re" country="Réunion (France)" operator="Outremer Telecom" status="Operational" 10 bands="GSM 900" brand="SFR Reunion" cc="re" country="Réunion (France)" operator="Societe Reunionnaise de Radiotelephone" status="Operational" 00-99 @@ -1933,7 +2128,7 @@ 649 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="MTC" cc="na" country="Namibia" operator="MTC Namibia" status="Operational" 02 bands="CDMA2000 800" brand="switch" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Leo" cc="na" country="Namibia" operator="Orascom Telecom Holding" status="Operational" + 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="TN Mobile" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" 00-99 650 01 bands="GSM 900 / GSM 1800" brand="TNM" cc="mw" country="Malawi" operator="Telecom Network Malawi" status="Operational" @@ -1944,30 +2139,33 @@ 02 bands="" cc="ls" country="Lesotho" operator="Econet Ezi-cel" status="Operational" 00-99 652 - 01 bands="GSM 900" brand="Mascom" cc="bw" country="Botswana" operator="Mascom Wireless (Pty) Limited" status="Operational" - 02 bands="GSM 900" brand="Orange" cc="bw" country="Botswana" operator="Orange (Botswana) Pty Limited" status="Operational" + 01 bands="GSM 900 / UMTS" brand="Mascom" cc="bw" country="Botswana" operator="Mascom Wireless (Pty) Limited" status="Operational" + 02 bands="GSM 900 / UMTS 2100" brand="Orange" cc="bw" country="Botswana" operator="Orange (Botswana) Pty Limited" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="BTC Mobile" cc="bw" country="Botswana" operator="Botswana Telecommunications Corporation" status="Operational" 00-99 653 10 bands="GSM 900" brand="Swazi MTN" cc="sz" country="Swaziland" operator="Swazi MTN Limited" status="Operational" 00-99 654 - 01 bands="" cc="km" country="Comoros" operator="HURI - SNPT" status="Operational" + 01 bands="" brand="Comoros Telecom" cc="km" country="Comoros" operator="HURI - SNPT" status="Operational" 00-99 655 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodacom" cc="za" country="South Africa" operator="Vodacom" status="Operational" - 02 bands="GSM 1800 / UMTS 2100" brand="Telkom Mobile / 8.ta / Telekom SA" cc="za" country="South Africa" operator="MTN" status="Operational" + 02 bands="GSM 1800 / UMTS 2100" brand="Telkom Mobile / 8.ta / Telkom SA" cc="za" country="South Africa" operator="Telkom SA" status="Operational" 06 bands="" brand="Sentech" cc="za" country="South Africa" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 2100" brand="Cell C" cc="za" country="South Africa" operator="Cell C" status="Operational" 10 bands="GSM 900 / UMTS 2100 / UMTS 900 / LTE 1800" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="Operational" 11 bands="TETRA 410" cc="za" country="South Africa" operator="South African Police Service Gauteng" status="Operational" - 13 bands="CDMA2000 800" brand="Neotel" cc="za" country="South Africa" status="Operational" + 13 bands="CDMA 800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" + 14 bands="" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="" 19 bands="LTE" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" 21 bands="TETRA 410" cc="za" country="South Africa" operator="Cape Town Metropolitan Council" status="Operational" 30 bands="" cc="za" country="South Africa" operator="Bokamoso Consortium" status="Operational" 31 bands="" cc="za" country="South Africa" operator="Karabo Telecoms (Pty) Ltd." status="Operational" 32 bands="" cc="za" country="South Africa" operator="Ilizwi Telecommunications" status="Operational" 33 bands="" cc="za" country="South Africa" operator="Thinta Thinta Telecommunications" status="Operational" + 50 bands="" cc="za" country="South Africa" operator="Ericsson South Africa (Pty) Ltd" status="" + 51 bands="" cc="za" country="South Africa" operator="Integrat (Pty) Ltd" status="" 00-99 657 01 bands="GSM 900" brand="Eritel" cc="er" country="Eritrea" operator="Eritrea Telecommunications Services Corporation" status="Operational" @@ -1980,13 +2178,14 @@ 07 bands="CDMA" brand="Sudani" country="South Sudan - SS" operator="Sudani" status="Operational" 00-99 702 - 67 bands="GSM 1900 / LTE 850 / LTE 1900" brand="DigiCell" cc="bz" country="Belize" operator="Belize Telemedia Ltd. (BTL)" status="Operational" + 67 bands="GSM 1900 / UMTS / LTE 850 / LTE 1900" brand="DigiCell" cc="bz" country="Belize" operator="Belize Telemedia Ltd. (BTL)" status="Operational" + 68 bands="" brand="INTELCO" cc="bz" country="Belize" operator="International Telecommunications Ltd." status="" 99 bands="CDMA2000" brand="Smart" cc="bz" country="Belize" operator="SpeedNet Communications Limited" status="Operational" 00-99 704 - 01 bands="CDMA2000 1900 / GSM 900 / GSM 1900 / UMTS/HSPA+ 1900" brand="Claro" cc="gt" country="Guatemala" operator="Telecomunicaciones de Guatemala, S.A." status="Operational" - 02 bands="GSM 850 / TDMA 800 / UMTS/HSPA+ 850" brand="Tigo" cc="gt" country="Guatemala" operator="Millicom / Local partners" status="Operational" - 03 bands="CDMA2000 1900 / GSM 1900 / UMTS/HSPA+ 1900" brand="movistar" cc="gt" country="Guatemala" operator="Telefónica Móviles Guatemala (Telefónica)" status="Operational" + 01 bands="CDMA 1900 / GSM 900 / GSM 1900 / UMTS 1900" brand="Claro" cc="gt" country="Guatemala" operator="Telecomunicaciones de Guatemala, S.A." status="Operational" + 02 bands="GSM 850 / TDMA 800 / UMTS 850" brand="Tigo" cc="gt" country="Guatemala" operator="Millicom / Local partners" status="Operational" + 03 bands="CDMA 1900 / GSM 1900 / UMTS 1900" brand="movistar" cc="gt" country="Guatemala" operator="Telefónica Móviles Guatemala (Telefónica)" status="Operational" 00-99 706 01 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="sv" country="El Salvador" operator="CTE Telecom Personal SA de CV América Móvil" status="Operational" @@ -1995,10 +2194,10 @@ 04 bands="GSM 850" brand="movistar" cc="sv" country="El Salvador" operator="Telefónica Móviles El Salvador" status="Operational" 00-99 708 - 001 bands="GSM 1900" brand="Claro" cc="hn" country="Honduras" operator="Servicios de Comunicaciones de Honduras S.A. de C.V." status="Operational" - 02 bands="CDMA2000 850 / GSM 850" brand="Tigo" cc="hn" country="Honduras" operator="Celtel / Tigo" status="Operational" - 30 bands="GSM 1900" brand="Hondutel" cc="hn" country="Honduras" operator="Empresa Hondureña de Telecomunicaciones" status="Operational" - 40 bands="GSM 1900" brand="DIGICEL" cc="hn" country="Honduras" operator="Digicel de Honduras" status="Operational" + 001 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="hn" country="Honduras" operator="Servicios de Comunicaciones de Honduras S.A. de C.V." status="Operational" + 002 bands="CDMA 850 / GSM 850 / UMTS 850" brand="Tigo" cc="hn" country="Honduras" operator="Celtel" status="Operational" + 030 bands="GSM 1900" brand="Hondutel" cc="hn" country="Honduras" operator="Empresa Hondureña de Telecomunicaciones" status="Operational" + 040 bands="GSM 1900" brand="Digicel" cc="hn" country="Honduras" operator="Digicel de Honduras" status="Operational" 000-999 710 21 bands="UMTS 850 / GSM 1900" brand="Claro" cc="ni" country="Nicaragua" operator="Empresa Nicaragüense de Telecomunicaciones, S.A. (ENITEL) (América Móvil)" status="Operational" @@ -2006,11 +2205,11 @@ 73 bands="UMTS 850 / GSM 1900" brand="SERCOM" cc="ni" country="Nicaragua" operator="Servicios de Comunicaciones S.A." status="Operational" 00-99 712 - 01 bands="GSM 1800 /LTE 2600, UMTS/HSPA+ 850" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" - 017 bands="GSM 1800, UMTS/HSPA+ 850" brand="'full'móvil" cc="cr" country="Costa Rica" operator="Virtualis S.A." status="Operational" - 02 bands="GSM 1800, UMTS/HSPA+ 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" + 01 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" + 02 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" 03 bands="GSM 1800 / UMTS 2100" brand="Claro" cc="cr" country="Costa Rica" operator="Claro CR Telecomunicaciones" status="Operational" - 04 bands="GSM 1800, UMTS/HSPA+ 850/2100" brand="movistar" cc="cr" country="Costa Rica" operator="Telefónica Móviles Costa Rica" status="Operational" + 04 bands="GSM 1800 / UMTS 850 / UMTS 2100" brand="movistar" cc="cr" country="Costa Rica" operator="Telefónica Móviles Costa Rica" status="Operational" + 20 bands="GSM 1800 / UMTS 850" brand="'full'móvil" cc="cr" country="Costa Rica" operator="Virtualis S.A." status="Operational" 00-99 714 01 bands="GSM 850 / UMTS 850" brand="Cable & Wireless" cc="pa" country="Panama" operator="Cable & Wireless Panama S.A." status="Operational" @@ -2019,73 +2218,91 @@ 04 bands="GSM 1900 / UMTS 1900" brand="Digicel" cc="pa" country="Panama" operator="Digicel Group" status="Operational" 00-99 716 - 06 bands="CDMA2000 850 / GSM 850 / UMTS 850" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" + 06 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700-2100" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" 07 bands="iDEN / UMTS 1900" brand="NEXTEL" cc="pe" country="Peru" operator="Americatel Perú" status="Inactive" - 10 bands="GSM 1900 / UMTS 850" brand="Claro (TIM)" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" + 10 bands="GSM 1900 / UMTS 850 / LTE 1900" brand="Claro (TIM)" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" 15 bands="GSM 1900 / UMTS 1900" brand="Viettel Mobile" cc="pe" country="Peru" operator="Viettel Peru S.A.C." status="Operational" 17 bands="iDEN / UMTS 1900" brand="NEXTEL" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" 00-99 722 - 010 bands="GSM 850 / GSM 1900" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" + 010 bands="GSM 850 / GSM 1900 / UMTS" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" 020 bands="iDEN 800" brand="Nextel" cc="ar" country="Argentina" operator="NII Holdings" status="Operational" 040 bands="" brand="Globalstar" cc="ar" country="Argentina" operator="TE.SA.M Argentina S.A." status="Operational" 070 bands="GSM 1900" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" 310 bands="GSM 1900" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 320 bands="GSM 850 / GSM 1900" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 330 bands="GSM 850 / GSM 1900" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 340 bands="GSM 850 / GSM 1900" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" + 320 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" + 330 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" + 340 bands="GSM 850 / GSM 1900 / UMTS" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" 350 bands="GSM 900" brand="PORT-HABLE" cc="ar" country="Argentina" operator="Hutchison Telecommunications Argentina S.A." status="Operational" 000-999 724 - 00 bands="IDEN 850" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Operational" + 00 bands="iDEN 850" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Operational" + 01 bands="MVNO" cc="br" country="Brazil" operator="SISTEER DO BRASIL TELECOMUNICAÇÔES" status="" 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Claro BR" cc="br" country="Brazil" operator="Claro" status="Operational" - 055 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Sercomtel" cc="br" country="Brazil" operator="Sercomtel Celular" status="Operational" - 06 bands="GSM 850/900/1800/1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" - 10 bands="GSM 850/900/1800/1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" - 11 bands="GSM 850/900/1800/1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" - 15 bands="GSM 900/1800 UMTS 850 / UMTS 2100mhz" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" + 06 bands="GSM 850 / GSM 900/ GSM 1800/ GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 10 bands="GSM 850 / GSM 900 / GSM 1800 / GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 11 bands="GSM 850 / GSM 900 / GSM 1800 / GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 15 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Sercomtel" cc="br" country="Brazil" operator="Sercomtel Celular" status="Operational" 16 bands="GSM 1800 / UMTS 2100" brand="Brasil Telecom GSM" cc="br" country="Brazil" operator="Brasil Telecom GSM" status="Phasing out" - 23 bands="GSM 850/900/1800/1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" - 31 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="Oi" cc="br" country="Brazil" operator="TNL PCS" status="Operational" - 32 bands="GSM 900/1800 UMTS 850 / UMTS 2100mhz" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" - 33 bands="GSM 900/1800 UMTS 850 / UMTS 2100mhz" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" - 34 bands="GSM 900/1800 UMTS 850 / UMTS 2100mhz" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" - 39 bands="UMTS 2100" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Deploying" + 18 bands="MVNO" cc="br" country="Brazil" operator="Datora" status="" + 23 bands="GSM 850 / GSM 900 / GSM 1800 / GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 24 bands="" cc="br" country="Brazil" operator="Amazonia Celular" status="" + 30 bands="" brand="Oi" cc="br" country="Brazil" operator="TNL PCS Oi" status="" + 31 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="Oi" cc="br" country="Brazil" operator="TNL PCS Oi" status="Operational" + 32 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" + 33 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" + 34 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100" brand="CTBC Celular" cc="br" country="Brazil" operator="CTBC Celular S.A." status="Operational" + 35 bands="" cc="br" country="Brazil" operator="Telcom Telecomunicações" status="" + 36 bands="" cc="br" country="Brazil" operator="Options Telecomunicações" status="" + 37 bands="" brand="aeiou" cc="br" country="Brazil" operator="Unicel" status="Not operational" + 38 bands="" brand="Claro BR" cc="br" country="Brazil" operator="Claro" status="" + 39 bands="UMTS 2100" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Reserved" + 54 bands="MVNO" cc="br" country="Brazil" operator="PORTO SEGURO TELECOMUNICAÇÔES" status="" 00-99 730 01 bands="GSM 1900 / UMTS 1900" brand="entel" cc="cl" country="Chile" operator="Entel PCS Telecomunicaciones S.A." status="Operational" - 02 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" + 02 bands="GSM 850 / UMTS 850 / UMTS 1900 / LTE 2600" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" 03 bands="GSM 1900 / UMTS 1900 / UMTS 850 / LTE 2600" brand="Claro" cc="cl" country="Chile" operator="Claro Chile S.A." status="Operational" 04 bands="iDEN 800" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" - 07 bands="Same of movistar (virtual operator)" brand="Virgin Mobile" cc="cl" country="Chile" operator="Virgin Mobile" status="Operational" - 08 bands="UMTS 1700/2100 (AWS) / UMTS 850" brand="VTR Móvil" cc="cl" country="Chile" operator="VTR S.A." status="Operational" - 09 bands="UMTS 1700 / UMTS 2100" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" + 05 bands="" cc="cl" country="Chile" operator="Multikom S.A." status="" + 06 bands="" cc="cl" country="Chile" operator="Blue Two Chile S.A." status="" + 07 bands="MVNO" brand="Virgin Mobile" cc="cl" country="Chile" operator="Virgin Mobile" status="Operational" + 08 bands="MVNO" brand="VTR Móvil" cc="cl" country="Chile" operator="VTR S.A." status="Operational" + 09 bands="UMTS 1700/2100 (AWS)" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" 10 bands="GSM 1900 / UMTS 1900" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" + 11 bands="" cc="cl" country="Chile" operator="Celupago S.A." status="" + 12 bands="" cc="cl" country="Chile" operator="Telestar Móvil S.A." status="" + 13 bands="" cc="cl" country="Chile" operator="Tribe Mobile Chile SPA" status="" + 14 bands="" cc="cl" country="Chile" operator="Netline Telefónica Móvil Ltda" status="" + 15 bands="" cc="cl" country="Chile" operator="Cibeles Telecom S.A." status="" 99 bands="GSM 1900 / UMTS 1900 (Residential)." brand="Will" cc="cl" country="Chile" operator="WILL Telefonía" status="Operational" 00-99 732 001 bands="" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A." status="Operational" 002 bands="" brand="Edatel" cc="co" country="Colombia" operator="Edatel S.A." status="Operational" + 020 bands="" cc="co" country="Colombia" operator="Emtelsa" status="" + 099 bands="GSM 900" brand="EMCALI" cc="co" country="Colombia" operator="Empresas Municipales de Cali" status="Operational" 101 bands="GSM 850 / GSM 1900" brand="Claro" cc="co" country="Colombia" operator="Claro (Comcel)" status="Operational" - 102 bands="GSM 850 / GSM 1900 / CDMA2000 850" brand="movistar" cc="co" country="Colombia" operator="Bellsouth Colombia" status="Operational" + 102 bands="GSM 850 / GSM 1900 / CDMA 850" brand="movistar" cc="co" country="Colombia" operator="Bellsouth Colombia" status="Operational" 103 bands="GSM 1900" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil" status="Operational" 111 bands="GSM 1900" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil" status="Operational" - 123 bands="GSM 850 / GSM 1900 / CDMA2000 850" brand="movistar" cc="co" country="Colombia" operator="Telefónica Móviles Colombia" status="Operational" + 123 bands="GSM 850 / GSM 1900 / CDMA 850" brand="movistar" cc="co" country="Colombia" operator="Telefónica Móviles Colombia" status="Operational" + 130 bands="GSM 850 / iDEN" brand="AVANTEL" cc="co" country="Colombia" operator="Avantel S.A.S" status="Operational" 000-999 734 - 01 bands="GSM 900 / UMTS 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Operational" - 02 bands="GSM 900 / UMTS 900 / LTE 1800" brand="Digitel GSM" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Operational" - 03 bands="GSM 900 / UMTS 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Operational" - 04 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 1900" brand="movistar" cc="ve" country="Venezuela" operator="Telefónica Móviles Venezuela" status="Operational" + 01 bands="GSM 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Not operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 1800" brand="Digitel GSM" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Operational" + 03 bands="GSM 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Not operational" + 04 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="movistar" cc="ve" country="Venezuela" operator="Telefónica Móviles Venezuela" status="Operational" 06 bands="CDMA2000 850 / GSM 850 / UMTS 1900" brand="Movilnet" cc="ve" country="Venezuela" operator="Telecomunicaciones Movilnet" status="Operational" 00-99 736 01 bands="GSM 1900" brand="Nuevatel" cc="bo" country="Bolivia" operator="Nuevatel PCS De Bolivia SA" status="Operational" - 02 bands="GSM 1900" brand="Entel" cc="bo" country="Bolivia" operator="Entel SA" status="Operational" - 03 bands="GSM 850" brand="Tigo" cc="bo" country="Bolivia" operator="Telefónica Celular De Bolivia S.A" status="Operational" + 02 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="Entel" cc="bo" country="Bolivia" operator="Entel SA" status="Operational" + 03 bands="GSM 850 / UMTS" brand="Tigo" cc="bo" country="Bolivia" operator="Telefónica Celular De Bolivia S.A" status="Operational" 00-99 738 01 bands="GSM 900" brand="Digicel" cc="gy" country="Guyana" operator="U-Mobile (Cellular) Inc." status="Operational" @@ -2094,11 +2311,12 @@ 740 00 bands="GSM 850 / UMTS 900 / UMTS 1900" brand="Movistar" cc="ec" country="Ecuador" operator="Otecel S.A." status="Operational" 01 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="Claro" cc="ec" country="Ecuador" operator="CONECEL S.A." status="Operational" - 02 bands="GSM 850 / CDMA2000 1900" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" + 02 bands="GSM 850 / CDMA 1900" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" 00-99 744 01 bands="GSM 1900 / UMTS 900" brand="VOX" cc="py" country="Paraguay" operator="Hola Paraguay S.A" status="Operational" 02 bands="GSM 1900 / UMTS 1900" brand="Claro/Hutchison" cc="py" country="Paraguay" operator="AMX Paraguay S.A." status="Operational" + 03 bands="" cc="py" country="Paraguay" operator="Compañia Privada de Comunicaciones S.A." status="" 04 bands="GSM 850 / UMTS 850" brand="Tigo" cc="py" country="Paraguay" operator="Telefónica Celular Del Paraguay S.A. (Telecel)" status="Operational" 05 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1900" brand="Personal" cc="py" country="Paraguay" operator="Núcleo S.A(TIM)" status="Operational" 06 bands="GSM 1800 / LTE 1700" brand="Copaco" cc="py" country="Paraguay" operator="Copaco S.A." status="Operational" @@ -2113,42 +2331,48 @@ 07 bands="GSM 850/1900 / UMTS 850" brand="Movistar" cc="uy" country="Uruguay" operator="Telefónica Móviles Uruguay" status="Operational" 10 bands="GSM/UMTS 1900" brand="Claro" cc="uy" country="Uruguay" operator="AM Wireless Uruguay S.A." status="Operational" 00-99 +750 + 001 bands="GSM 900" brand="sure" cc="fk" country="Falkland Islands (United Kingdom)" operator="Batelco" status="Operational" + 000-999 901 - 01 bands="Satellite" brand="ICO" country="International" operator="ICO Satellite Management" status="Operational" - 02 bands="" country="International" operator="Unassigned" status="Returned spare" - 03 bands="Satellite" brand="Iridium" country="International" status="Operational" - 04 bands="Satellite" country="International" operator="Unassigned" status="Returned spare" - 05 bands="Satellite" country="International" operator="Thuraya RMSS Network" status="Operational" - 06 bands="Satellite" country="International" operator="Thuraya Satellite Telecommunications Company" status="Operational" - 07 bands="" country="International" operator="Unassigned" status="Returned spare" - 08 bands="" country="International" operator="Unassigned" status="Returned spare" - 09 bands="" country="International" operator="Unassigned" status="Returned spare" - 10 bands="Satellite" brand="ACeS" country="International" status="Operational" - 11 bands="Satellite" brand="Inmarsat" country="International" status="Operational" - 12 bands="GSM 1800" brand="Telenor" country="International" operator="Maritime Communications Partner AS" status="Operational" - 13 bands="GSM 1800" brand="GSM.AQ" country="International" operator="Global Networks Switzerland Inc." status="Operational" - 14 bands="GSM 1800" country="International" operator="AeroMobile AS" status="" - 15 bands="GSM 1800" brand="OnAir" country="International" operator="OnAir Switzerland Sarl" status="Operational" - 16 bands="" country="International" operator="Jasper Systems" status="Operational" - 17 bands="GSM 1800" brand="Navitas" country="International" status="Operational" - 18 bands="GSM 900 / GSM 1900 / CDMA2000 1900" brand="Cellular @Sea" country="International" operator="AT&T Mobility" status="Operational" - 19 bands="" country="International" operator="Vodafone Malta Maritime" status="Operational" - 20 bands="" country="International" operator="Intermatica" status="" - 21 bands="" country="International" operator="Unassigned" status="Returned spare" - 22 bands="" country="International" operator="MediaLincc Ltd" status="" - 23 bands="" country="International" operator="Unassigned" status="Returned spare" - 24 bands="" brand="iNum" country="International" operator="Voxbone" status="" - 25 bands="" country="International" operator="Unassigned" status="Returned spare" - 26 bands="" brand="TIM" country="International" operator="Telecom Italia" status="Operational" - 27 bands="" brand="OnAir" country="International" operator="OnAir" status="Operational" - 28 bands="Roaming SIM" brand="Vodafone" country="International" operator="GDSP (Vodafone's Global Data Service Platform)" status="Operational" - 29 bands="" brand="Telenor" country="International" status="" - 30 bands="" country="International" operator="Unassigned" status="Returned spare" - 31 bands="GSM 900" brand="Orange" country="International" operator="Orange S.A." status="Operational" - 32 bands="GSM 900" brand="Sky High" country="International" operator="MegaFon" status="Operational" - 33 bands="" country="International" operator="Smart Communications" status="" - 34 bands="" country="International" operator="tyntec GmbH" status="" - 35 bands="" country="International" operator="Globecomm Network Services" status="" - 36 bands="GSM 1800" country="International" operator="Azerfon" status="Operational" - 88 bands="" country="International" operator="UN Office for the Coordination of Humanitarian Affairs (OCHA)" status="" + 01 bands="Satellite" brand="ICO" country="International operators" operator="ICO Satellite Management" status="Operational" + 02 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 03 bands="Satellite" brand="Iridium" country="International operators" status="Operational" + 04 bands="Satellite" country="International operators" operator="Unassigned" status="Returned spare" + 05 bands="Satellite" country="International operators" operator="Thuraya RMSS Network" status="Operational" + 06 bands="Satellite" country="International operators" operator="Thuraya Satellite Telecommunications Company" status="Operational" + 07 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 08 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 09 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 10 bands="Satellite" brand="ACeS" country="International operators" status="Operational" + 11 bands="Satellite" brand="Inmarsat" country="International operators" status="Operational" + 12 bands="GSM 1800" brand="Telenor" country="International operators" operator="Maritime Communications Partner AS" status="Operational" + 13 bands="GSM 1800" brand="GSM.AQ" country="International operators" operator="Global Networks Switzerland Inc." status="Operational" + 14 bands="GSM 1800" country="International operators" operator="AeroMobile AS" status="" + 15 bands="GSM 1800" brand="OnAir" country="International operators" operator="OnAir Switzerland Sarl" status="Operational" + 16 bands="" country="International operators" operator="Jasper Systems" status="Operational" + 17 bands="GSM 1800" brand="Navitas" country="International operators" status="Operational" + 18 bands="GSM 900 / GSM 1900 / CDMA2000 1900" brand="Cellular @Sea" country="International operators" operator="AT&T Mobility" status="Operational" + 19 bands="" country="International operators" operator="Vodafone Malta Maritime" status="Operational" + 20 bands="" country="International operators" operator="Intermatica" status="" + 21 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 22 bands="" country="International operators" operator="MediaLincc Ltd" status="" + 23 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 24 bands="" brand="iNum" country="International operators" operator="Voxbone" status="" + 25 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 26 bands="" brand="TIM" country="International operators" operator="Telecom Italia" status="Operational" + 27 bands="" brand="OnAir" country="International operators" operator="OnAir" status="Operational" + 28 bands="Roaming SIM" brand="Vodafone" country="International operators" operator="GDSP (Vodafone's Global Data Service Platform)" status="Operational" + 29 bands="" brand="Telenor" country="International operators" status="" + 30 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 31 bands="GSM 900" brand="Orange" country="International operators" operator="Orange S.A." status="Operational" + 32 bands="GSM 900" brand="Sky High" country="International operators" operator="MegaFon" status="Operational" + 33 bands="" country="International operators" operator="Smart Communications" status="" + 34 bands="" country="International operators" operator="tyntec GmbH" status="" + 35 bands="" country="International operators" operator="Globecomm Network Services" status="" + 36 bands="GSM 1800" country="International operators" operator="Azerfon" status="Operational" + 37 bands="2G, 3G, 4G Roaming" country="International operators" operator="Transatel" status="Operational" + 39 bands="" country="International operators" operator="MTX Connect Ltd" status="" + 40 bands="" country="International operators" operator="Deutsche Telekom AG" status="" + 88 bands="" country="International operators" operator="UN Office for the Coordination of Humanitarian Affairs (OCHA)" status="" 00-99 diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index d46d6dd8..a9d2051a 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,14 +1,13 @@ # generated from RangeMessage.xml, downloaded from # https://www.isbn-international.org/export_rangemessage.xml -# file serial 95adc47f-d968-4bd9-bee6-5aa3a54017e6 -# file date Thu, 19 Jun 2014 16:00:12 CEST +# file serial 792b02d4-0ff4-431b-b6a0-a2a377c6ce69 +# file date Mon, 13 Oct 2014 17:30:04 CEST 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" 00-19,200-699,7000-8499,85000-89999,900000-949999,9500000-9999999 1 agency="English language" - 00-09,100-327,328-329,330-399,4000-5499,55000-86979,869800-998999 - 9990000-9999999 + 00-09,100-329,330-399,4000-5499,55000-86979,869800-998999,9990000-9999999 2 agency="French language" 00-19,200-349,35000-39999,400-699,7000-8399,84000-89999,900000-949999 9500000-9999999 @@ -28,14 +27,15 @@ 601 agency="Kazakhstan" 00-19,200-699,7000-7999,80000-84999,85-99 602 agency="Indonesia" - 00-10,1100-1199,1200-1399,14000-14999,1500-1699,17000-17999,18000-18999 - 19000-19999,200-699,70000-74999,7500-7999,8000-9499,95000-99999 + 00-08,0900-1099,1100-1199,1200-1399,14000-14999,1500-1699,17000-17999 + 18000-18999,19000-19999,200-699,70000-74999,7500-7999,8000-9499 + 95000-99999 603 agency="Saudi Arabia" 00-04,05-49,500-799,8000-8999,90000-99999 604 agency="Vietnam" 0-4,50-89,900-979,9800-9999 605 agency="Turkey" - 01-09,100-399,4000-5999,60000-89999,9000-9999 + 01-02,030-039,04-09,100-399,4000-5999,60000-89999,9000-9999 606 agency="Romania" 0-0,10-49,500-799,8000-9199,92000-99999 607 agency="Mexico" @@ -79,7 +79,8 @@ 00-13,140-149,15000-19999,200-699,7000-8499,85000-89999,9000-9199 920000-923999,92400-92999,930000-949999,95000-96999,9700-9999 85 agency="Brazil" - 00-19,200-599,60000-69999,7000-8499,85000-89999,900000-979999,98000-99999 + 00-19,200-549,5500-5999,60000-69999,7000-8499,85000-89999,900000-979999 + 98000-99999 86 agency="former Yugoslavia" 00-29,300-599,6000-7999,80000-89999,900000-999999 87 agency="Denmark" @@ -93,7 +94,7 @@ 00-19,200-499,5000-6999,70000-79999,800000-849999,8500-8999,90-90,94-94 91 agency="Sweden" 0-1,20-49,500-649,7000-7999,85000-94999,970000-999999 - 92 agency="International NGO Publishers and EC Organizations" + 92 agency="International NGO Publishers and EU Organizations" 0-5,60-79,800-899,9000-9499,95000-98999,990000-999999 93 agency="India" 00-09,100-499,5000-7999,80000-94999,950000-999999 @@ -225,7 +226,7 @@ 9942 agency="Ecuador" 00-84,8500-8999,900-984,9850-9999 9943 agency="Uzbekistan" - 00-29,300-399,4000-9999 + 00-29,300-399,4000-9749,975-999 9944 agency="Turkey" 0000-0999,100-499,5000-5999,60-69,700-799,80-89,900-999 9945 agency="Dominican Republic" @@ -237,7 +238,7 @@ 9948 agency="United Arab Emirates" 00-39,400-849,8500-9999 9949 agency="Estonia" - 0-0,10-39,400-899,9000-9999 + 0-0,10-39,400-749,75-89,9000-9999 9950 agency="Palestine" 00-29,300-849,8500-9999 9951 agency="Kosova" @@ -288,7 +289,7 @@ 9974 agency="Uruguay" 0-2,30-54,550-749,7500-9499,95-99 9975 agency="Moldova" - 0-0,100-399,4000-4499,45-89,900-949,9500-9999 + 0-0,100-299,3000-3999,4000-4499,45-89,900-949,9500-9999 9976 agency="Tanzania" 0-5,60-89,900-989,9900-9999 9977 agency="Costa Rica" @@ -365,7 +366,7 @@ 99925 agency="Paraguay" 0-3,40-79,800-999 99926 agency="Honduras" - 0-0,10-59,600-899,90-99 + 0-0,10-59,600-869,87-89,90-99 99927 agency="Albania" 0-2,30-59,600-999 99928 agency="Georgia" @@ -428,7 +429,7 @@ 99957 agency="Malta" 0-1,20-79,800-999 99958 agency="Bahrain" - 0-4,50-94,950-999 + 0-4,50-93,940-949,950-999 99959 agency="Luxembourg" 0-2,30-59,600-999 99960 agency="Malawi" @@ -438,13 +439,13 @@ 99962 agency="Mongolia" 0-4,50-79,800-999 99963 agency="Cambodia" - 00-49,500-999 + 00-49,500-919,92-99 99964 agency="Nicaragua" 0-1,20-79,800-999 99965 agency="Macau" 0-3,40-69,700-999 99966 agency="Kuwait" - 0-2,30-69,700-799 + 0-2,30-69,700-799,80-94 99967 agency="Paraguay" 0-1,20-59,600-899 99968 agency="Botswana" diff --git a/stdnum/isil.dat b/stdnum/isil.dat index aad346c2..fc5ba0ea 100644 --- a/stdnum/isil.dat +++ b/stdnum/isil.dat @@ -9,9 +9,9 @@ CA$ country="Canada" ra_url="http://www.collectionscanada.ca/ill/s16-206-e.html# CH$ country="Switzerland" ra_url="http://www.nb.admin.ch/slb/slb_professionnel/01540/index.html?lang=en" ra="Swiss National Library" CY$ country="Cyprus" ra_url="http://www.cut.ac.cy/library/english/isil_reg_agent.htm" ra="Cyprus University of Technology Library" DE$ country="Germany" ra_url="http://sigel.staatsbibliothek-berlin.de/" ra="Staatsbibliothek zu Berlin" -DK$ country="Denmark" ra_url="http://www.bibliotekogmedier.dk/engelsk/library/national-solutions/standards/danish-library-number/" ra="Danish Agency for Culture" -EG$ country="Egypt" ra_url="http://www.sti.sci.eg/focal_point.htm" ra="Egyptian National Scientific and Technical Information Network (ENSTINET)" -FI$ country="Finland" ra_url="http://www.lib.helsinki.fi/english/libraries/standards/ISIL.htm" ra="The National Library of Finland" +DK$ country="Denmark" ra_url="http://www.kulturstyrelsen.dk/english/institutions/libraries/national-solutions/standards/danish-library-number/" ra="Danish Agency for Culture" +EG$ country="Egypt" ra_url="http://www.sti.sci.eg/index.php?option=com_content&view=article&id=30:focal-point&catid=1:pages&Itemid=56" ra="Egyptian National Scientific and Technical Information Network (ENSTINET)" +FI$ country="Finland" ra_url="http://www.nationallibrary.fi/libraries/standards/isil.html" ra="The National Library of Finland" FR$ country="France" ra_url="http://www.abes.fr" ra="Agence Bibliographique de l'Enseignement Superieur" GB$ country="United Kingdom" ra_url="http://www.bl.uk/bibliographic/isilagency.html" ra="British Library" GL$ country="Greenland" ra_url="http://www.katak.gl/ISIL/Greenlandic_library_identifiers.html" ra="Central and Public Library of Greenland" @@ -22,8 +22,9 @@ JP$ country="Japan" ra_url="http://www.ndl.go.jp/en/library/isil/index.html" ra= KR$ country="Republic of Korea" ra_url="http://www.nl.go.kr/isil/" ra="The National Library of Korea" LU$ country="Luxembourg" ra_url="http://www.anlux.lu" ra="Archives nationales de Luxembourg" NL$ country="The Netherlands" ra_url="http://www.kb.nl/expertise/voor-bibliotheken/interbibliotheciar-leenverkeer/internationale-standard-identifier-for-libraries-isil" ra="Koninklijke Bibliotheek, National Library of the Netherlands" -NO$ country="Norway" ra_url="http://www.nb.no/html/tildeling_av_nasjonalt_bibliot.html" ra="National Library of Norway" -NZ$ country="New Zealand" ra_url="http://www.natlib.govt.nz/en/services/6docsupply.html#sect1" ra="National Library of New Zealand Te Puna Mātauranga o Aotearoa" +NO$ country="Norway" ra_url="http://www.nb.no/" ra="National Library of Norway" +NZ$ country="New Zealand" ra_url="http://natlib.govt.nz/" ra="National Library of New Zealand Te Puna Matauranga o Aotearoa" +QA$ country="Qatar" ra_url="http://www.qnl.qa/" ra="Qatar National Library (QNL)" RU$ country="Russian Federation" ra_url="http://english.gpntb.ru/" ra="Russian National Public Library for Science and Technology" SI$ country="The Republic of Slovenia" ra_url="http://www.nuk.uni-lj.si/nukeng3.asp?id=311364382" ra="National and University Library" US$ country="United States of America" ra="Library of Congress - under registration" From 72c0ff14f6c1e7da4b6a62fb8d940c35a74e68a8 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 19 Oct 2014 19:10:40 +0200 Subject: [PATCH 017/654] Remove unused import --- stdnum/iso6346.py | 1 - 1 file changed, 1 deletion(-) diff --git a/stdnum/iso6346.py b/stdnum/iso6346.py index 07d1a854..2a729d03 100644 --- a/stdnum/iso6346.py +++ b/stdnum/iso6346.py @@ -37,7 +37,6 @@ """ import re -import string from stdnum.exceptions import InvalidChecksum, InvalidFormat, InvalidLength, \ ValidationError From 147eeb11337d7feb2efffb96065e38140abe94dd Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 19 Oct 2014 19:11:16 +0200 Subject: [PATCH 018/654] Get files ready for 1.0 release --- ChangeLog | 195 +++++++++++++++++++++++++++++++ NEWS | 18 +++ README | 10 +- docs/index.rst | 8 ++ docs/stdnum.ch.ssn.rst | 5 + docs/stdnum.cn.ric.rst | 5 + docs/stdnum.ec.ci.rst | 5 + docs/stdnum.ec.ruc.rst | 5 + docs/stdnum.eu.at_02.rst | 5 + docs/stdnum.iso6346.rst | 5 + docs/stdnum.it.codicefiscale.rst | 5 + docs/stdnum.us.rtn.rst | 5 + getnumlist.py | 5 - setup.py | 10 +- stdnum/__init__.py | 12 +- 15 files changed, 286 insertions(+), 12 deletions(-) create mode 100644 docs/stdnum.ch.ssn.rst create mode 100644 docs/stdnum.cn.ric.rst create mode 100644 docs/stdnum.ec.ci.rst create mode 100644 docs/stdnum.ec.ruc.rst create mode 100644 docs/stdnum.eu.at_02.rst create mode 100644 docs/stdnum.iso6346.rst create mode 100644 docs/stdnum.it.codicefiscale.rst create mode 100644 docs/stdnum.us.rtn.rst diff --git a/ChangeLog b/ChangeLog index 1d546ef4..b42d1f34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,198 @@ +2014-10-19 Arthur de Jong + + * [72c0ff1] stdnum/iso6346.py: Remove unused import + +2014-10-19 Arthur de Jong + + * [e713cc7] stdnum/iban.dat, stdnum/imsi.dat, stdnum/isbn.dat, + stdnum/isil.dat: Update database files + +2014-10-13 Denis Krienbühl + + * [256aa49] stdnum/ch/__init__.py, stdnum/ch/ssn.py: Adds the + Swiss social security number + + Also known as "Sozialversicherungsnummer" / "Neue AHV Nummer". + +2014-10-18 Arthur de Jong + + * [2cc50e2] stdnum/eu/at_02.py, stdnum/iban.py, stdnum/imei.py, + stdnum/iso7064/mod_11_10.py, stdnum/iso7064/mod_11_2.py, + stdnum/iso7064/mod_37_2.py, stdnum/iso7064/mod_37_36.py, + stdnum/iso7064/mod_97_10.py, stdnum/luhn.py, stdnum/util.py, + stdnum/verhoeff.py: Only catch Exception + +2014-10-17 Arthur de Jong + + * [e2948bb] : Add Ecuadorian CI and RUC numbers + + Add modules for Ecuadorian Identification Card (CI - Cédula + de identidad) and Fiscal Numbers (RUC - Registro Único de + Contribuyentes) + + See: https://github.com/arthurdejong/python-stdnum/pull/12 + +2014-10-17 Arthur de Jong + + * [e5250be] stdnum/ec/ci.py, stdnum/ec/ruc.py, + tests/test_ec_ci.doctest, tests/test_ec_ruc.doctest: Validate + parts of numbers + + This raises exceptions when the provice or establishment number + part of the number contains invalid values. + +2014-10-17 Arthur de Jong + + * [10a044f] stdnum/ec/ci.py, stdnum/ec/ruc.py: Refactor checksum + functions + + Use the CI checks from within the RUC module for natural RUC + numbers (thereby eliminating a bug in the RUC checksum calculation) + and simplify the checksum functions. + +2014-10-17 Arthur de Jong + + * [f61b855] stdnum/ec/ci.py, stdnum/ec/ruc.py, + tests/test_ec_ci.doctest, tests/test_ec_ruc.doctest: Use + dedicated doctests + + This moves a number of the existing test cases to dedicated doctest + files and extend the tests with more numbers and corner cases. + + This also fixes a few docstrings. + +2014-10-12 Jonathan Finlay + + * [e8f1ca6] stdnum/ec/__init__.py, stdnum/ec/ci.py, stdnum/ec/ruc.py: + Add Ecuadorian CI and RUC numbers + + Add modules for Ecuadorian Identification Card (CI - Cédula + de identidad) and Fiscal Numbers (RUC - Registro Único de + Contribuyentes) + +2014-10-06 Arthur de Jong + + * [2700b7a] : Add Chinese Resident Identity Card Number + +2014-10-06 Jiangge Zhang + + * [141d576] stdnum/cn/ric.py, tests/test_cn_ric.doctest: Support + the Resident Identity Card Number of People's Republic China + +2014-10-05 Jiangge Zhang + + * [10ae548] getcnloc.py, stdnum/cn/loc.dat: Download locations + from the China (PRC) government site + +2014-10-05 Jiangge Zhang + + * [e9eb546] stdnum/cn/__init__.py: Add stdnum.cn package for Chinese + (PRC) numbers + +2014-10-05 Arthur de Jong + + * [97ac94d] stdnum/my/nric.py, tests/test_my_nric.doctest: Update + NRIC tests + +2014-10-05 Arthur de Jong + + * [123e9cb] getmybp.py, stdnum/my/bp.dat: Update URLs for Malaysian + code lists + + This updates the URLs for the state and country codes as published + by the National Registration Department of Malaysia and changes + the parsing to the new page layout. + + This also updates the data file. + + https://github.com/arthurdejong/python-stdnum/issues/14 + +2014-09-01 Tony Bajan + + * [86f60a2] stdnum/us/rtn.py: Add US bank routing transit numbers + +2014-07-05 Arthur de Jong + + * [fbb0316] getisbn.py: Use ElementTree for simpler XML parsing + +2014-07-05 Arthur de Jong + + * [03e4f97] getisbn.py, stdnum/isbn.dat: Fix getisbn script and + update ISBN data file + +2014-04-11 Arthur de Jong + + * [26517fe] getnumlist.py, stdnum/__init__.py: Improve package + docstring formatting and show example + +2014-03-18 Sharoon Thomas + + * [85dd6f2] stdnum/iso6346.py, tests/test_iso6346.doctest: Add + support for ISO6346 + + Add validation and creation of check digit for ISO6346 codes. + + See: https://github.com/arthurdejong/python-stdnum/pull/9 + +2014-03-05 Jussi Räsänen + + * [2405c89] stdnum/eu/vat.py: Added a simple backwards compability + check + +2014-02-17 Arthur de Jong + + * [a4012f5] stdnum/ie/pps.py, stdnum/ie/vat.py, + tests/test_eu_vat.doctest: Add support for 2013 extension of + Irish PPS Numbers + + References: - https://www.welfare.ie/en/Pages/PPSN.aspx - + http://www.citizensinformation.ie/en/social_welfare/irish_social_welfare_system/personal_public_service_number.html +2014-02-06 Arthur de Jong + + * [71d9837] stdnum/at_02.py, stdnum/eu/at_02.py: Rename AT-02 + module to stdnum.eu.at_02 + +2014-02-05 Sergi Almacellas Abellana + + * [099078e] stdnum/at_02.py: Add SEPA Creditor identifier (AT-02) + +2014-02-02 Arthur de Jong + + * [1ac00a0] stdnum/it/codicefiscale.py, + tests/test_it_codicefiscale.doctest: Add an Italian Codice + Fiscale module + + This module validates 16 digit Italian tax codes for individuals. + https://en.wikipedia.org/wiki/Italian_fiscal_code_card + + It is based on the pycodicefiscale module that can be found here: + https://github.com/baxeico/pycodicefiscale + + Functions have been renamed to follow the stdnum naming scheme: + isvalid() -> is_valid(), control_code -> calc_check_digit(), + get_birthday() -> get_birth_date(), get_sex() -> get_gender(). The + build() function for generating tax codes (based on name, + birth place and date) has been left out because this number + cannot be uniquely constructed with this information alone + (numbers are issued by the Italian tax office with a mechanism + handle duplicates). + + Addresses trac ticket #9. + +2014-01-01 Arthur de Jong + + * [c3d669c] setup.py: Remove requirement on distribute + + This accidentally slipped into 907e410. 2013-12-31 Arthur de +Jong + + * [d933aab] .gitignore, ChangeLog, NEWS, README, docs/index.rst, + docs/stdnum.my.nric.rst, docs/stdnum.nl.brin.rst, + docs/stdnum.nl.postcode.rst, docs/stdnum.us.atin.rst, + docs/stdnum.us.ein.rst, docs/stdnum.us.itin.rst, + docs/stdnum.us.ptin.rst, docs/stdnum.us.tin.rst, getiban.py, + getimsi.py, stdnum/__init__.py: Get files ready for 0.9 release + 2013-12-31 Arthur de Jong * [5c1765e] stdnum/iban.dat, stdnum/isbn.dat: Update database files diff --git a/NEWS b/NEWS index 47a403bd..d64ee92a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,21 @@ +changes from 0.9 to 1.0 +----------------------- + +* add modules for the following number formats: + - Swiss social security number ("Sozialversicherungsnummer") + - RIC No. (Chinese Resident Identity Card Number) + - CI (Cédula de identidad, Ecuadorian personal identity code) + - RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) + - SEPA Identifier of the Creditor (AT-02) + - ISO 6346 (International standard for container identification) + - Codice Fiscale (Italian tax code for individuals) + - RTN (Routing transport number) +* Add support for 2013 extension of Irish PPS Numbers +* update getisbn script +* update getmybp URLs for Malaysian code lists +* various other minor improvements + + changes from 0.8.1 to 0.9 ------------------------- diff --git a/README b/README index b5b40239..1fd9612b 100644 --- a/README +++ b/README @@ -15,6 +15,8 @@ Currently this package supports the following formats: * PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) * VAT (Идентификационен номер по ДДС, Bulgarian VAT number) * CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) + * Swiss social security number ("Sozialversicherungsnummer") + * RIC No. (Chinese Resident Identity Card Number) * Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) * DIČ (Daňové identifikační číslo, Czech VAT number) * RČ (Rodné číslo, the Czech birth number) @@ -22,11 +24,14 @@ Currently this package supports the following formats: * CPR (personnummer, the Danish citizen number) * CVR (Momsregistreringsnummer, Danish VAT number) * EAN (International Article Number) + * CI (Cédula de identidad, Ecuadorian personal identity code) + * RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) * KMKR (Käibemaksukohuslase, Estonian VAT number) * CIF (Certificado de Identificación Fiscal, Spanish company tax number) * DNI (Documento nacional de identidad, Spanish personal identity codes) * NIE (Número de Identificación de Extranjeros, Spanish foreigner number) * NIF (Número de Identificación Fiscal, Spanish VAT number) + * SEPA Identifier of the Creditor (AT-02) * VAT (European Union VAT number) * ALV nro (Arvonlisäveronumero, Finnish VAT number) * HETU (Henkilötunnus, Finnish personal identity code) @@ -46,7 +51,9 @@ Currently this package supports the following formats: * ISBN (International Standard Book Number) * ISIL (International Standard Identifier for Libraries) * ISMN (International Standard Music Number) + * ISO 6346 (International standard for container identification) * ISSN (International Standard Serial Number) + * Codice Fiscale (Italian tax code for individuals) * Partita IVA (Italian VAT number) * PVM (Pridėtinės vertės mokestis mokėtojo kodas, Lithuanian VAT number) * TVA (taxe sur la valeur ajoutée, Luxembourgian VAT number) @@ -71,6 +78,7 @@ Currently this package supports the following formats: * EIN (U.S. Employer Identification Number) * ITIN (U.S. Individual Taxpayer Identification Number) * PTIN (U.S. Preparer Tax Identification Number) + * RTN (Routing transport number) * SSN (U.S. Social Security Number) * TIN (U.S. Taxpayer Identification Number) @@ -115,7 +123,7 @@ also work with older versions of Python. Copyright --------- -Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +Copyright (C) 2010-2014 Arthur de Jong and others This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public diff --git a/docs/index.rst b/docs/index.rst index 513de766..c7a7acc0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -91,6 +91,8 @@ Available formats bg.pnf bg.vat br.cpf + ch.ssn + cn.ric cy.vat cz.dic cz.rc @@ -98,11 +100,14 @@ Available formats dk.cpr dk.cvr ean + ec.ci + ec.ruc ee.kmkr es.cif es.dni es.nie es.nif + eu.at_02 eu.vat fi.alv fi.hetu @@ -122,7 +127,9 @@ Available formats isbn isil ismn + iso6346 issn + it.codicefiscale it.iva lt.pvm lu.tva @@ -147,5 +154,6 @@ Available formats us.ein us.itin us.ptin + us.rtn us.ssn us.tin diff --git a/docs/stdnum.ch.ssn.rst b/docs/stdnum.ch.ssn.rst new file mode 100644 index 00000000..53a1d78d --- /dev/null +++ b/docs/stdnum.ch.ssn.rst @@ -0,0 +1,5 @@ +stdnum.ch.ssn +============= + +.. automodule:: stdnum.ch.ssn + :members: diff --git a/docs/stdnum.cn.ric.rst b/docs/stdnum.cn.ric.rst new file mode 100644 index 00000000..53fa6ccf --- /dev/null +++ b/docs/stdnum.cn.ric.rst @@ -0,0 +1,5 @@ +stdnum.cn.ric +============= + +.. automodule:: stdnum.cn.ric + :members: diff --git a/docs/stdnum.ec.ci.rst b/docs/stdnum.ec.ci.rst new file mode 100644 index 00000000..d28b9d1f --- /dev/null +++ b/docs/stdnum.ec.ci.rst @@ -0,0 +1,5 @@ +stdnum.ec.ci +============ + +.. automodule:: stdnum.ec.ci + :members: diff --git a/docs/stdnum.ec.ruc.rst b/docs/stdnum.ec.ruc.rst new file mode 100644 index 00000000..8b9442c7 --- /dev/null +++ b/docs/stdnum.ec.ruc.rst @@ -0,0 +1,5 @@ +stdnum.ec.ruc +============= + +.. automodule:: stdnum.ec.ruc + :members: diff --git a/docs/stdnum.eu.at_02.rst b/docs/stdnum.eu.at_02.rst new file mode 100644 index 00000000..4368287b --- /dev/null +++ b/docs/stdnum.eu.at_02.rst @@ -0,0 +1,5 @@ +stdnum.eu.at_02 +=============== + +.. automodule:: stdnum.eu.at_02 + :members: diff --git a/docs/stdnum.iso6346.rst b/docs/stdnum.iso6346.rst new file mode 100644 index 00000000..56c58e0f --- /dev/null +++ b/docs/stdnum.iso6346.rst @@ -0,0 +1,5 @@ +stdnum.iso6346 +============== + +.. automodule:: stdnum.iso6346 + :members: diff --git a/docs/stdnum.it.codicefiscale.rst b/docs/stdnum.it.codicefiscale.rst new file mode 100644 index 00000000..85d22c66 --- /dev/null +++ b/docs/stdnum.it.codicefiscale.rst @@ -0,0 +1,5 @@ +stdnum.it.codicefiscale +======================= + +.. automodule:: stdnum.it.codicefiscale + :members: diff --git a/docs/stdnum.us.rtn.rst b/docs/stdnum.us.rtn.rst new file mode 100644 index 00000000..b6cfe85e --- /dev/null +++ b/docs/stdnum.us.rtn.rst @@ -0,0 +1,5 @@ +stdnum.us.rtn +============= + +.. automodule:: stdnum.us.rtn + :members: diff --git a/getnumlist.py b/getnumlist.py index 97c91bcf..0a3eb1f6 100755 --- a/getnumlist.py +++ b/getnumlist.py @@ -56,8 +56,3 @@ def get_number_modules(): print '' for module in get_number_modules(): print ' %s' % module.__name__.replace('stdnum.', '') - print '' - print 'For index.xml:' - print '' - for module in get_number_modules(): - print '
  • %s
  • ' % util.get_module_name(module) diff --git a/setup.py b/setup.py index afb9889c..008ef463 100755 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ # setup.py - python-stdnum installation script # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2014 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -41,10 +41,12 @@ url='http://arthurdejong.org/python-stdnum/', license='LGPL', classifiers=[ - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', + 'Intended Audience :: Financial and Insurance Industry', + 'Intended Audience :: Information Technology', + 'Intended Audience :: Telecommunications Industry', + 'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Software Development :: Libraries :: Python Modules', diff --git a/stdnum/__init__.py b/stdnum/__init__.py index 815f6bd9..9705c24e 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -1,7 +1,7 @@ # __init__.py - main module # coding: utf-8 # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2014 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -31,6 +31,8 @@ * bg.pnf: PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) * bg.vat: VAT (Идентификационен номер по ДДС, Bulgarian VAT number) * br.cpf: CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) +* ch.ssn: Swiss social security number ("Sozialversicherungsnummer") +* cn.ric: RIC No. (Chinese Resident Identity Card Number) * cy.vat: Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) * cz.dic: DIČ (Daňové identifikační číslo, Czech VAT number) * cz.rc: RČ (Rodné číslo, the Czech birth number) @@ -38,11 +40,14 @@ * dk.cpr: CPR (personnummer, the Danish citizen number) * dk.cvr: CVR (Momsregistreringsnummer, Danish VAT number) * ean: EAN (International Article Number) +* ec.ci: CI (Cédula de identidad, Ecuadorian personal identity code) +* ec.ruc: RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) * ee.kmkr: KMKR (Käibemaksukohuslase, Estonian VAT number) * es.cif: CIF (Certificado de Identificación Fiscal, Spanish company tax number) * es.dni: DNI (Documento nacional de identidad, Spanish personal identity codes) * es.nie: NIE (Número de Identificación de Extranjeros, Spanish foreigner number) * es.nif: NIF (Número de Identificación Fiscal, Spanish VAT number) +* eu.at_02: SEPA Identifier of the Creditor (AT-02) * eu.vat: VAT (European Union VAT number) * fi.alv: ALV nro (Arvonlisäveronumero, Finnish VAT number) * fi.hetu: HETU (Henkilötunnus, Finnish personal identity code) @@ -62,7 +67,9 @@ * isbn: ISBN (International Standard Book Number) * isil: ISIL (International Standard Identifier for Libraries) * ismn: ISMN (International Standard Music Number) +* iso6346: ISO 6346 (International standard for container identification) * issn: ISSN (International Standard Serial Number) +* it.codicefiscale: Codice Fiscale (Italian tax code for individuals) * it.iva: Partita IVA (Italian VAT number) * lt.pvm: PVM (Pridėtinės vertės mokestis mokėtojo kodas, Lithuanian VAT number) * lu.tva: TVA (taxe sur la valeur ajoutée, Luxembourgian VAT number) @@ -87,6 +94,7 @@ * us.ein: EIN (U.S. Employer Identification Number) * us.itin: ITIN (U.S. Individual Taxpayer Identification Number) * us.ptin: PTIN (U.S. Preparer Tax Identification Number) +* us.rtn: RTN (Routing transport number) * us.ssn: SSN (U.S. Social Security Number) * us.tin: TIN (U.S. Taxpayer Identification Number) @@ -116,4 +124,4 @@ # the version number of the library -__version__ = '0.9' +__version__ = '1.0' From 3fa795d807c5f6e7e2c179c18f983651eb2cb71c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 20 Oct 2014 18:27:33 +0200 Subject: [PATCH 019/654] Restore section for on homepage --- getnumlist.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/getnumlist.py b/getnumlist.py index 0a3eb1f6..97c91bcf 100755 --- a/getnumlist.py +++ b/getnumlist.py @@ -56,3 +56,8 @@ def get_number_modules(): print '' for module in get_number_modules(): print ' %s' % module.__name__.replace('stdnum.', '') + print '' + print 'For index.xml:' + print '' + for module in get_number_modules(): + print '
  • %s
  • ' % util.get_module_name(module) From 6e332b138b10dc8c8f75116b4d5cb32c0b8d7bd6 Mon Sep 17 00:00:00 2001 From: Matt McDonald Date: Fri, 31 Oct 2014 21:31:30 +0100 Subject: [PATCH 020/654] Fix for invalidating MEIDs with invalid decimal bit length See: http://arthurdejong.org/trac/python-stdnum/ticket/10 --- stdnum/meid.py | 6 +++++- tests/test_meid.doctest | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/stdnum/meid.py b/stdnum/meid.py index 1f44b096..6004af26 100644 --- a/stdnum/meid.py +++ b/stdnum/meid.py @@ -115,7 +115,11 @@ def validate(number, strip_check_digit=True): if cd: luhn.validate(number + cd) # convert to hex - number = '%08X%06X' % (int(number[0:10]), int(number[10:18])) + manufacturer_code = int(number[0:10]) + serial_num = int(number[10:18]) + if manufacturer_code.bit_length() > 32 or serial_num.bit_length() > 24: + raise InvalidComponent() + number = '%08X%06X' % (manufacturer_code, serial_num) cd = calc_check_digit(number) elif number.isdigit(): # if the remaining hex format is fully decimal it is an IMEI number diff --git a/tests/test_meid.doctest b/tests/test_meid.doctest index c517bc61..1cb551a2 100644 --- a/tests/test_meid.doctest +++ b/tests/test_meid.doctest @@ -73,6 +73,20 @@ Traceback (most recent call last): ... InvalidFormat: ... +Decimal format MEIDs with manufacturer code exceeding 32-bits should fail. + +>>> meid.validate('99999 99999 0070 3710 4') +Traceback (most recent call last): + ... +InvalidComponent: ... + +Decimal format MEIDs with serial number exceeding 24-bits should fail. + +>>> meid.validate('29360 87365 9999 9999 4') +Traceback (most recent call last): + ... +InvalidComponent: ... + The compact method should convert to HEX if needed and can optionally leave the check digit intact. From 3a7c9f7d2ffe14a9d2f9bc37f6eaeba4f897970c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 1 Nov 2014 13:43:45 +0100 Subject: [PATCH 021/654] Fix common spelling mistake --- stdnum/bg/vat.py | 2 +- stdnum/eu/at_02.py | 2 +- stdnum/iban.py | 4 ++-- stdnum/isan.py | 2 +- stdnum/meid.py | 2 +- stdnum/numdb.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/stdnum/bg/vat.py b/stdnum/bg/vat.py index e04141d4..f00e0da4 100644 --- a/stdnum/bg/vat.py +++ b/stdnum/bg/vat.py @@ -22,7 +22,7 @@ The Bulgarian VAT (Данък върху добавената стойност) number is either 9 (for legal entities) or 10 digits (for physical persons, foreigners and -others) long. Each type of number has it's own check digit algorithm. +others) long. Each type of number has its own check digit algorithm. >>> compact('BG 175 074 752') '175074752' diff --git a/stdnum/eu/at_02.py b/stdnum/eu/at_02.py index d4363083..fa5d7072 100644 --- a/stdnum/eu/at_02.py +++ b/stdnum/eu/at_02.py @@ -50,7 +50,7 @@ def compact(number): def _to_base10(number): - """Prepare the number to it's base10 representation so it can be checked + """Prepare the number to its base10 representation so it can be checked with the ISO 7064 Mod 97, 10 algorithm. That means excluding positions 5 to 7 and moving the first four digits to the end""" return ''.join(str(_alphabet.index(x)) for x in number[7:] + number[:4]) diff --git a/stdnum/iban.py b/stdnum/iban.py index fe3b093b..84c2b687 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -21,7 +21,7 @@ The IBAN is used to identify bank accounts across national borders. The first two letters are a country code. The next two digits are check digits -for the ISO 7064 Mod 97, 10 checksum. Each country uses it's own format +for the ISO 7064 Mod 97, 10 checksum. Each country uses its own format for the remainder of the number. Some countries may also use checksum algorithms within their number but @@ -62,7 +62,7 @@ def compact(number): def _to_base10(number): - """Prepare the number to it's base10 representation (also moving the + """Prepare the number to its base10 representation (also moving the check digits to the end) so it can be checked with the ISO 7064 Mod 97, 10 algorithm.""" # TODO: find out whether this should be in the mod_97_10 module diff --git a/stdnum/isan.py b/stdnum/isan.py index bd956dde..24438f59 100644 --- a/stdnum/isan.py +++ b/stdnum/isan.py @@ -136,7 +136,7 @@ def format(number, separator='-', strip_check_digits=False, add_check_digits=Tru def to_binary(number): - """Convert the number to it's binary representation (without the check + """Convert the number to its binary representation (without the check digits).""" import sys number = compact(number, strip_check_digits=True) diff --git a/stdnum/meid.py b/stdnum/meid.py index 6004af26..5d386085 100644 --- a/stdnum/meid.py +++ b/stdnum/meid.py @@ -174,7 +174,7 @@ def format(number, separator=' ', format=None, add_check_digit=False): def to_binary(number): - """Convert the number to it's binary representation (without the check + """Convert the number to its binary representation (without the check digit).""" import sys number = compact(number, strip_check_digit=True) diff --git a/stdnum/numdb.py b/stdnum/numdb.py index e8ea96a4..a21e7e77 100644 --- a/stdnum/numdb.py +++ b/stdnum/numdb.py @@ -96,7 +96,7 @@ # [ length, low, high, props, children ] # ... # ] -# where children is a prefixes structure in it's own right +# where children is a prefixes structure in its own right # (there is no expected ordering within the list) From 9883c72176409c6a2cdb8a0f54fe4571446ddcb6 Mon Sep 17 00:00:00 2001 From: Emiliano Castro Date: Tue, 23 Dec 2014 19:01:36 +0100 Subject: [PATCH 022/654] Adding HR (Croatia) to the list of available countries --- stdnum/eu/vat.py | 2 +- stdnum/hr/__init__.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index 573852c0..30a13c35 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -44,7 +44,7 @@ country_codes = set([ 'at', 'be', 'bg', 'cy', 'cz', 'de', 'dk', 'ee', 'es', 'fi', 'fr', 'gb', - 'gr', 'hu', 'ie', 'it', 'lt', 'lu', 'lv', 'mt', 'nl', 'pl', 'pt', 'ro', + 'gr', 'hr', 'hu', 'ie', 'it', 'lt', 'lu', 'lv', 'mt', 'nl', 'pl', 'pt', 'ro', 'se', 'si', 'sk' ]) """The collection of country codes that are queried. Greece is listed with diff --git a/stdnum/hr/__init__.py b/stdnum/hr/__init__.py index 3c38d759..acd17345 100644 --- a/stdnum/hr/__init__.py +++ b/stdnum/hr/__init__.py @@ -19,3 +19,6 @@ # 02110-1301 USA """Collection of Croatian numbers.""" + +# provide vat as an alias +from stdnum.hr import oib as vat From 2574f89fd3b2ff12fe048e57ef3f9aba01a13315 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 17 Apr 2015 11:13:18 +0200 Subject: [PATCH 023/654] Raise InvalidComponent for unregistered IMSI --- stdnum/imsi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdnum/imsi.py b/stdnum/imsi.py index 7bed6287..c5c3f1ee 100644 --- a/stdnum/imsi.py +++ b/stdnum/imsi.py @@ -1,7 +1,7 @@ # imsi.py - functions for handling International Mobile Subscriber Identity # (IMSI) numbers # -# Copyright (C) 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2011-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -28,7 +28,7 @@ >>> validate('439011234567890') # unknown MCC Traceback (most recent call last): ... -InvalidFormat: ... +InvalidComponent: ... >>> split('429011234567890') ('429', '01', '1234567890') >>> split('310150123456789') @@ -67,7 +67,7 @@ def validate(number): if len(number) not in (14, 15): raise InvalidLength() if len(split(number)) != 3: - raise InvalidFormat() + raise InvalidComponent() return number From 75bcef02660da492bcbaa1bad4a15a55f64a6df9 Mon Sep 17 00:00:00 2001 From: Tony Bajan Date: Mon, 9 Feb 2015 16:41:15 +0000 Subject: [PATCH 024/654] Add ISO 9362 (BIC) support --- stdnum/iso9362.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 stdnum/iso9362.py diff --git a/stdnum/iso9362.py b/stdnum/iso9362.py new file mode 100644 index 00000000..e58ae522 --- /dev/null +++ b/stdnum/iso9362.py @@ -0,0 +1,86 @@ +# iso9362.py - functions for handling ISO 9362 Business identifier codes +# +# Copyright (C) 2015 Lifealike Ltd +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""ISO 9362 (Business identifier codes). + +An ISO 9362 identifier (also: BIC, BEI, or SWIFT code) uniquely +identifies an institution. They are commonly used to route financial +transactions. + +The code consists of a 4 letter institution code, a 2 letter country code, +and a 2 character location code, optionally followed by a three character +branch code. + +>>> validate('AGRIFRPP882') +'AGRIFRPP882' +>>> validate('AGRIFRPP') +'AGRIFRPP' +>>> validate('AGRIFRPP8') +Traceback (most recent call last): + ... +InvalidLength: .. +>>> validate('AGRIF2PP') # country code can't contain digits +Traceback (most recent call last): + ... +InvalidFormat: .. +>>> format('agriFRPP') # conventionally caps +'AGRIFRPP' + +""" + +import re + +from stdnum.exceptions import * +from stdnum.util import clean + +_bic_re = re.compile(r'^[a-z]{6}[0-9a-z]{2}([0-9a-z]{3})?$', re.IGNORECASE) + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any surrounding whitespace.""" + number = clean(number).strip() + return number + + +def validate(number): + """Checks to see if the number provided is a valid routing number. This + checks the length and characters in each position.""" + number = compact(number) + if len(number) not in (8, 11): + raise InvalidLength() + match = _bic_re.search(number) + if not match: + raise InvalidFormat() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid BIC. This checks the + length and characters in each position.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return number.upper() From 699b3406ff070f89b6b5cc37a949c84495c04b0f Mon Sep 17 00:00:00 2001 From: Tuomas Toivonen Date: Sat, 11 Apr 2015 21:52:12 +0200 Subject: [PATCH 025/654] Add support for Norwegian organisation and VAT numbers This commit also includes changes from Tomas Thor Jonsson . --- stdnum/no/__init__.py | 24 +++++++++++++ stdnum/no/mva.py | 73 +++++++++++++++++++++++++++++++++++++++ stdnum/no/orgnr.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 stdnum/no/__init__.py create mode 100644 stdnum/no/mva.py create mode 100644 stdnum/no/orgnr.py diff --git a/stdnum/no/__init__.py b/stdnum/no/__init__.py new file mode 100644 index 00000000..c92ea78a --- /dev/null +++ b/stdnum/no/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Norwegian numbers +# coding: utf-8 +# +# Copyright (C) 2015 Tuomas Toivonen +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Norwegian numbers.""" + +# provide vat as an alias +from stdnum.no import mva as vat diff --git a/stdnum/no/mva.py b/stdnum/no/mva.py new file mode 100644 index 00000000..f3be4e76 --- /dev/null +++ b/stdnum/no/mva.py @@ -0,0 +1,73 @@ +# mva.py - functions for handling Norwegian VAT numbers +# coding: utf-8 +# +# Copyright (C) 2015 Tuomas Toivonen +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""MVA (Merverdiavgift, Norwegian VAT number). + +The VAT number is the standard Norwegian organisation number +(Organisasjonsnummer) with 'MVA' as suffix. + +>>> validate('NO 995 525 828 MVA') +'995525828MVA' +>>> validate('NO 995 525 829 MVA') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('995525828MVA') +'NO 995 525 828 MVA' +""" + +from stdnum.exceptions import * +from stdnum.no import orgnr +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + number = clean(number, ' ').upper().strip() + if number.startswith('NO'): + number = number[2:] + return number + + +def validate(number): + """Checks to see if the number provided is a valid MVA number. This + checks the length, formatting and check digit.""" + number = compact(number) + if not number.endswith('MVA'): + raise InvalidFormat() + orgnr.validate(number[:-3]) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid MVA number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return 'NO ' + orgnr.format(number[:9]) + ' ' + number[9:] diff --git a/stdnum/no/orgnr.py b/stdnum/no/orgnr.py new file mode 100644 index 00000000..64481861 --- /dev/null +++ b/stdnum/no/orgnr.py @@ -0,0 +1,79 @@ +# orgnr.py - functions for handling Norwegian organisation numbers +# coding: utf-8 +# +# Copyright (C) 2014 Tomas Thor Jonsson +# Copyright (C) 2015 Tuomas Toivonen +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Orgnr (Organisasjonsnummer, Norwegian organisation number). + +The Organisasjonsnummer is a 9-digit number with a straightforward check +mechanism. + +>>> validate('988 077 917') +'988077917' +>>> validate('988 077 918') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('988077917') +'988 077 917' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def checksum(number): + """Calculate the checksum.""" + weights = (3, 2, 7, 6, 5, 4, 3, 2, 1) + return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + + +def validate(number): + """Checks to see if the number provided is a valid organisation number. + This checks the length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 9: + raise InvalidLength() + if checksum(number) != 0: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid organisation number. + This checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return number[:3] + ' ' + number[3:6] + ' ' + number[6:] From 84620f864b4c13627edc0f1c71ec43b8fec54f65 Mon Sep 17 00:00:00 2001 From: Tuomas Toivonen Date: Sat, 11 Apr 2015 22:43:40 +0300 Subject: [PATCH 026/654] Support Icelandic personal, organisation and VAT identifiers The package is named "is_" because "is" is a reserved word. --- stdnum/is_/__init__.py | 24 +++++++++ stdnum/is_/kennitala.py | 114 ++++++++++++++++++++++++++++++++++++++++ stdnum/is_/vsk.py | 63 ++++++++++++++++++++++ 3 files changed, 201 insertions(+) create mode 100644 stdnum/is_/__init__.py create mode 100644 stdnum/is_/kennitala.py create mode 100644 stdnum/is_/vsk.py diff --git a/stdnum/is_/__init__.py b/stdnum/is_/__init__.py new file mode 100644 index 00000000..a4473c9c --- /dev/null +++ b/stdnum/is_/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Icelandic numbers +# coding: utf-8 +# +# Copyright (C) 2015 Tuomas Toivonen +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Icelandic numbers.""" + +# provide vat as an alias +from stdnum.is_ import vsk as vat diff --git a/stdnum/is_/kennitala.py b/stdnum/is_/kennitala.py new file mode 100644 index 00000000..5e8bab6e --- /dev/null +++ b/stdnum/is_/kennitala.py @@ -0,0 +1,114 @@ +# kennitala.py - functions for handling Icelandic identity codes +# coding: utf-8 +# +# Copyright (C) 2015 Tuomas Toivonen +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Kennitala (Icelandic personal and organisation identity code). + +Module for handling Icelandic personal and organisation identity codes +(kennitala). + +>>> validate('450401-3150') # organisation +'4504013150' +>>> validate('120174-3399') # individual +'1201743399' +>>> validate('530575-0299') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('320174-3399') +Traceback (most recent call last): + ... +InvalidComponent: ... +""" + +import re +import datetime + +from stdnum.exceptions import * +from stdnum.util import clean + + +# Icelandic personal and organisation identity codes are composed of +# date part, a dash, two random digits, a checksum, and a century +# indicator where '9' for 1900-1999 and '0' for 2000 and beyond. For +# organisations instead of birth date, the registration date is used, +# and number 4 is added to the first digit. +_kennitala_re = re.compile( + r'^(?P[01234567]\d)(?P[01]\d)(?P\d\d)' + r'(?P\d\d)(?P\d)' + r'(?P[09])$') + + +def compact(number): + """Convert the kennitala to the minimal representation. This + strips surrounding whitespace and separation dash, and converts it + to upper case.""" + return clean(number, '-').upper().strip() + + +def checksum(number): + """Calculate the checksum.""" + weights = (3, 2, 7, 6, 5, 4, 3, 2, 1, 0) + return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + + +def validate(number): + """Checks to see if the number provided is a valid kennitala. It + checks the format, whether a valid date is given and whether the + check digit is correct.""" + number = compact(number) + match = _kennitala_re.search(number) + if not match: + raise InvalidFormat() + day = int(match.group('day')) + month = int(match.group('month')) + year = int(match.group('year')) + if match.group('century') == '9': + year += 1900 + else: + year += 2000 + # check if birth date or registration data is valid + try: + if day >= 40: # organisation + datetime.date(year, month, day-40) + else: # individual + datetime.date(year, month, day) + except ValueError: + raise InvalidComponent() + # validate the checksum + if checksum(number) != 0: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid HETU. It checks the + format, whether a valid date is given and whether the check digit is + correct.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return number[:6] + '-' + number[6:] diff --git a/stdnum/is_/vsk.py b/stdnum/is_/vsk.py new file mode 100644 index 00000000..0baf895a --- /dev/null +++ b/stdnum/is_/vsk.py @@ -0,0 +1,63 @@ +# vsk.py - functions for handling Icelandic VAT numbers +# coding: utf-8 +# +# Copyright (C) 2015 Tuomas Toivonen +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""VSK number (Virðisaukaskattsnúmer, Icelandic VAT number). + +The Icelandic VAT number is five or six digits. + +>>> validate('IS 00621') +'00621' +>>> validate('IS 0062199') +Traceback (most recent call last): + ... +InvalidLength: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + number = clean(number, ' ').upper().strip() + if number.startswith('IS'): + number = number[2:] + return number + + +def validate(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length and formatting.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) not in (5, 6): + raise InvalidLength() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length and formatting.""" + try: + return bool(validate(number)) + except ValidationError: + return False From c334bcf616e1c582dec1a3c2f2fe45afa902755d Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 18 Apr 2015 15:29:46 +0200 Subject: [PATCH 027/654] Add more tests for Kennitala --- stdnum/is_/kennitala.py | 2 ++ tests/test_is_kennitala.doctest | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/test_is_kennitala.doctest diff --git a/stdnum/is_/kennitala.py b/stdnum/is_/kennitala.py index 5e8bab6e..39aaf6e2 100644 --- a/stdnum/is_/kennitala.py +++ b/stdnum/is_/kennitala.py @@ -36,6 +36,8 @@ Traceback (most recent call last): ... InvalidComponent: ... +>>> format('1201743399') +'120174-3399' """ import re diff --git a/tests/test_is_kennitala.doctest b/tests/test_is_kennitala.doctest new file mode 100644 index 00000000..00ec7cde --- /dev/null +++ b/tests/test_is_kennitala.doctest @@ -0,0 +1,48 @@ +test_is_kennitala.doctest - more detailed doctests stdnum.is_.kennitala + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.is_.kennitala +module. + +>>> from stdnum.is_ import kennitala +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 020884-2749 +... 2607565169 +... 4406032540 +... 450401-3150 +... 480408-0550 +... 4905891209 +... 5609091440 +... 580169-1559 +... 580607-0710 +... 641005-1340 +... 670901-2110 +... 670906-0190 +... 7003090610 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not kennitala.is_valid(x)] +[] From 9e94ab80b6961847539456f9c29b4acbdc20c4d0 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 19 Apr 2015 18:37:36 +0200 Subject: [PATCH 028/654] Add more stdnum.no.mva tests --- tests/test_no_mva.doctest | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/test_no_mva.doctest diff --git a/tests/test_no_mva.doctest b/tests/test_no_mva.doctest new file mode 100644 index 00000000..945974f0 --- /dev/null +++ b/tests/test_no_mva.doctest @@ -0,0 +1,46 @@ +test_no_mva.doctest - more detailed doctests for stdnum.no.mva module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.no.mva module. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.no import mva + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 965 920 358 MVA +... 980 430 596 MVA +... 998 772 680 MVA +... NO 987 008 644 MVA +... NO 917 313 008 MVA +... NO 948007029 MVA +... NO 966 813 946 MVA +... NO 982 930 057 MVA +... NO 982 952 573 MVA +... NO 987 008 644 MVA +... NO 987 989 297 MVA +... +... ''' +>>> [x for x in numbers.splitlines() if x and not mva.is_valid(x)] +[] From d003ac32422e8e1625ee1a35641d3c73ecfdf6de Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 17 Apr 2015 17:13:35 +0200 Subject: [PATCH 029/654] Add Dominican Republic RNC number The RNC (Registro Nacional del Contribuyente) is the Dominican Republic taxpayer registration number for companies. --- stdnum/do/__init__.py | 23 ++++++ stdnum/do/rnc.py | 79 ++++++++++++++++++ tests/test_do_rnc.doctest | 163 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 265 insertions(+) create mode 100644 stdnum/do/__init__.py create mode 100644 stdnum/do/rnc.py create mode 100644 tests/test_do_rnc.doctest diff --git a/stdnum/do/__init__.py b/stdnum/do/__init__.py new file mode 100644 index 00000000..f60c1c04 --- /dev/null +++ b/stdnum/do/__init__.py @@ -0,0 +1,23 @@ +# __init__.py - collection of Dominican Republic numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Dominican Republic numbers.""" + +from stdnum.do import rnc as vat diff --git a/stdnum/do/rnc.py b/stdnum/do/rnc.py new file mode 100644 index 00000000..4134ad50 --- /dev/null +++ b/stdnum/do/rnc.py @@ -0,0 +1,79 @@ +# rnc.py - functions for handling Dominican Republic tax registration +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""RNC (Registro Nacional del Contribuyente, Dominican Republic tax number). + +The RNC is the Dominican Republic taxpayer registration number for +institutions. The number consists of 9 digits. + +>>> validate('1-01-85004-3') +'101850043' +>>> validate('1018A0043') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('101850042') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('131246796') +'1-31-24679-6' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip() + + +def calc_check_digit(number): + """Calculate the check digit.""" + weights = (7, 9, 8, 6, 5, 4, 3, 2) + check = sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return str((10 - check) % 9 + 1) + + +def validate(number): + """Checks to see if the number provided is a valid RNC.""" + number = compact(number) + if len(number) != 9: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid RNC.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return '-'.join((number[:1], number[1:3], number[3:-1], number[-1])) diff --git a/tests/test_do_rnc.doctest b/tests/test_do_rnc.doctest new file mode 100644 index 00000000..1fdfd544 --- /dev/null +++ b/tests/test_do_rnc.doctest @@ -0,0 +1,163 @@ +test_do_rnc.doctest - more detailed doctests for stdnum.do.rnc module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.do.rnc module. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.do import rnc + + +Some basic tests for invalid numbers: + +>>> rnc.validate('12345678') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> rnc.validate('1234567890') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> rnc.validate('123456789012') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> rnc.validate('acvbnmkjh') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> rnc.validate('122011226') +'122011226' +>>> rnc.validate('112031226') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> rnc.validate('101637587') +'101637587' + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 501050302 +... 501249532 +... 501275452 +... 501402772 +... 501406832 +... 501423982 +... 501430482 +... 501456252 +... 501464492 +... 501470042 +... 501494502 +... 501494812 +... 501496882 +... 501670912 +... 501690832 +... 501896112 +... 501925082 +... 501934782 +... 502004222 +... 502500262 +... 502571062 +... 502599382 +... 502601972 +... 502612532 +... 502614012 +... 502614802 +... 502858272 +... 502860692 +... 502866062 +... 502867182 +... 502871732 +... 502872372 +... 502873972 +... 502876882 +... 502879652 +... 502880022 +... 502880162 +... 502887132 +... 502889232 +... 502890842 +... 502894112 +... 503972922 +... 503995752 +... 504065782 +... 505030302 +... 505038532 +... 505063502 +... 505072412 +... 505613472 +... 505613502 +... 505613782 +... 505621912 +... 505622552 +... 507032262 +... 507883262 +... 511104382 +... 511106822 +... 512924072 +... 514026622 +... 514035672 +... 515121792 +... 515123442 +... 519505672 +... 522004242 +... 523006132 +... 523012132 +... 523013422 +... 523014062 +... 523015212 +... 523017622 +... 523021182 +... 523022162 +... 523022952 +... 523023592 +... 524001842 +... 524001982 +... 524007352 +... 524010892 +... 525001772 +... 525001802 +... 530001932 +... 531009502 +... 531030722 +... 531032342 +... 531035562 +... 531039622 +... 531042232 +... 531043182 +... 531054192 +... 531056152 +... 531073022 +... 531081602 +... 531085012 +... 531091322 +... 531096782 +... 531132312 +... 531136032 +... 531136962 +... 531137012 +... 531137152 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not rnc.is_valid(x)] +[] From 49d1e691c02ec1e3c89c6d4e9e5f8a232bb1255e Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 17 Apr 2015 19:39:35 +0200 Subject: [PATCH 030/654] Add Dominican Republic Cedula number The Cedule is a Dominican Republic national identification number for persons. The number uses the Luhn checksum but apparently there are a lof of valid numbers in use that do not match the checksum. For this a whitelist is used. --- stdnum/do/cedula.py | 160 +++++++++++++++++++++++++++++++++++ tests/test_do_cedula.doctest | 143 +++++++++++++++++++++++++++++++ 2 files changed, 303 insertions(+) create mode 100644 stdnum/do/cedula.py create mode 100644 tests/test_do_cedula.doctest diff --git a/stdnum/do/cedula.py b/stdnum/do/cedula.py new file mode 100644 index 00000000..ec7b3f64 --- /dev/null +++ b/stdnum/do/cedula.py @@ -0,0 +1,160 @@ +# cedula.py - functions for handling Dominican Republic national identifier +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Cedula (Dominican Republic national identification number). + +A cedula is is an 11-digit number issues by the Dominican Republic government +to citizens or residents for identification purposes. + +>>> validate('00113918205') +'00113918205' +>>> validate('00113918204') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('0011391820A') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> format('22400022111') +'224-0002211-1' +""" + +from stdnum.exceptions import * +from stdnum.util import clean +from stdnum import luhn + + +# list of Cedulas that do not match the checksum but are nonetheless valid +whitelist = set([ + '00000021249', '00000035692', '00000058035', '00000065377', + '00000078587', '00000111941', '00000126295', '00000140874', + '00000155482', '00000236621', '00000292212', '00000564933', + '00000719400', '00004110056', '00100000169', '00100016495', + '00100053841', '00100061945', '00100083860', '00100126468', + '00100172940', '00100174666', '00100181057', '00100238382', + '00100239662', '00100255349', '00100288929', '00100322649', + '00100350928', '00100378440', '00100384523', '00100415853', + '00100523399', '00100524531', '00100530588', '00100593378', + '00100622461', '00100709215', '00100728113', '00100729795', + '00100756082', '00100759932', '00101118022', '00101527366', + '00101621981', '00101659661', '00101821735', '00101961125', + '00102025201', '00102577448', '00102630192', '00103266558', + '00103443802', '00103754365', '00103983004', '00104486903', + '00104662561', '00104785104', '00104862525', '00105328185', + '00105606543', '00107045499', '00108497822', '00108796883', + '00109402756', '00109785951', '00110047715', '00110071113', + '00114272360', '00114532330', '00116256005', '00117582001', + '00119161853', '00121581750', '00121581800', '00129737056', + '00130610001', '00131257003', '00134588056', '00142864013', + '00143072001', '00144435001', '00146965001', '00147485003', + '00155144906', '00161884001', '00162906003', '00163540003', + '00163549012', '00163709018', '00166533003', '00167311001', + '00170009162', '00170115579', '00171404771', '00174729003', + '00174940001', '00181880003', '00184129003', '00189213001', + '00189405093', '00190002567', '00196714003', '00200021994', + '00200028716', '00200040516', '00200063601', '00200123640', + '00200409772', '00201023001', '00207327056', '00208430205', + '00208832003', '00218507031', '00222017001', '00235482001', + '00236245013', '00241997013', '00246160013', '00261011013', + '00270764013', '00274652001', '00278005023', '00289931003', + '00291431001', '00291549003', '00297018001', '00298109001', + '00299724003', '00300001538', '00300011700', '00300013835', + '00300017875', '00300019575', '00300020806', '00300025568', + '00300169535', '00300244009', '00300636564', '00301200901', + '00305535206', '00345425001', '00352861001', '00356533003', + '00362684023', '00376023023', '00400001552', '00400012957', + '00425759001', '00435518003', '00475916056', '00481106001', + '00481595003', '00493593003', '00516077003', '00520207699', + '00524571001', '00539342005', '00540077717', '00544657001', + '00574599001', '00599408003', '00633126023', '00644236001', + '00648496171', '00651322001', '00686904003', '00720758056', + '00731054054', '00741721056', '00757398001', '00800106971', + '00848583056', '00857630012', '00971815056', '01000005580', + '01000268998', '01038813907', '01094560111', '01100014261', + '01100620962', '01154421047', '01200004166', '01200008613', + '01200011252', '01200014133', '01200033420', '01300001142', + '01300005424', '01300020331', '01400000282', '01400074875', + '01600009531', '01600026316', '01650257001', '01810035037', + '02038569001', '02300023225', '02300031758', '02300037618', + '02300047220', '02300052220', '02300054193', '02300062066', + '02300085158', '02600036132', '02600094954', '02700029905', + '02755972001', '02800000129', '02800021761', '02800025877', + '02800029588', '02831146001', '03000411295', '03100109611', + '03100673050', '03102828522', '03102936385', '03103749672', + '03111670001', '03121982479', '03200066940', '03400157849', + '03600127038', '03800032522', '03807240010', '03852380001', + '03900069856', '03900192284', '04400002002', '04600198229', + '04700004024', '04700020933', '04700027064', '04700061076', + '04700070460', '04700074827', '04800019561', '04800046910', + '04801245892', '04900011690', '04900026260', '04900028443', + '04902549001', '04941042001', '05300013029', '05400016031', + '05400021759', '05400022042', '05400028496', '05400033166', + '05400034790', '05400037495', '05400038776', '05400040523', + '05400047674', '05400048248', '05400049237', '05400049834', + '05400053627', '05400054156', '05400055485', '05400055770', + '05400057300', '05400058964', '05400059956', '05400060743', + '05400062459', '05400067703', '05400072273', '05400076481', + '05500003079', '05500006796', '05500008806', '05500012039', + '05500014375', '05500017761', '05500021118', '05500022399', + '05500023407', '05500024135', '05500024190', '05500027749', + '05500032681', '05600037761', '05600038251', '05600038964', + '05600051191', '05600063115', '05600267737', '05700071202', + '05900072869', '06100007818', '06100009131', '06100011935', + '06100013662', '06100016486', '06337850001', '06400007916', + '06400011981', '06400014372', '06486186001', '06800008448', + '06843739551', '07600000691', '07700009346', '07800000968', + '08016809001', '08498619001', '08800003986', '08900001310', + '08900005064', '08952698001', '09300006239', '09421581768', + '09700003030', '10061805811', '10462157001', '10491297001', + '10621581792', '10983439110', '11700000658', '12019831001', + '22321581834', '22721581818', '40200401324', '40200452735', + '40200639953', '40200700675', '90001200901']) + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip() + + +def validate(number): + """Checks to see if the number provided is a valid cedula.""" + number = compact(number) + if len(number) != 11: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if number in whitelist: + return number + return luhn.validate(number) + + +def is_valid(number): + """Checks to see if the number provided is a valid cedula.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return '-'.join((number[:3], number[3:-1], number[-1])) diff --git a/tests/test_do_cedula.doctest b/tests/test_do_cedula.doctest new file mode 100644 index 00000000..7d1992a5 --- /dev/null +++ b/tests/test_do_cedula.doctest @@ -0,0 +1,143 @@ +test_do_cedula.doctest - more detailed doctests for stdnum.do.cedula module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.do.cedula module. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.do import cedula + + +Some basic tests for invalid numbers: + +>>> cedula.validate('1234567890') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> cedula.validate('123456789111') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> cedula.validate('abcasdqwerz') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cedula.validate('00114272360') +'00114272360' +>>> cedula.validate('00114272368') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> cedula.validate('00105606543') +'00105606543' +>>> cedula.validate('00113918205') +'00113918205' +>>> cedula.validate('00113918204') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> cedula.validate('00113918213') +'00113918213' +>>> cedula.validate('0011391820x') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cedula.validate('x0113918205') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cedula.validate('00113x18205') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +Some numbers have an invalid check digit but were issued nonetheless. The +following numbers should all be valid cedulas. + +>>> numbers = ''' +... +... 00000058035 +... 00000155482 +... 00100288929 +... 00100709215 +... 00100759932 +... 00101552784 +... 00101659661 +... 00101961125 +... 00103754365 +... 00105606543 +... 00108796883 +... 00113918205 +... 00113918213 +... 00114272360 +... 00114532330 +... 00117582001 +... 00121581800 +... 00161884001 +... 00162906003 +... 00163540003 +... 00166533003 +... 00200123640 +... 00200409772 +... 00207327056 +... 00208430205 +... 00222017001 +... 00274652001 +... 00289931003 +... 00300169535 +... 00301200901 +... 00356533003 +... 00516077003 +... 00524571001 +... 00633126023 +... 00686904003 +... 00757398001 +... 00800106971 +... 00848583056 +... 01100620962 +... 01200004166 +... 01200008613 +... 01600026316 +... 02300023225 +... 02600036132 +... 02800021761 +... 02800029588 +... 03103749672 +... 03800032522 +... 04600198229 +... 04700027064 +... 05400038776 +... 05500003079 +... 05500006796 +... 05500022399 +... 05500023407 +... 07600000691 +... 09421581768 +... 10061805811 +... 12019831001 +... 22321581834 +... 22400022111 +... 40200401324 +... 90001200901 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not cedula.is_valid(x)] +[] From 88d1af32f28ec2e86bf15ad86ed68e4723d0c7a1 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Thu, 23 Apr 2015 21:50:49 +0200 Subject: [PATCH 031/654] Extend the list of valid Cedula MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is based on the list of Cedula found at http://prd.org.do/2013/07/30/lista-del-cen-del-prd-actualizada-y-registrada-en-la-junta-central-electoral/ (link provided by José Arturo García) --- stdnum/do/cedula.py | 164 +++++++++++++++++++++----------------------- 1 file changed, 80 insertions(+), 84 deletions(-) diff --git a/stdnum/do/cedula.py b/stdnum/do/cedula.py index ec7b3f64..720a6913 100644 --- a/stdnum/do/cedula.py +++ b/stdnum/do/cedula.py @@ -42,90 +42,86 @@ # list of Cedulas that do not match the checksum but are nonetheless valid -whitelist = set([ - '00000021249', '00000035692', '00000058035', '00000065377', - '00000078587', '00000111941', '00000126295', '00000140874', - '00000155482', '00000236621', '00000292212', '00000564933', - '00000719400', '00004110056', '00100000169', '00100016495', - '00100053841', '00100061945', '00100083860', '00100126468', - '00100172940', '00100174666', '00100181057', '00100238382', - '00100239662', '00100255349', '00100288929', '00100322649', - '00100350928', '00100378440', '00100384523', '00100415853', - '00100523399', '00100524531', '00100530588', '00100593378', - '00100622461', '00100709215', '00100728113', '00100729795', - '00100756082', '00100759932', '00101118022', '00101527366', - '00101621981', '00101659661', '00101821735', '00101961125', - '00102025201', '00102577448', '00102630192', '00103266558', - '00103443802', '00103754365', '00103983004', '00104486903', - '00104662561', '00104785104', '00104862525', '00105328185', - '00105606543', '00107045499', '00108497822', '00108796883', - '00109402756', '00109785951', '00110047715', '00110071113', - '00114272360', '00114532330', '00116256005', '00117582001', - '00119161853', '00121581750', '00121581800', '00129737056', - '00130610001', '00131257003', '00134588056', '00142864013', - '00143072001', '00144435001', '00146965001', '00147485003', - '00155144906', '00161884001', '00162906003', '00163540003', - '00163549012', '00163709018', '00166533003', '00167311001', - '00170009162', '00170115579', '00171404771', '00174729003', - '00174940001', '00181880003', '00184129003', '00189213001', - '00189405093', '00190002567', '00196714003', '00200021994', - '00200028716', '00200040516', '00200063601', '00200123640', - '00200409772', '00201023001', '00207327056', '00208430205', - '00208832003', '00218507031', '00222017001', '00235482001', - '00236245013', '00241997013', '00246160013', '00261011013', - '00270764013', '00274652001', '00278005023', '00289931003', - '00291431001', '00291549003', '00297018001', '00298109001', - '00299724003', '00300001538', '00300011700', '00300013835', - '00300017875', '00300019575', '00300020806', '00300025568', - '00300169535', '00300244009', '00300636564', '00301200901', - '00305535206', '00345425001', '00352861001', '00356533003', - '00362684023', '00376023023', '00400001552', '00400012957', - '00425759001', '00435518003', '00475916056', '00481106001', - '00481595003', '00493593003', '00516077003', '00520207699', - '00524571001', '00539342005', '00540077717', '00544657001', - '00574599001', '00599408003', '00633126023', '00644236001', - '00648496171', '00651322001', '00686904003', '00720758056', - '00731054054', '00741721056', '00757398001', '00800106971', - '00848583056', '00857630012', '00971815056', '01000005580', - '01000268998', '01038813907', '01094560111', '01100014261', - '01100620962', '01154421047', '01200004166', '01200008613', - '01200011252', '01200014133', '01200033420', '01300001142', - '01300005424', '01300020331', '01400000282', '01400074875', - '01600009531', '01600026316', '01650257001', '01810035037', - '02038569001', '02300023225', '02300031758', '02300037618', - '02300047220', '02300052220', '02300054193', '02300062066', - '02300085158', '02600036132', '02600094954', '02700029905', - '02755972001', '02800000129', '02800021761', '02800025877', - '02800029588', '02831146001', '03000411295', '03100109611', - '03100673050', '03102828522', '03102936385', '03103749672', - '03111670001', '03121982479', '03200066940', '03400157849', - '03600127038', '03800032522', '03807240010', '03852380001', - '03900069856', '03900192284', '04400002002', '04600198229', - '04700004024', '04700020933', '04700027064', '04700061076', - '04700070460', '04700074827', '04800019561', '04800046910', - '04801245892', '04900011690', '04900026260', '04900028443', - '04902549001', '04941042001', '05300013029', '05400016031', - '05400021759', '05400022042', '05400028496', '05400033166', - '05400034790', '05400037495', '05400038776', '05400040523', - '05400047674', '05400048248', '05400049237', '05400049834', - '05400053627', '05400054156', '05400055485', '05400055770', - '05400057300', '05400058964', '05400059956', '05400060743', - '05400062459', '05400067703', '05400072273', '05400076481', - '05500003079', '05500006796', '05500008806', '05500012039', - '05500014375', '05500017761', '05500021118', '05500022399', - '05500023407', '05500024135', '05500024190', '05500027749', - '05500032681', '05600037761', '05600038251', '05600038964', - '05600051191', '05600063115', '05600267737', '05700071202', - '05900072869', '06100007818', '06100009131', '06100011935', - '06100013662', '06100016486', '06337850001', '06400007916', - '06400011981', '06400014372', '06486186001', '06800008448', - '06843739551', '07600000691', '07700009346', '07800000968', - '08016809001', '08498619001', '08800003986', '08900001310', - '08900005064', '08952698001', '09300006239', '09421581768', - '09700003030', '10061805811', '10462157001', '10491297001', - '10621581792', '10983439110', '11700000658', '12019831001', - '22321581834', '22721581818', '40200401324', '40200452735', - '40200639953', '40200700675', '90001200901']) +whitelist = set(''' +00000021249 00000035692 00000058035 00000065377 00000078587 00000111941 +00000126295 00000140874 00000155482 00000236621 00000292212 00000564933 +00000719400 00004110056 00100000169 00100012146 00100013114 00100016495 +00100053841 00100061611 00100061945 00100083860 00100101767 00100126468 +00100145737 00100165504 00100169706 00100172940 00100174666 00100181057 +00100228718 00100231017 00100238382 00100239662 00100255349 00100288143 +00100288929 00100322649 00100350928 00100378440 00100384523 00100415853 +00100523399 00100524531 00100530588 00100587320 00100590683 00100593378 +00100622461 00100709215 00100728113 00100729795 00100756082 00100759932 +00101118022 00101166065 00101527366 00101541404 00101621981 00101659661 +00101684656 00101686299 00101821735 00101961125 00102025201 00102398239 +00102577448 00102630192 00103266558 00103436936 00103443802 00103754365 +00103822440 00103983004 00104486903 00104532086 00104662561 00104727362 +00104785104 00104862525 00105263314 00105328185 00105512386 00105530894 +00105606543 00105832408 00106190966 00106284933 00106418989 00106442522 +00106479922 00106916538 00107045499 00107184305 00107445493 00107602067 +00107665688 00107687383 00107691942 00108113363 00108132448 00108184024 +00108264871 00108286792 00108384121 00108413431 00108497822 00108784684 +00108796883 00109183462 00109229090 00109402756 00109785951 00109987435 +00110047715 00110071113 00110111536 00110490843 00110578459 00110646203 +00111014782 00111150559 00113453700 00114272360 00114532330 00114532355 +00114687216 00115039795 00115343847 00116256005 00116448241 00116508511 +00117582001 00119161853 00121344165 00121581750 00121581800 00129737056 +00130610001 00131257003 00133987848 00134588056 00142864013 00143072001 +00144435001 00146965001 00147485003 00149657590 00155144906 00161884001 +00162906003 00163540003 00163549012 00163709018 00166533003 00167311001 +00170009162 00170115579 00171404771 00174729003 00174940001 00181880003 +00184129003 00189213001 00189405093 00190002567 00196714003 00200021994 +00200028716 00200040516 00200063601 00200123640 00200291381 00200409772 +00200435544 00200969260 00201023001 00202110760 00202744522 00207327056 +00208430205 00208832003 00218507031 00222017001 00235482001 00236245013 +00241997013 00246160013 00261011013 00270764013 00274652001 00278005023 +00289931003 00291431001 00291549003 00297018001 00298109001 00299724003 +00300001538 00300011700 00300013835 00300017875 00300019575 00300020806 +00300025568 00300052890 00300169535 00300244009 00300636564 00301200901 +00305535206 00345425001 00352861001 00356533003 00362684023 00376023023 +00400001552 00400001614 00400012957 00400189811 00425759001 00435518003 +00475916056 00481106001 00481595003 00493593003 00516077003 00520207699 +00524571001 00539342005 00540077717 00544657001 00574599001 00599408003 +00633126023 00644236001 00648496171 00651322001 00686904003 00720758056 +00731054054 00741721056 00757398001 00800106971 00848583056 00857630012 +00971815056 01000005580 01000250733 01000268998 01000728704 01000855890 +01038813907 01094560111 01100014261 01100620962 01154421047 01200004166 +01200008613 01200011252 01200014133 01200033420 01200771767 01300001142 +01300005424 01300020331 01400000282 01400074875 01600009531 01600019983 +01600026316 01600027894 01650257001 01700052445 01700200811 01800022457 +01800058439 01800527104 01810035037 02038569001 02100061022 02300003061 +02300023225 02300031758 02300037618 02300047220 02300052220 02300054193 +02300062066 02300085158 02400229955 02500045676 02600036132 02600094954 +02700029905 02755972001 02800000129 02800021761 02800025877 02800029588 +02831146001 03000411295 03100109611 03100488033 03100654224 03100673050 +03100963776 03101070888 03102828522 03102936385 03103315310 03103749672 +03104354892 03111670001 03121982479 03200066940 03300023841 03400058730 +03400157849 03401709701 03500037890 03600046116 03600127038 03600180637 +03700663589 03800032522 03807240010 03852380001 03900069856 03900192284 +04022130495 04400002002 04600198229 04700004024 04700020933 04700027064 +04700061076 04700070460 04700074827 04700221469 04701174268 04800019561 +04800034846 04800046910 04800956889 04801245892 04900009932 04900011690 +04900013913 04900014592 04900026260 04900028443 04900448230 04902549001 +04941042001 05100085656 05300013029 05400016031 05400021759 05400022042 +05400028496 05400033166 05400034790 05400037495 05400038776 05400040523 +05400047674 05400048248 05400049237 05400049834 05400053627 05400054156 +05400055485 05400055770 05400057300 05400058964 05400059956 05400060743 +05400062459 05400067703 05400072273 05400076481 05400216948 05500003079 +05500006796 05500008806 05500012039 05500014375 05500017761 05500021118 +05500022399 05500023407 05500024135 05500024190 05500027749 05500032681 +05500173451 05500303477 05600037761 05600038251 05600038964 05600051191 +05600063115 05600267737 05600553831 05700064077 05700071202 05900072869 +06100007818 06100009131 06100011935 06100013662 06100016486 06337850001 +06400007916 06400011981 06400014372 06486186001 06500162568 06800008448 +06800245196 06843739551 06900069184 07000007872 07100018031 07100063262 +07400001254 07600000691 07700009346 07800000968 07800002361 08016809001 +08100002398 08498619001 08800003986 08900001310 08900005064 08952698001 +09000117963 09000169133 09010011235 09022066011 09300006239 09300035357 +09421581768 09500008222 09700003030 09700179110 09900017864 10061805811 +10100178199 10201116357 10462157001 10491297001 10621581792 10983439110 +11700000658 12019831001 12300074628 22321581834 22721581818 40200401324 +40200452735 40200639953 40200700675 90001200901 +'''.split()) def compact(number): From 3db826c62332bab0e839d83514781ff1f5f17320 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 18 Apr 2015 16:38:36 +0200 Subject: [PATCH 032/654] Add Albanian NIPT (VAT) number Partially based on the implementation in the vatnumber module. Some valid numbers appear to start with an L so those are allowed as well. --- stdnum/al/__init__.py | 24 +++++ stdnum/al/nipt.py | 80 +++++++++++++++++ tests/test_al_nipt.doctest | 178 +++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+) create mode 100644 stdnum/al/__init__.py create mode 100644 stdnum/al/nipt.py create mode 100644 tests/test_al_nipt.doctest diff --git a/stdnum/al/__init__.py b/stdnum/al/__init__.py new file mode 100644 index 00000000..b0ab0ab7 --- /dev/null +++ b/stdnum/al/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Albanian numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Albanian numbers.""" + +# provide vat as an alias +from stdnum.al import nipt as vat diff --git a/stdnum/al/nipt.py b/stdnum/al/nipt.py new file mode 100644 index 00000000..1bb00021 --- /dev/null +++ b/stdnum/al/nipt.py @@ -0,0 +1,80 @@ +# nipt.py - functions for handling Albanian VAT numbers +# coding: utf-8 +# +# Copyright (C) 2008-2011 Cédric Krier +# Copyright (C) 2008-2011 B2CK +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""NIPT (Numri i Identifikimit për Personin e Tatueshëm, Albanian VAT number). + +The Albanian NIPT is a 10-digit number with the first and last character +being letters. + +>>> validate('AL J 91402501 L') +'J91402501L' +>>> validate('K22218003V') +'K22218003V' +>>> validate('(AL) J 91402501') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> validate('Z 22218003 V') +Traceback (most recent call last): + ... +InvalidFormat: ... +""" + +import re + +from stdnum.exceptions import * +from stdnum.util import clean + + +# regular expression for matching number +_nipt_re = re.compile('^[JKL][0-9]{8}[A-Z]$') + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + number = clean(number, ' ').upper().strip() + if number.startswith('AL'): + number = number[2:] + if number.startswith('(AL)'): + number = number[4:] + return number + + +def validate(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length and formatting.""" + number = compact(number) + if len(number) != 10: + raise InvalidLength() + if not _nipt_re.match(number): + raise InvalidFormat() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length and formatting.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_al_nipt.doctest b/tests/test_al_nipt.doctest new file mode 100644 index 00000000..786ebb75 --- /dev/null +++ b/tests/test_al_nipt.doctest @@ -0,0 +1,178 @@ +test_al_nitp.doctest - more detailed doctests stdnum.al.nipt + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.al.nipt module. + +>>> from stdnum.al import nipt +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. There is also +a validation service at +http://www.qkr.gov.al/nrc/kerko_per_subjekt.aspx + +>>> numbers = ''' +... +... J 64103842 S +... J 69102564 M +... J 78311939 N +... J 8291 6498 D +... J 91402501 L +... J 98624806 P +... J61807017B +... J61826022R +... J61911008C +... J61922018S +... J61923008Q +... J62903175S +... J62903393F +... J62903470T +... J62903491S +... J64103682L +... J66702410U +... J67902618M +... J69405530G +... J71824003C +... J72603171B +... J73706808B +... J73721043Q +... J74517201G +... J77411245Q +... J81314004P +... J81402004E +... J81508002V +... J81804001C +... J86526614T +... J91305001Q +... J91808007H +... J92006014W +... J92917219S +... J93910409N +... K 01725001F +... K 02727202 O +... K 11715005 L +... K 22013001U +... K 37507987 N +... K 41316001 V +... K 41424801 U +... K 47905861 R +... K 63005203 O +... K 67204202 P +... K 91426008 U +... K11515001T +... K11715005L +... K12113002H +... K14019001H +... K21405003G +... K21622001M +... K22218003V +... K26330201T +... K31404025J +... K31525146H +... K31526056N +... K31823059I +... K31929010K +... K32203501H +... K32801430W +... K33714725W +... K34712418N +... K36308746I +... K36520204A +... K42725403f +... K46621201I +... K51428013Q +... K51518058O +... K59418208E +... K61710508W +... K71903001A +... K72410014H +... K81427030E +... K81428502L +... K81618039O +... K84508002F +... K87101202A +... K91725009J +... K92402023O +... L 21721005U +... L 22614402 H +... L01307052Q +... L01510016S +... L01622006F +... L01909501I +... L02003503P +... L02023501H +... L02226012N +... L02602801H +... L03321203G +... L06426702Q +... L06524402O +... L06901403L +... L06923204C +... L07305201K +... L08711201I +... L09110504G +... L11325024K +... L11625013E +... L11810502T +... L11815018A +... L12003021H +... L12009010A +... L12624002J +... L13020404N +... L14118803B +... L14703202P +... L21310054D +... L21408015A +... L21429502L +... L21508023Q +... L21923507N +... L22201021E +... L22203019C +... L22804207O +... L22825801P +... L22902002B +... L24006002V +... L24018612J +... L26311004G +... L29616001A +... L31511019E +... L31911504A +... L32210507A +... L32319014A +... L32522401O +... L33117002J +... L33318001M +... L41309075A +... L41320026E +... L41410025S +... L42008005H +... L42115015G +... L42206027K +... L42307007E +... L42710403A +... L42720201A +... L44119601E +... L46812703Q +... L47014204F +... L48117101S +... +... ''' +>>> [x for x in numbers.splitlines() if x and not nipt.is_valid(x)] +[] From c69c8f0fc52d003faeba378a6834fe555eff3b72 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 18 Apr 2015 18:02:41 +0200 Subject: [PATCH 033/654] Add Chilean national tax number (RUT) Based on the implementation in the vatnumber module. --- stdnum/cl/__init__.py | 25 ++++ stdnum/cl/rut.py | 91 +++++++++++++++ tests/test_cl_rut.doctest | 235 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 351 insertions(+) create mode 100644 stdnum/cl/__init__.py create mode 100644 stdnum/cl/rut.py create mode 100644 tests/test_cl_rut.doctest diff --git a/stdnum/cl/__init__.py b/stdnum/cl/__init__.py new file mode 100644 index 00000000..6a593659 --- /dev/null +++ b/stdnum/cl/__init__.py @@ -0,0 +1,25 @@ +# __init__.py - collection of Chilean numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Chilean numbers.""" + +# provide vat and run as an alias +from stdnum.cl import rut as vat +from stdnum.cl import rut as run diff --git a/stdnum/cl/rut.py b/stdnum/cl/rut.py new file mode 100644 index 00000000..ba27fa83 --- /dev/null +++ b/stdnum/cl/rut.py @@ -0,0 +1,91 @@ +# rut.py - functions for handling Chile RUT/RUN numbers +# coding: utf-8 +# +# Copyright (C) 2008-2011 Cédric Krier +# Copyright (C) 2008-2011 B2CK +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""RUT (Rol Único Tributario, Chilean national tax number). + +The RUT, the Chilean national tax number is the same as the RUN (Rol Único +Nacional) the Chilean national identification number. The number consists of +8 digits, followed by a check digit. + +>>> validate('76086428-5') +'760864285' +>>> validate('CL 12531909-2') +'125319092' +>>> validate('12531909-3') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('76086A28-5') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> format('125319092') +'12.531.909-2' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + number = clean(number, ' -.').upper().strip() + if number.startswith('CL'): + number = number[2:] + return number + + +def calc_check_digit(number): + """Calculate the check digit. The number passed should not have the + check digit included.""" + s = sum(int(n) * (4 + (5 - i) % 6) for i, n in enumerate(number[::-1])) + return '0123456789K'[s % 11] + + +def validate(number): + """Checks to see if the number provided is a valid number. This + checks the length, formatting and check digit.""" + number = compact(number) + if len(number) not in (8, 9): + raise InvalidLength() + if not number[:-1].isdigit(): + raise InvalidFormat() + if number[-1] != calc_check_digit(number[:-1]): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return (number[:-7] + '.' + number[-7:-4] + '.' + + number[-4:-1] + '-' + number[-1]) diff --git a/tests/test_cl_rut.doctest b/tests/test_cl_rut.doctest new file mode 100644 index 00000000..c0a96eb6 --- /dev/null +++ b/tests/test_cl_rut.doctest @@ -0,0 +1,235 @@ +test_cl_rut.doctest - more detailed tests for stdnum.cl.rut + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.cl.rut module. + +>>> from stdnum.cl import rut +>>> from stdnum.exceptions import * + + +This is a selection of numbers (which should be valid) found at +https://palena.sii.cl/cvc/dte/ee_empresas_emisoras.html + +>>> numbers = ''' +... +... 10075381-2 +... 10219183-8 +... 10273665-6 +... 10319569-1 +... 10402061-5 +... 10516143-3 +... 10548375-9 +... 10626628-K +... 10726809-K +... 10830138-4 +... 10860841-2 +... 11472349-5 +... 11482004-0 +... 11605334-9 +... 11840208-1 +... 11975507-7 +... 12150075-2 +... 12362626-5 +... 12392004-K +... 12415074-4 +... 12423920-6 +... 12574946-1 +... 12584568-1 +... 12645789-8 +... 12723467-1 +... 12790819-2 +... 13021498-3 +... 13073522-3 +... 13095834-6 +... 13097057-5 +... 13309437-7 +... 13490667-7 +... 13531984-8 +... 13646691-7 +... 13674023-7 +... 13743324-9 +... 13831173-2 +... 13908671-6 +... 13940679-6 +... 13966594-5 +... 13972493-3 +... 14232760-0 +... 14391166-7 +... 14676291-3 +... 14684927-K +... 14693665-2 +... 15187234-4 +... 15261623-6 +... 15264124-9 +... 15450326-9 +... 15930050-1 +... 16045507-1 +... 16607084-8 +... 3528355-2 +... 4769973-8 +... 52000543-9 +... 52003746-2 +... 5314394-6 +... 53311164-5 +... 5666126-3 +... 5759700-3 +... 5843733-6 +... 6188994-9 +... 6447064-7 +... 65700550-9 +... 6592333-5 +... 7092881-7 +... 7116223-0 +... 7341194-7 +... 7362723-0 +... 73968300-9 +... 76001215-7 +... 76001925-9 +... 76005843-2 +... 76007743-7 +... 76008294-5 +... 76009811-6 +... 76011739-0 +... 76012844-9 +... 76014309-K +... 76015107-6 +... 76015662-0 +... 76016096-2 +... 76019921-4 +... 76026514-4 +... 76026754-6 +... 76029043-2 +... 76033711-0 +... 76035895-9 +... 76042275-4 +... 76043207-5 +... 76043478-7 +... 76044777-3 +... 76048222-6 +... 76049323-6 +... 76051527-2 +... 76063318-6 +... 76069188-7 +... 76069621-8 +... 76073759-3 +... 76077253-4 +... 76080924-1 +... 76083398-3 +... 76094260-K +... 76164130-1 +... 76200530-1 +... 76200720-7 +... 76324600-0 +... 76327980-4 +... 76375410-3 +... 76377670-0 +... 76453840-4 +... 76461120-9 +... 76525260-1 +... 76527180-0 +... 76563850-K +... 76565840-3 +... 76624810-1 +... 76650270-9 +... 76653690-5 +... 76654270-0 +... 76670180-9 +... 76688170-K +... 76699320-6 +... 76724000-7 +... 76757480-0 +... 76758840-2 +... 76760580-3 +... 76792810-6 +... 76827950-0 +... 76884020-2 +... 76898760-2 +... 76953260-9 +... 76968400-K +... 77060220-3 +... 77183530-9 +... 77248650-2 +... 77308020-8 +... 77380420-6 +... 77413050-0 +... 77416300-K +... 7741928-4 +... 77451560-7 +... 77753800-4 +... 77827630-5 +... 77948290-1 +... 77962630-K +... 77986680-7 +... 78006840-K +... 78030800-1 +... 78072520-6 +... 78207580-2 +... 78281650-0 +... 78298460-8 +... 78432780-9 +... 78469000-8 +... 78477650-6 +... 78558880-0 +... 78780430-6 +... 78827280-4 +... 78861790-9 +... 78874150-2 +... 79586380-K +... 8005083-6 +... 83156400-8 +... 8352320-4 +... 8378799-6 +... 8379191-8 +... 8649219-9 +... 88830500-9 +... 90753000-0 +... 91520000-1 +... 92648000-6 +... 9290661-2 +... 9334748-K +... 93698000-7 +... 9475529-8 +... 9485538-1 +... 9506985-1 +... 9522447-4 +... 9580657-0 +... 96626570-1 +... 96632300-0 +... 96711760-9 +... 96721090-0 +... 96779280-2 +... 96813830-8 +... 96837220-3 +... 96919970-K +... 96930440-6 +... 96953410-K +... 96967100-K +... 9890042-K +... 9896013-9 +... 99147000-K +... 99512950-7 +... 99540200-9 +... 99561530-4 +... 99568510-8 +... 99595090-1 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not rut.is_valid(x)] +[] From 144e1a45d2f81f424fd71b0f6c0109737e638aec Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 18 Apr 2015 21:24:00 +0100 Subject: [PATCH 034/654] Add Colombian NIT/RUT (VAT) code Based on the implementation in the vatnumber module. --- stdnum/co/__init__.py | 25 ++++++++++++ stdnum/co/nit.py | 92 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 stdnum/co/__init__.py create mode 100644 stdnum/co/nit.py diff --git a/stdnum/co/__init__.py b/stdnum/co/__init__.py new file mode 100644 index 00000000..687e2102 --- /dev/null +++ b/stdnum/co/__init__.py @@ -0,0 +1,25 @@ +# __init__.py - collection of Colombian numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Colombian numbers.""" + +# provide vat and rut as an alias +from stdnum.co import nit as vat +from stdnum.co import nit as rut diff --git a/stdnum/co/nit.py b/stdnum/co/nit.py new file mode 100644 index 00000000..3b4ec089 --- /dev/null +++ b/stdnum/co/nit.py @@ -0,0 +1,92 @@ +# nit.py - functions for handling Colombian identity codes +# coding: utf-8 +# +# Copyright (C) 2008-2011 Cédric Krier +# Copyright (C) 2008-2011 B2CK +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""NIT (Número De Identificación Tributaria, Colombian identity code). + +This number, also referred to as RUT (Registro Unico Tributario) is a 10-digit +code that includes a check digit. + +>>> validate('213.123.432-1') +'2131234321' +>>> validate('2131234351') +'2131234351' +>>> validate('2131234350') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('213123435') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> validate('213123435A') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> format('2131234351') +'213.123.435-1' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips + surrounding whitespace and separation dash.""" + return clean(number, '.-').upper().strip() + + +def calc_check_digit(number): + """Calculate the check digit. The number passed should not have the + check digit included.""" + weights = (3, 7, 13, 17, 19, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71) + s = sum(int(n) * weights[i] for i, n in enumerate(number[::-1])) + return '01987654321'[s % 11] + + +def validate(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + number = compact(number) + if len(number) != 10: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return (number[:-7] + '.' + number[-7:-4] + '.' + + number[-4:-1] + '-' + number[-1]) From ba894d7c98072dd533e17a0c115d536c49a3a030 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 18 Apr 2015 23:27:44 +0200 Subject: [PATCH 035/654] Add San Marino COE (VAT) number Based partially on the implementation in the vatnumber module. --- stdnum/sm/__init__.py | 24 +++++++++++++ stdnum/sm/coe.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 stdnum/sm/__init__.py create mode 100644 stdnum/sm/coe.py diff --git a/stdnum/sm/__init__.py b/stdnum/sm/__init__.py new file mode 100644 index 00000000..59f8ccee --- /dev/null +++ b/stdnum/sm/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of San Marino numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of San Marino numbers.""" + +# provide vat as an alias +from stdnum.sm import coe as vat diff --git a/stdnum/sm/coe.py b/stdnum/sm/coe.py new file mode 100644 index 00000000..cb3e4877 --- /dev/null +++ b/stdnum/sm/coe.py @@ -0,0 +1,79 @@ +# coe.py - functions for handling San Marino tax numbers +# coding: utf-8 +# +# Copyright (C) 2008-2011 Cédric Krier +# Copyright (C) 2008-2011 B2CK +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""COE (Codice operatore economico, San Marino national tax number). + +The COE is a tax identification number of up to 5-digits used in San Marino. +Leading zeroes are commonly dropped. + +>>> validate('51') +'51' +>>> validate('024165') +'24165' +>>> validate('2416A') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('1124165') +Traceback (most recent call last): + ... +InvalidLength: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +# a collection of all registered numbers with 2 or less digits +_lownumbers = set(( + 2, 4, 6, 7, 8, 9, 10, 11, 13, 16, 18, 19, 20, 21, 25, 26, 30, 32, 33, 35, + 36, 37, 38, 39, 40, 42, 45, 47, 49, 51, 52, 55, 56, 57, 58, 59, 61, 62, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 81, 84, 85, + 87, 88, 91, 92, 94, 95, 96, 97, 99)) + + +def compact(number): + """Convert the number to the minimal representation. This strips + surrounding whitespace and separation dash.""" + return clean(number, '.').strip().lstrip('0') + + +def validate(number): + """Checks to see if the number provided is a valid number. This checks + the length and formatting.""" + number = compact(number) + if len(number) > 5 or len(number) == 0: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if len(number) < 3 and int(number) not in _lownumbers: + raise InvalidComponent() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 4d7163c689fd1a79fd28552ace915c0b09ba6efa Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Wed, 22 Apr 2015 23:01:17 +0200 Subject: [PATCH 036/654] Add Argentinian CUIT (VAT) number Based partially on the implementation in the vatnumber module. --- stdnum/ar/__init__.py | 24 ++++ stdnum/ar/cuit.py | 80 +++++++++++++ tests/test_ar_cuit.doctest | 236 +++++++++++++++++++++++++++++++++++++ 3 files changed, 340 insertions(+) create mode 100644 stdnum/ar/__init__.py create mode 100644 stdnum/ar/cuit.py create mode 100644 tests/test_ar_cuit.doctest diff --git a/stdnum/ar/__init__.py b/stdnum/ar/__init__.py new file mode 100644 index 00000000..999da35b --- /dev/null +++ b/stdnum/ar/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Argentinian numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Argentinian numbers.""" + +# provide vat as an alias +from stdnum.ar import cuit as vat diff --git a/stdnum/ar/cuit.py b/stdnum/ar/cuit.py new file mode 100644 index 00000000..78e81aaf --- /dev/null +++ b/stdnum/ar/cuit.py @@ -0,0 +1,80 @@ +# cuit.py - functions for handling Argentinian VAT numbers +# coding: utf-8 +# +# Copyright (C) 2009 Mariano Reingart +# Copyright (C) 2011 Sebastián Marró +# Copyright (C) 2008-2011 Cédric Krier +# Copyright (C) 2008-2011 B2CK +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CUIT (Código Único de Identificación Tributaria, Argentinian tax number). + +The CUIT is a taxpayer identification number used for VAT (IVA, Impuesto al +Valor Agregado) and other taxes. + +>>> validate('200-5536168-2') +'20055361682' +>>> validate('2026756539') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> validate('2026756A393') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('20267565392') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip() + + +def calc_check_digit(number): + """Calculate the check digit.""" + weights = (5, 4, 3, 2, 7, 6, 5, 4, 3, 2) + check = sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return '012345678990'[11 - check] + + +def validate(number): + """Checks to see if the number provided is a valid CUIT.""" + number = compact(number) + if len(number) != 11: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid CUIT.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_ar_cuit.doctest b/tests/test_ar_cuit.doctest new file mode 100644 index 00000000..e12003a4 --- /dev/null +++ b/tests/test_ar_cuit.doctest @@ -0,0 +1,236 @@ +test_ar_cuit.doctest - more detailed doctests for the stdnum.ac.cuit module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ac.cuit module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.ar import cuit +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + + +>>> numbers = ''' +... +... 20040356437 +... 20047433747 +... 20050573452 +... 20054613009 +... 20058481425 +... 20058723410 +... 20058879089 +... 20073562954 +... 20073659486 +... 20076084735 +... 20077530127 +... 20081042404 +... 20086295106 +... 20086607043 +... 20101376630 +... 20102289855 +... 20103055475 +... 20105567643 +... 20108146304 +... 20108524244 +... 20108909170 +... 20110831243 +... 20112806440 +... 20113951517 +... 20120774019 +... 20121388570 +... 20125491783 +... 20128032801 +... 20129599058 +... 20131707992 +... 20132002755 +... 20136310136 +... 20143455905 +... 20144779674 +... 20145053294 +... 20146234306 +... 20171104042 +... 20171823960 +... 20182886530 +... 20184230446 +... 20187687137 +... 20202569456 +... 20203954795 +... 20204393363 +... 20205752766 +... 20209954088 +... 20213601785 +... 20220030165 +... 20223730907 +... 20224293578 +... 20225121169 +... 20227716011 +... 20237525613 +... 20238697752 +... 20245079541 +... 20248651793 +... 20250926155 +... 20255761367 +... 20259636117 +... 20261576393 +... 20262358977 +... 20271280344 +... 20272201588 +... 20275121364 +... 20282423910 +... 20283621759 +... 20285115664 +... 20287747722 +... 20290072981 +... 20293386162 +... 20298479932 +... 20300953655 +... 20305216950 +... 20314469616 +... 20314970951 +... 20319011987 +... 20320639361 +... 20321768165 +... 20323118249 +... 20324215809 +... 20324381709 +... 20324794043 +... 20328504708 +... 20344135763 +... 20344379131 +... 20347620204 +... 20354205271 +... 20355854974 +... 20360612679 +... 20373308359 +... 20922078182 +... 20922312401 +... 20929597916 +... 23042708194 +... 23045174999 +... 23081181489 +... 23102532279 +... 23161822434 +... 23175636404 +... 23214238519 +... 23233647969 +... 23244989004 +... 23270774199 +... 23278857069 +... 23279103009 +... 23314669649 +... 23324786244 +... 23334052729 +... 23338909764 +... 23355601684 +... 23935319099 +... 24276145513 +... 27018259899 +... 27023396861 +... 27032487705 +... 27056528240 +... 27057490638 +... 27060695488 +... 27063049366 +... 27066515678 +... 27066595485 +... 27098767849 +... 27107931738 +... 27114547382 +... 27121262059 +... 27122342420 +... 27127539923 +... 27130430142 +... 27134454569 +... 27172336472 +... 27173495094 +... 27175432812 +... 27177192010 +... 27177721994 +... 27179361642 +... 27180795672 +... 27185685298 +... 27201493841 +... 27205913209 +... 27215060417 +... 27216654523 +... 27216824178 +... 27221319619 +... 27232710921 +... 27234685568 +... 27243584871 +... 27245896609 +... 27247110831 +... 27248949770 +... 27250076679 +... 27259106430 +... 27259522078 +... 27261420215 +... 27262935081 +... 27267742249 +... 27273160103 +... 27276663084 +... 27278570601 +... 27279026271 +... 27281657025 +... 27283110546 +... 27284491675 +... 27284753505 +... 27288128389 +... 27296108591 +... 27303521211 +... 27304599451 +... 27310947828 +... 27312481389 +... 27314396036 +... 27316481677 +... 27335804088 +... 27354548165 +... 27366029902 +... 27366146259 +... 27372855350 +... 27373316690 +... 27937240444 +... 27938621395 +... 27940212664 +... 27949019387 +... 30653311857 +... 30670349760 +... 30691769336 +... 30700596210 +... 30710422636 +... 30710916574 +... 30711016046 +... 30711067074 +... 30711271003 +... 30711683166 +... 30712071199 +... 30712417419 +... 30714322296 +... 30714468088 +... 30714789062 +... 33534828379 +... 33708972679 +... 33712308589 +... 33714423709 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not cuit.is_valid(x)] +[] From 9934f76e9cd83be21c4663255ed70f46d34de5aa Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Tue, 14 Oct 2014 22:30:55 +0300 Subject: [PATCH 037/654] Change description of Greek FPA number In Greece, our VAT number is used as a generic "tax registration" num. Update the docstring to reflect that name. --- stdnum/gr/vat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/gr/vat.py b/stdnum/gr/vat.py index 0a28f43c..3510a35f 100644 --- a/stdnum/gr/vat.py +++ b/stdnum/gr/vat.py @@ -18,7 +18,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA -"""FPA, ΦΠΑ (Foros Prostithemenis Aksias, the Greek VAT number). +"""FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number). The FPA is a 9-digit number with a simple checksum. From eac4d634d6e1170cf79484b5df02dd12c9be9eab Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 25 Apr 2015 17:34:16 +0200 Subject: [PATCH 038/654] Add extra test for French TVA --- stdnum/fr/tva.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stdnum/fr/tva.py b/stdnum/fr/tva.py index dca4f497..c82ad82f 100644 --- a/stdnum/fr/tva.py +++ b/stdnum/fr/tva.py @@ -1,7 +1,7 @@ # tva.py - functions for handling French TVA numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -37,6 +37,10 @@ 'K7399859412' >>> validate('4Z123456782') # new-style number starting with digit '4Z123456782' +>>> validate('IO334175221') # the letters cannot by I or O +Traceback (most recent call last): + ... +InvalidFormat: ... """ from stdnum.exceptions import * From 23882e231dd5c1c6c41fd627e63842ef2784a788 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 27 Apr 2015 12:32:30 +0200 Subject: [PATCH 039/654] Add extra tests for the stdnum.ec.ruc module These numbers were found in various online sources. --- tests/test_ec_ruc.doctest | 186 +++++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 1 deletion(-) diff --git a/tests/test_ec_ruc.doctest b/tests/test_ec_ruc.doctest index 2f1065f9..1bdaebf8 100644 --- a/tests/test_ec_ruc.doctest +++ b/tests/test_ec_ruc.doctest @@ -1,7 +1,7 @@ test_ec_ruc.doctest - more detailed doctests for stdnum.ec.ruc module Copyright (C) 2014 Jonathan Finlay -Copyright (C) 2014 Arthur de Jong +Copyright (C) 2014-2015 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -56,25 +56,173 @@ Normal natural RUC values (third digit less than 6) that should just work. Normal public RUC values (third digit is 6) that should just work. >>> numbers = ''' +... 0160000510001 ... 0160001910001 +... 0160002210001 +... 0160037780001 +... 0260000250001 +... 0260000330001 +... 0260000760001 ... 0260001060001 +... 0260001140001 +... 0360000230001 +... 0360000580001 ... 0360001040001 +... 0360016230001 +... 0360023950001 +... 0460000130001 +... 0460000210001 +... 0460000560001 +... 0460000640001 +... 0460000720001 +... 0460001020001 +... 0460014860001 +... 0460020670001 +... 0460022020001 +... 0460022100001 +... 0460022370001 +... 0460023930001 +... 0460024310001 +... 0460024660001 +... 0460024740001 +... 0460026010001 +... 0460027250001 +... 0560000380001 ... 0560000540001 +... 0560000700001 ... 0660000280001 +... 0660000520001 ... 0660000600001 +... 0660000790001 ... 0660000870001 +... 0660000950001 +... 0660001090001 +... 0660001680001 +... 0660820400001 +... 0660828140001 +... 0660831360001 +... 0760000180001 +... 0760000260001 +... 0760000340001 +... 0760000850001 +... 0760000930001 +... 0760001070001 +... 0760001150001 +... 0760001230001 +... 0760001310001 +... 0760001900001 +... 0760033270001 +... 0860000160001 +... 0860000240001 +... 0860013300001 +... 0860014460001 +... 0860017480001 +... 0860019260001 +... 0860019500001 +... 0860032440001 +... 0960000490001 +... 0960000730001 +... 0960001700001 +... 0960005290001 +... 0960006420001 ... 0968529830001 +... 0968566440001 +... 1060000180001 +... 1060000260001 +... 1060000340001 ... 1060000420001 +... 1060000500001 ... 1060000690001 +... 1060000770001 ... 1060008080001 +... 1060014480001 +... 1060016930001 +... 1060018040001 +... 1060019520001 +... 1060021420001 ... 1060024600001 +... 1160000670001 +... 1160000750001 +... 1160001130001 +... 1160001480001 +... 1160008140001 +... 1160028840001 +... 1160037400001 +... 1160039880001 +... 1160836120001 +... 1260000140001 +... 1260000220001 +... 1260000300001 +... 1260000490001 +... 1260000730001 +... 1260001700001 +... 1260001890001 +... 1260002000001 +... 1260002190001 +... 1260006340001 +... 1260006770001 +... 1260033820001 +... 1360000200001 +... 1360000390001 +... 1360000470001 ... 1360000630001 +... 1360000710001 +... 1360001520001 +... 1360001600001 +... 1360001790001 +... 1360001870001 +... 1360002840001 +... 1360003300001 +... 1360014850001 +... 1360024570001 +... 1360029100001 +... 1360047940001 +... 1360052350001 +... 1360052430001 +... 1360055100001 +... 1360059280001 +... 1460000290001 +... 1460000370001 ... 1560000780001 +... 1560001160001 +... 1560001240001 +... 1660000680001 +... 1660011020001 +... 1660012930001 +... 1760000150001 ... 1760001040001 ... 1760001550001 +... 1760003920001 +... 1760004060001 +... 1760004650001 ... 1760009880001 +... 1760013560001 ... 1768007390001 +... 1768022510001 +... 1768034600001 +... 1768045130001 +... 1768048820001 +... 1768085430001 +... 1768102970001 +... 1768119510001 +... 1768123380001 +... 1768133340001 ... 1768152130001 +... 1768153450001 +... 1768155660001 +... 1860000130001 +... 1860000210001 +... 1860000480001 +... 1860000720001 +... 1860000800001 +... 1860000990001 +... 1860001020001 +... 1860001100001 +... 1865011360001 +... 1960001190001 +... 2060000150001 +... 2060000230001 +... 2160000480001 ... 2160011760001 ... ''' >>> [x for x in numbers.splitlines() if x and not ruc.is_valid(x)] @@ -84,25 +232,61 @@ Normal public RUC values (third digit is 6) that should just work. Normal juridical RUC values (third digit is 9) that should just work. >>> numbers = ''' +... 0190115798001 ... 0190155722001 +... 0290001269001 +... 0290003288001 +... 0390027923001 +... 0490001883001 ... 0490002669001 ... 0590041920001 +... 0590052000001 +... 0690045389001 +... 0790015002001 ... 0790024656001 ... 0990138850001 +... 0990247536001 +... 0990459444001 +... 0991189432001 +... 0991208291001 +... 0991445854001 ... 0992397535001 +... 0992563834001 +... 1090033456001 +... 1090109487001 ... 1190015110001 +... 1190068389001 +... 1390001920001 ... 1390007791001 +... 1390013678001 ... 1390089410001 ... 1390091474001 +... 1690012606001 ... 1790011674001 +... 1790023508001 +... 1790045668001 ... 1790085783001 +... 1790093204001 ... 1790325083001 +... 1790451801001 +... 1790501469001 +... 1790517454001 +... 1790567699001 +... 1790834670001 +... 1791240448001 +... 1791280156001 ... 1791280172001 +... 1791708040001 ... 1791714350001 +... 1791891465001 +... 1791942167001 ... 1792060346001 +... 1792079411001 ... 1792141869001 +... 1792147638001 ... 1792373255001 ... 1890001323001 +... 1890003628001 ... 1890037646001 ... ''' >>> [x for x in numbers.splitlines() if x and not ruc.is_valid(x)] From dd309e4e2279a1c648546f9417c3f624ccbd6f21 Mon Sep 17 00:00:00 2001 From: Tomas Thor Jonsson Date: Fri, 24 Oct 2014 13:25:30 +0200 Subject: [PATCH 040/654] Add support for SE orgnr This also delegates some of the validation for the Swedish VAT module to the orgnr module. --- stdnum/se/orgnr.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++ stdnum/se/vat.py | 12 ++++---- 2 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 stdnum/se/orgnr.py diff --git a/stdnum/se/orgnr.py b/stdnum/se/orgnr.py new file mode 100644 index 00000000..339f6247 --- /dev/null +++ b/stdnum/se/orgnr.py @@ -0,0 +1,73 @@ +# orgnr.py - functions for handling Swedish organisation numbers +# coding: utf-8 +# +# Copyright (C) 2012-2015 Arthur de Jong +# Copyright (C) 2014 Tomas Thor Jonsson +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Orgnr (Organisationsnummer, Swedish company number). + +The Orgnr (Organisationsnummer) is the national number to identify Swedish +companies and consists of 10 digits. These are the first 10 digits in the +Swedish VAT number, i.e. it's the VAT number without the 'SE' in front and +the '01' at the end. + +>>> validate('1234567897') +'1234567897' +>>> validate('1234567891') # invalid check digits +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('123456-7897') +'123456-7897' +""" + +from stdnum import luhn +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -.').strip() + + +def validate(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 10: + raise InvalidLength() + return luhn.validate(number) + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the number to the standard format.""" + number = compact(number) + return number[:6] + '-' + number[6:] diff --git a/stdnum/se/vat.py b/stdnum/se/vat.py index 88a73acd..3868828f 100644 --- a/stdnum/se/vat.py +++ b/stdnum/se/vat.py @@ -20,9 +20,9 @@ """VAT (Moms, Mervärdesskatt, Swedish VAT number). -The Momsregistreringsnummer is used for VAT (Moms, Mervärdesskatt) -purposes and consists of 12 digits of which the last two should be 01. The -first 10 digits should have a valid Luhn checksum. +The Momsregistreringsnummer is used for VAT (Moms, Mervärdesskatt) purposes +and consists of 12 digits of which the last two should be 01. The first 10 +digits should have a valid Luhn checksum. >>> validate('SE 123456789701') '123456789701' @@ -32,8 +32,8 @@ InvalidChecksum: ... """ -from stdnum import luhn from stdnum.exceptions import * +from stdnum.se import orgnr from stdnum.util import clean @@ -52,9 +52,7 @@ def validate(number): number = compact(number) if not number.isdigit() or number[-2:] != '01': raise InvalidFormat() - if len(number) != 12: - raise InvalidLength() - luhn.validate(number[:-2]) + orgnr.validate(number[:-2]) return number From 583b066bea38ef0f15ffd17d265d35e4311faac2 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 27 Apr 2015 13:36:50 +0200 Subject: [PATCH 041/654] Update database files This also updates the script to download updated Chinese location names. --- getcnloc.py | 19 +- stdnum/cn/loc.dat | 98 +++-- stdnum/iban.dat | 4 +- stdnum/imsi.dat | 1000 +++++++++++++++++++++++++-------------------- stdnum/isbn.dat | 30 +- stdnum/isil.dat | 5 +- 6 files changed, 648 insertions(+), 508 deletions(-) diff --git a/getcnloc.py b/getcnloc.py index 9126be73..c54d68b2 100755 --- a/getcnloc.py +++ b/getcnloc.py @@ -3,6 +3,7 @@ # getcnloc.py - script to fetch data from the China (PRC) government site # # Copyright (C) 2014 Jiangge Zhang +# Copyright (C) 2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -43,11 +44,13 @@ def make_etree(response, encoding='utf-8'): return lxml.html.fromstring(response.text) -def iter_revisions(): - html = make_etree(requests.get(revisions_url)) +def get_revisions(url): + """Return the links to versions of the published administrative division + codes.""" + html = make_etree(requests.get(url)) anchors = html.xpath('.//div[@class="center_list"]/ul/li/a') for anchor in anchors: - url = urljoin(revisions_url, anchor.attrib['href']) + url = urljoin(url, anchor.attrib['href']) date_text = anchor.findtext('.//span/*[@class="cont_tit02"]') date = datetime.strptime(date_text, '%Y-%m-%d').date() yield url, date @@ -55,8 +58,9 @@ def iter_revisions(): def iter_records(url): html = make_etree(requests.get(url)) - lines = html.xpath('.//div[@class="xilan_con"]//p/text()') + lines = html.xpath('.//div[@class="xilan_con"]//p') for line in lines: + line = ' '.join(line.xpath('.//text()')) try: city_code, city_name = line.strip().split() except ValueError: @@ -66,8 +70,7 @@ def iter_records(url): yield city_code.strip(), city_name.strip() -def group_records(): - url, _ = max(iter_revisions(), key=itemgetter(1)) # latest revision +def group_records(url): provinces = {} prefectures = {} @@ -96,7 +99,9 @@ def print_data_file(file): print("# generated from National Bureau of Statistics of the People's", file=file) print('# Republic of China, downloaded from %s' % revisions_url, file=file) - for city_code, city_data in group_records(): + url, dt = max(get_revisions(revisions_url), key=itemgetter(1)) + print('# %s (revision %s)' % (url, dt), file=file) + for city_code, city_data in group_records(url): if not all(city_data.values()): continue city_pairs = ' '.join( diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat index b394fde6..fbf373fa 100644 --- a/stdnum/cn/loc.dat +++ b/stdnum/cn/loc.dat @@ -1,5 +1,6 @@ # generated from National Bureau of Statistics of the People's # Republic of China, downloaded from http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/ +# http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html (revision 2015-04-15) 110101 county="东城区" prefecture="市辖区" province="北京市" 110102 county="西城区" prefecture="市辖区" province="北京市" 110105 county="朝阳区" prefecture="市辖区" province="北京市" @@ -34,14 +35,15 @@ 120225 county="蓟县" prefecture="县" province="天津市" 130101 county="市辖区" prefecture="石家庄市" province="河北省" 130102 county="长安区" prefecture="石家庄市" province="河北省" -130103 county="桥东区" prefecture="石家庄市" province="河北省" 130104 county="桥西区" prefecture="石家庄市" province="河北省" 130105 county="新华区" prefecture="石家庄市" province="河北省" 130107 county="井陉矿区" prefecture="石家庄市" province="河北省" 130108 county="裕华区" prefecture="石家庄市" province="河北省" +130109 county="藁城区" prefecture="石家庄市" province="河北省" +130110 county="鹿泉区" prefecture="石家庄市" province="河北省" +130111 county="栾城区" prefecture="石家庄市" province="河北省" 130121 county="井陉县" prefecture="石家庄市" province="河北省" 130123 county="正定县" prefecture="石家庄市" province="河北省" -130124 county="栾城县" prefecture="石家庄市" province="河北省" 130125 county="行唐县" prefecture="石家庄市" province="河北省" 130126 county="灵寿县" prefecture="石家庄市" province="河北省" 130127 county="高邑县" prefecture="石家庄市" province="河北省" @@ -51,11 +53,8 @@ 130131 county="平山县" prefecture="石家庄市" province="河北省" 130132 county="元氏县" prefecture="石家庄市" province="河北省" 130133 county="赵县" prefecture="石家庄市" province="河北省" -130181 county="辛集市" prefecture="石家庄市" province="河北省" -130182 county="藁城市" prefecture="石家庄市" province="河北省" 130183 county="晋州市" prefecture="石家庄市" province="河北省" 130184 county="新乐市" prefecture="石家庄市" province="河北省" -130185 county="鹿泉市" prefecture="石家庄市" province="河北省" 130201 county="市辖区" prefecture="唐山市" province="河北省" 130202 county="路南区" prefecture="唐山市" province="河北省" 130203 county="路北区" prefecture="唐山市" province="河北省" @@ -142,7 +141,6 @@ 130637 county="博野县" prefecture="保定市" province="河北省" 130638 county="雄县" prefecture="保定市" province="河北省" 130681 county="涿州市" prefecture="保定市" province="河北省" -130682 county="定州市" prefecture="保定市" province="河北省" 130683 county="安国市" prefecture="保定市" province="河北省" 130684 county="高碑店市" prefecture="保定市" province="河北省" 130701 county="市辖区" prefecture="张家口市" province="河北省" @@ -215,6 +213,8 @@ 131128 county="阜城县" prefecture="衡水市" province="河北省" 131181 county="冀州市" prefecture="衡水市" province="河北省" 131182 county="深州市" prefecture="衡水市" province="河北省" +139001 county="定州市" prefecture="省直辖县级行政区划" province="河北省" +139002 county="辛集市" prefecture="省直辖县级行政区划" province="河北省" 140101 county="市辖区" prefecture="太原市" province="山西省" 140105 county="小店区" prefecture="太原市" province="山西省" 140106 county="迎泽区" prefecture="太原市" province="山西省" @@ -463,7 +463,7 @@ 210105 county="皇姑区" prefecture="沈阳市" province="辽宁省" 210106 county="铁西区" prefecture="沈阳市" province="辽宁省" 210111 county="苏家屯区" prefecture="沈阳市" province="辽宁省" -210112 county="东陵区" prefecture="沈阳市" province="辽宁省" +210112 county="浑南区" prefecture="沈阳市" province="辽宁省" 210113 county="沈北新区" prefecture="沈阳市" province="辽宁省" 210114 county="于洪区" prefecture="沈阳市" province="辽宁省" 210122 county="辽中县" prefecture="沈阳市" province="辽宁省" @@ -577,8 +577,8 @@ 220105 county="二道区" prefecture="长春市" province="吉林省" 220106 county="绿园区" prefecture="长春市" province="吉林省" 220112 county="双阳区" prefecture="长春市" province="吉林省" +220113 county="九台区" prefecture="长春市" province="吉林省" 220122 county="农安县" prefecture="长春市" province="吉林省" -220181 county="九台市" prefecture="长春市" province="吉林省" 220182 county="榆树市" prefecture="长春市" province="吉林省" 220183 county="德惠市" prefecture="长春市" province="吉林省" 220201 county="市辖区" prefecture="吉林市" province="吉林省" @@ -856,9 +856,8 @@ 320684 county="海门市" prefecture="南通市" province="江苏省" 320701 county="市辖区" prefecture="连云港市" province="江苏省" 320703 county="连云区" prefecture="连云港市" province="江苏省" -320705 county="新浦区" prefecture="连云港市" province="江苏省" 320706 county="海州区" prefecture="连云港市" province="江苏省" -320721 county="赣榆县" prefecture="连云港市" province="江苏省" +320707 county="赣榆区" prefecture="连云港市" province="江苏省" 320722 county="东海县" prefecture="连云港市" province="江苏省" 320723 county="灌云县" prefecture="连云港市" province="江苏省" 320724 county="灌南县" prefecture="连云港市" province="江苏省" @@ -962,10 +961,10 @@ 330523 county="安吉县" prefecture="湖州市" province="浙江省" 330601 county="市辖区" prefecture="绍兴市" province="浙江省" 330602 county="越城区" prefecture="绍兴市" province="浙江省" -330621 county="绍兴县" prefecture="绍兴市" province="浙江省" +330603 county="柯桥区" prefecture="绍兴市" province="浙江省" +330604 county="上虞区" prefecture="绍兴市" province="浙江省" 330624 county="新昌县" prefecture="绍兴市" province="浙江省" 330681 county="诸暨市" prefecture="绍兴市" province="浙江省" -330682 county="上虞市" prefecture="绍兴市" province="浙江省" 330683 county="嵊州市" prefecture="绍兴市" province="浙江省" 330701 county="市辖区" prefecture="金华市" province="浙江省" 330702 county="婺城区" prefecture="金华市" province="浙江省" @@ -1268,6 +1267,7 @@ 360681 county="贵溪市" prefecture="鹰潭市" province="江西省" 360701 county="市辖区" prefecture="赣州市" province="江西省" 360702 county="章贡区" prefecture="赣州市" province="江西省" +360703 county="南康区" prefecture="赣州市" province="江西省" 360721 county="赣县" prefecture="赣州市" province="江西省" 360722 county="信丰县" prefecture="赣州市" province="江西省" 360723 county="大余县" prefecture="赣州市" province="江西省" @@ -1284,7 +1284,6 @@ 360734 county="寻乌县" prefecture="赣州市" province="江西省" 360735 county="石城县" prefecture="赣州市" province="江西省" 360781 county="瑞金市" prefecture="赣州市" province="江西省" -360782 county="南康市" prefecture="赣州市" province="江西省" 360801 county="市辖区" prefecture="吉安市" province="江西省" 360802 county="吉州区" prefecture="吉安市" province="江西省" 360803 county="青原区" prefecture="吉安市" province="江西省" @@ -1406,8 +1405,8 @@ 370785 county="高密市" prefecture="潍坊市" province="山东省" 370786 county="昌邑市" prefecture="潍坊市" province="山东省" 370801 county="市辖区" prefecture="济宁市" province="山东省" -370802 county="市中区" prefecture="济宁市" province="山东省" 370811 county="任城区" prefecture="济宁市" province="山东省" +370812 county="兖州区" prefecture="济宁市" province="山东省" 370826 county="微山县" prefecture="济宁市" province="山东省" 370827 county="鱼台县" prefecture="济宁市" province="山东省" 370828 county="金乡县" prefecture="济宁市" province="山东省" @@ -1416,7 +1415,6 @@ 370831 county="泗水县" prefecture="济宁市" province="山东省" 370832 county="梁山县" prefecture="济宁市" province="山东省" 370881 county="曲阜市" prefecture="济宁市" province="山东省" -370882 county="兖州市" prefecture="济宁市" province="山东省" 370883 county="邹城市" prefecture="济宁市" province="山东省" 370901 county="市辖区" prefecture="泰安市" province="山东省" 370902 county="泰山区" prefecture="泰安市" province="山东省" @@ -1427,7 +1425,7 @@ 370983 county="肥城市" prefecture="泰安市" province="山东省" 371001 county="市辖区" prefecture="威海市" province="山东省" 371002 county="环翠区" prefecture="威海市" province="山东省" -371081 county="文登市" prefecture="威海市" province="山东省" +371003 county="文登区" prefecture="威海市" province="山东省" 371082 county="荣成市" prefecture="威海市" province="山东省" 371083 county="乳山市" prefecture="威海市" province="山东省" 371101 county="市辖区" prefecture="日照市" province="山东省" @@ -1445,7 +1443,7 @@ 371321 county="沂南县" prefecture="临沂市" province="山东省" 371322 county="郯城县" prefecture="临沂市" province="山东省" 371323 county="沂水县" prefecture="临沂市" province="山东省" -371324 county="苍山县" prefecture="临沂市" province="山东省" +371324 county="兰陵县" prefecture="临沂市" province="山东省" 371325 county="费县" prefecture="临沂市" province="山东省" 371326 county="平邑县" prefecture="临沂市" province="山东省" 371327 county="莒南县" prefecture="临沂市" province="山东省" @@ -1453,7 +1451,7 @@ 371329 county="临沭县" prefecture="临沂市" province="山东省" 371401 county="市辖区" prefecture="德州市" province="山东省" 371402 county="德城区" prefecture="德州市" province="山东省" -371421 county="陵县" prefecture="德州市" province="山东省" +371403 county="陵城区" prefecture="德州市" province="山东省" 371422 county="宁津县" prefecture="德州市" province="山东省" 371423 county="庆云县" prefecture="德州市" province="山东省" 371424 county="临邑县" prefecture="德州市" province="山东省" @@ -1474,10 +1472,10 @@ 371581 county="临清市" prefecture="聊城市" province="山东省" 371601 county="市辖区" prefecture="滨州市" province="山东省" 371602 county="滨城区" prefecture="滨州市" province="山东省" +371603 county="沾化区" prefecture="滨州市" province="山东省" 371621 county="惠民县" prefecture="滨州市" province="山东省" 371622 county="阳信县" prefecture="滨州市" province="山东省" 371623 county="无棣县" prefecture="滨州市" province="山东省" -371624 county="沾化县" prefecture="滨州市" province="山东省" 371625 county="博兴县" prefecture="滨州市" province="山东省" 371626 county="邹平县" prefecture="滨州市" province="山东省" 371701 county="市辖区" prefecture="菏泽市" province="山东省" @@ -1690,7 +1688,7 @@ 420301 county="市辖区" prefecture="十堰市" province="湖北省" 420302 county="茅箭区" prefecture="十堰市" province="湖北省" 420303 county="张湾区" prefecture="十堰市" province="湖北省" -420321 county="郧县" prefecture="十堰市" province="湖北省" +420304 county="郧阳区" prefecture="十堰市" province="湖北省" 420322 county="郧西县" prefecture="十堰市" province="湖北省" 420323 county="竹山县" prefecture="十堰市" province="湖北省" 420324 county="竹溪县" prefecture="十堰市" province="湖北省" @@ -1927,8 +1925,8 @@ 440114 county="花都区" prefecture="广州市" province="广东省" 440115 county="南沙区" prefecture="广州市" province="广东省" 440116 county="萝岗区" prefecture="广州市" province="广东省" -440183 county="增城市" prefecture="广州市" province="广东省" -440184 county="从化市" prefecture="广州市" province="广东省" +440117 county="从化区" prefecture="广州市" province="广东省" +440118 county="增城区" prefecture="广州市" province="广东省" 440201 county="市辖区" prefecture="韶关市" province="广东省" 440203 county="武江区" prefecture="韶关市" province="广东省" 440204 county="浈江区" prefecture="韶关市" province="广东省" @@ -1985,8 +1983,7 @@ 440883 county="吴川市" prefecture="湛江市" province="广东省" 440901 county="市辖区" prefecture="茂名市" province="广东省" 440902 county="茂南区" prefecture="茂名市" province="广东省" -440903 county="茂港区" prefecture="茂名市" province="广东省" -440923 county="电白县" prefecture="茂名市" province="广东省" +440904 county="电白区" prefecture="茂名市" province="广东省" 440981 county="高州市" prefecture="茂名市" province="广东省" 440982 county="化州市" prefecture="茂名市" province="广东省" 440983 county="信宜市" prefecture="茂名市" province="广东省" @@ -2007,7 +2004,7 @@ 441324 county="龙门县" prefecture="惠州市" province="广东省" 441401 county="市辖区" prefecture="梅州市" province="广东省" 441402 county="梅江区" prefecture="梅州市" province="广东省" -441421 county="梅县" prefecture="梅州市" province="广东省" +441403 county="梅县区" prefecture="梅州市" province="广东省" 441422 county="大埔县" prefecture="梅州市" province="广东省" 441423 county="丰顺县" prefecture="梅州市" province="广东省" 441424 county="五华县" prefecture="梅州市" province="广东省" @@ -2052,9 +2049,9 @@ 445281 county="普宁市" prefecture="揭阳市" province="广东省" 445301 county="市辖区" prefecture="云浮市" province="广东省" 445302 county="云城区" prefecture="云浮市" province="广东省" +445303 county="云安区" prefecture="云浮市" province="广东省" 445321 county="新兴县" prefecture="云浮市" province="广东省" 445322 county="郁南县" prefecture="云浮市" province="广东省" -445323 county="云安县" prefecture="云浮市" province="广东省" 445381 county="罗定市" prefecture="云浮市" province="广东省" 450101 county="市辖区" prefecture="南宁市" province="广西壮族自治区" 450102 county="兴宁区" prefecture="南宁市" province="广西壮族自治区" @@ -2186,9 +2183,10 @@ 460107 county="琼山区" prefecture="海口市" province="海南省" 460108 county="美兰区" prefecture="海口市" province="海南省" 460201 county="市辖区" prefecture="三亚市" province="海南省" -460321 county="西沙群岛" prefecture="三沙市" province="海南省" -460322 county="南沙群岛" prefecture="三沙市" province="海南省" -460323 county="中沙群岛的岛礁及其海域" prefecture="三沙市" province="海南省" +460202 county="海棠区" prefecture="三亚市" province="海南省" +460203 county="吉阳区" prefecture="三亚市" province="海南省" +460204 county="天涯区" prefecture="三亚市" province="海南省" +460205 county="崖州区" prefecture="三亚市" province="海南省" 469001 county="五指山市" prefecture="省直辖县级行政区划" province="海南省" 469002 county="琼海市" prefecture="省直辖县级行政区划" province="海南省" 469003 county="儋州市" prefecture="省直辖县级行政区划" province="海南省" @@ -2224,10 +2222,10 @@ 500117 county="合川区" prefecture="市辖区" province="重庆市" 500118 county="永川区" prefecture="市辖区" province="重庆市" 500119 county="南川区" prefecture="市辖区" province="重庆市" +500120 county="璧山区" prefecture="市辖区" province="重庆市" +500151 county="铜梁区" prefecture="市辖区" province="重庆市" 500223 county="潼南县" prefecture="县" province="重庆市" -500224 county="铜梁县" prefecture="县" province="重庆市" 500226 county="荣昌县" prefecture="县" province="重庆市" -500227 county="璧山县" prefecture="县" province="重庆市" 500228 county="梁平县" prefecture="县" province="重庆市" 500229 county="城口县" prefecture="县" province="重庆市" 500230 county="丰都县" prefecture="县" province="重庆市" @@ -2303,7 +2301,7 @@ 510781 county="江油市" prefecture="绵阳市" province="四川省" 510801 county="市辖区" prefecture="广元市" province="四川省" 510802 county="利州区" prefecture="广元市" province="四川省" -510811 county="元坝区" prefecture="广元市" province="四川省" +510811 county="昭化区" prefecture="广元市" province="四川省" 510812 county="朝天区" prefecture="广元市" province="四川省" 510821 county="旺苍县" prefecture="广元市" province="四川省" 510822 county="青川县" prefecture="广元市" province="四川省" @@ -2683,6 +2681,24 @@ 540125 county="堆龙德庆县" prefecture="拉萨市" province="西藏自治区" 540126 county="达孜县" prefecture="拉萨市" province="西藏自治区" 540127 county="墨竹工卡县" prefecture="拉萨市" province="西藏自治区" +540202 county="桑珠孜区" prefecture="日喀则市" province="西藏自治区" +540221 county="南木林县" prefecture="日喀则市" province="西藏自治区" +540222 county="江孜县" prefecture="日喀则市" province="西藏自治区" +540223 county="定日县" prefecture="日喀则市" province="西藏自治区" +540224 county="萨迦县" prefecture="日喀则市" province="西藏自治区" +540225 county="拉孜县" prefecture="日喀则市" province="西藏自治区" +540226 county="昂仁县" prefecture="日喀则市" province="西藏自治区" +540227 county="谢通门县" prefecture="日喀则市" province="西藏自治区" +540228 county="白朗县" prefecture="日喀则市" province="西藏自治区" +540229 county="仁布县" prefecture="日喀则市" province="西藏自治区" +540230 county="康马县" prefecture="日喀则市" province="西藏自治区" +540231 county="定结县" prefecture="日喀则市" province="西藏自治区" +540232 county="仲巴县" prefecture="日喀则市" province="西藏自治区" +540233 county="亚东县" prefecture="日喀则市" province="西藏自治区" +540234 county="吉隆县" prefecture="日喀则市" province="西藏自治区" +540235 county="聂拉木县" prefecture="日喀则市" province="西藏自治区" +540236 county="萨嘎县" prefecture="日喀则市" province="西藏自治区" +540237 county="岗巴县" prefecture="日喀则市" province="西藏自治区" 542121 county="昌都县" prefecture="昌都地区" province="西藏自治区" 542122 county="江达县" prefecture="昌都地区" province="西藏自治区" 542123 county="贡觉县" prefecture="昌都地区" province="西藏自治区" @@ -2706,24 +2722,6 @@ 542231 county="隆子县" prefecture="山南地区" province="西藏自治区" 542232 county="错那县" prefecture="山南地区" province="西藏自治区" 542233 county="浪卡子县" prefecture="山南地区" province="西藏自治区" -542301 county="日喀则市" prefecture="日喀则地区" province="西藏自治区" -542322 county="南木林县" prefecture="日喀则地区" province="西藏自治区" -542323 county="江孜县" prefecture="日喀则地区" province="西藏自治区" -542324 county="定日县" prefecture="日喀则地区" province="西藏自治区" -542325 county="萨迦县" prefecture="日喀则地区" province="西藏自治区" -542326 county="拉孜县" prefecture="日喀则地区" province="西藏自治区" -542327 county="昂仁县" prefecture="日喀则地区" province="西藏自治区" -542328 county="谢通门县" prefecture="日喀则地区" province="西藏自治区" -542329 county="白朗县" prefecture="日喀则地区" province="西藏自治区" -542330 county="仁布县" prefecture="日喀则地区" province="西藏自治区" -542331 county="康马县" prefecture="日喀则地区" province="西藏自治区" -542332 county="定结县" prefecture="日喀则地区" province="西藏自治区" -542333 county="仲巴县" prefecture="日喀则地区" province="西藏自治区" -542334 county="亚东县" prefecture="日喀则地区" province="西藏自治区" -542335 county="吉隆县" prefecture="日喀则地区" province="西藏自治区" -542336 county="聂拉木县" prefecture="日喀则地区" province="西藏自治区" -542337 county="萨嘎县" prefecture="日喀则地区" province="西藏自治区" -542338 county="岗巴县" prefecture="日喀则地区" province="西藏自治区" 542421 county="那曲县" prefecture="那曲地区" province="西藏自治区" 542422 county="嘉黎县" prefecture="那曲地区" province="西藏自治区" 542423 county="比如县" prefecture="那曲地区" province="西藏自治区" diff --git a/stdnum/iban.dat b/stdnum/iban.dat index 692531a2..95ba5c43 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -31,9 +31,9 @@ IE country="Ireland" bban="4!a6!n8!n" IL country="Israel" bban="3!n3!n13!n" IT country="Italy" bban="1!a5!n5!n12!c" JO country="Jordan" bban="4!a4!n18!c" +KZ country="Kazakhstan" bban="3!n13!c" XK country="Republic of Kosovo" bban="4!n10!n2!n" KW country="Kuwait" bban="4!a22!c" -KZ country="Kazakhstan" bban="3!n13!c" LV country="Latvia" bban="4!a13!c" LB country="Lebanon" bban="4!n20!c" LI country="Liechtenstein (Principality of)" bban="5!n12!c" @@ -64,7 +64,7 @@ SE country="Sweden" bban="3!n16!n1!n" CH country="Switzerland" bban="5!n12!c" TL country="Timor-Leste" bban="3!n 14!n 2!n" TN country="Tunisia" bban="2!n3!n13!n2!n" -TR country="Turkey" bban="5!n1!c16!c" +TR country="Turkey" bban="5!n1!n16!c" AE country="United Arab Emirates" bban="3!n16!n" GB country="United Kingdom" bban="4!a6!n8!n" VG country="Virgin Islands, British" bban="4!a16!n" diff --git a/stdnum/imsi.dat b/stdnum/imsi.dat index 1214f1cb..0f396f5f 100644 --- a/stdnum/imsi.dat +++ b/stdnum/imsi.dat @@ -4,23 +4,23 @@ 01 bands="GSM 900 / GSM 1800" brand="TEST" country="Test networks" operator="Test Network" status="Operational" 00-99 202 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" 03 bands="" cc="gr" country="Greece" operator="OTE" status="" 04 bands="" cc="gr" country="Greece" operator="EDISY" status="" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="gr" country="Greece" operator="Vodafone Greece" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="gr" country="Greece" operator="Vodafone Greece" status="Operational" 06 bands="" cc="gr" country="Greece" operator="Cosmoline" status="" 07 bands="" cc="gr" country="Greece" operator="AMD Telecom" status="" - 09 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" + 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" 00-99 204 01 bands="" cc="nl" country="Netherlands" operator="RadioAccess Network Services BV" status="" - 02 bands="LTE 2600" brand="Tele2" cc="nl" country="Netherlands" operator="Tele2 Nederland B.V." status="Operational" + 02 bands="LTE 800 / LTE 2600" brand="Tele2" cc="nl" country="Netherlands" operator="Tele2 Nederland B.V." status="Operational" 03 bands="MVNE / PrivateGSM 1800" brand="Voiceworks" cc="nl" country="Netherlands" operator="Voiceworks B.V." status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="nl" country="Netherlands" operator="Vodafone Libertel B.V." status="Operational" 05 bands="" cc="nl" country="Netherlands" operator="Elephant Talk Communications Premium Rate Services" status="" - 06 bands="MVNO" brand="Vectone Mobile Delight Mobile" cc="nl" country="Netherlands" operator="Mundio Mobile (Netherlands) Ltd" status="Operational" + 06 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="nl" country="Netherlands" operator="Mundio Mobile (Netherlands) Ltd" status="Operational" 07 bands="MVNE" cc="nl" country="Netherlands" operator="Teleena (MVNE)" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="KPN" cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="Operational" 09 bands="MVNO" brand="Lycamobile" cc="nl" country="Netherlands" operator="Lycamobile Netherlands Limited" status="Operational" @@ -32,7 +32,7 @@ 15 bands="LTE 2600" brand="Ziggo" cc="nl" country="Netherlands" operator="Ziggo B.V." status="Operational" 16 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile (BEN)" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 17 bands="MVNE" brand="Intercity Zakelijk" cc="nl" country="Netherlands" operator="Intercity Mobile Communications B.V." status="Operational" - 18 bands="" cc="nl" country="Netherlands" operator="UPC Nederland B.V." status="" + 18 bands="MVNO" cc="nl" country="Netherlands" operator="UPC Nederland B.V." status="Operational" 19 bands="" cc="nl" country="Netherlands" operator="Mixe Communication Solutions B.V." status="" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 21 bands="GSM-R 900" cc="nl" country="Netherlands" operator="ProRail B.V." status="Operational" @@ -61,62 +61,70 @@ 06 bands="MVNO" brand="Lycamobile" cc="be" country="Belgium" operator="Lycamobile sprl" status="Operational" 07 bands="MVNO" brand="Vectone Mobile" cc="be" country="Belgium" operator="Mundio Mobile Belgium nv" status="Reserved" 09 bands="MVNO" brand="Voxbone" cc="be" country="Belgium" operator="Voxbone mobile" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="Mobistar" cc="be" country="Belgium" operator="Orange S.A." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Mobistar" cc="be" country="Belgium" operator="Orange S.A." status="Operational" 15 bands="" cc="be" country="Belgium" operator="Elephant Talk Communications Schweiz GmbH" status="Not operational" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="BASE" cc="be" country="Belgium" operator="KPN Group Belgium" status="Operational" + 40 bands="MVNO" cc="be" country="Belgium" operator="JOIN Experience (Belgium)" status="Operational" 00-99 208 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE" brand="Orange" cc="fr" country="France" operator="Orange S.A." status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Orange" cc="fr" country="France" operator="Orange S.A." status="Operational" - 03 bands="UMTS" brand="MobiquiThings" cc="fr" country="France" status="Operational" - 04 bands="UMTS" brand="Sisteer" cc="fr" country="France" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Orange" cc="fr" country="France" operator="Orange S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="fr" country="France" operator="Orange S.A." status="Operational" + 03 bands="MVNO" brand="MobiquiThings" cc="fr" country="France" operator="MobiquiThings" status="Operational" + 04 bands="MVNO" brand="Sisteer" cc="fr" country="France" operator="Societe d'ingenierie systeme telecom et reseaux" status="Operational" 05 bands="Satellite" cc="fr" country="France" operator="Globalstar Europe" status="Operational" 06 bands="Satellite" cc="fr" country="France" operator="Globalstar Europe" status="Operational" 07 bands="Satellite" cc="fr" country="France" operator="Globalstar Europe" status="Operational" - 08 brand="Completel Mobile" cc="fr" country="France" - 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" + 08 bands="MVNO" brand="Completel Mobile" cc="fr" country="France" operator="Completel" status="Operational" + 09 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" 11 bands="UMTS 2100" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" - 13 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" + 12 bands="" cc="fr" country="France" operator="Hewlett-Packard France" status="" + 13 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" 14 bands="GSM-R" brand="RFF" cc="fr" country="France" operator="RFF" status="Operational" - 15 bands="UMTS 2100 / UMTS 900" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" - 16 bands="UMTS 2100 / UMTS 900" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" + 15 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" + 16 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" 17 bands="" brand="LEGOS" cc="fr" country="France" operator="Local Exchange Global Operation Services" status="" 18 bands="MVNO" brand="Voxbone" cc="fr" country="France" operator="Voxbone mobile" status="Operational" - 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE 1800 / LTE 2600" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" 21 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="" 22 bands="" brand="Transatel Mobile" cc="fr" country="France" operator="Transatel" status="" - 23 bands="GSM / UMTS" brand="Virgin Mobile (MVNO)" cc="fr" country="France" operator="Omea Telecom" status="Operational" - 24 bands="UMTS" brand="MobiquiThings" cc="fr" country="France" status="Operational" - 25 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="LycaMobile" cc="fr" country="France" operator="LycaMobile" status="Operational" - 26 bands="GSM / UMTS" brand="NRJ Mobile (MVNO)" cc="fr" country="France" operator="NRJ Mobile" status="Operational" + 23 bands="MVNO" cc="fr" country="France" operator="Omea Telecom" status="Operational" + 24 bands="MVNO" brand="MobiquiThings" cc="fr" country="France" operator="MobiquiThings" status="Operational" + 25 bands="MVNO" brand="LycaMobile" cc="fr" country="France" operator="LycaMobile" status="Operational" + 26 bands="MVNO" brand="NRJ Mobile" cc="fr" country="France" operator="Euro-Information Telecom SAS" status="Operational" 27 bands="" cc="fr" country="France" operator="Afone" status="" - 28 bands="" cc="fr" country="France" operator="Astrium SAS" status="" - 29 bands="" cc="fr" country="France" operator="Société International Mobile Communication" status="" + 28 bands="" cc="fr" country="France" operator="Airbus Defence and Space SAS" status="" + 29 bands="" cc="fr" country="France" operator="Société International Mobile Communication" status="Not operational" 30 bands="" cc="fr" country="France" operator="Symacom" status="" - 31 bands="MVNO" brand="Vectone" cc="fr" country="France" operator="Mundio Mobile" status="Operational" + 31 bands="MVNO" brand="Vectone Mobile" cc="fr" country="France" operator="Mundio Mobile" status="Operational" 88 bands="GSM 900 / GSM 1800" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" - 89 bands="" cc="fr" country="France" operator="Omer Telecom Ltd" status="" + 89 bands="" cc="fr" country="France" operator="Omer Telecom Ltd" status="Not operational" 90 bands="" cc="fr" country="France" operator="Images & Réseaux" status="" 91 bands="" cc="fr" country="France" operator="Orange S.A." status="" - 92 bands="LTE 2600" brand="Com4Innov" cc="fr" country="France" operator="Association Plate-forme Télécom" status="Operational" + 92 bands="LTE-TDD 2300 / LTE 2600" brand="Com4Innov" cc="fr" country="France" operator="Association Plate-forme Télécom" status="Operational" 93 bands="" cc="fr" country="France" operator="TDF" status="" + 94 bands="" cc="fr" country="France" operator="Halys" status="" 00-99 212 - 01 bands="GSM 900 / UMTS 2100 / LTE 2600" brand="Office des Telephones" cc="mc" country="Monaco" operator="Monaco Telecom" status="Operational" + 01 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="Office des Telephones" cc="mc" country="Monaco" operator="Monaco Telecom" status="Operational" 00-99 213 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" 00-99 214 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" - 04 bands="GSM 1800 / UMTS 2100" brand="Yoigo" cc="es" country="Spain" operator="Xfera Moviles SA" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" + 04 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Yoigo" cc="es" country="Spain" operator="Xfera Moviles SA" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TME" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" 08 bands="MVNO" brand="Euskaltel" cc="es" country="Spain" status="Operational" 09 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" + 10 bands="" cc="es" country="Spain" operator="Operadora de Telecomunicaciones Opera SL" status="" + 11 bands="" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="" + 12 bands="" cc="es" country="Spain" operator="Contacta Servicios Avanzados de Telecomunicaciones SL" status="" + 13 bands="" cc="es" country="Spain" operator="Incotel Ingeniera y Consultaria SL" status="" + 14 bands="" cc="es" country="Spain" operator="Incotel Servicioz Avanzados SL" status="" 15 bands="MVNO" brand="BT" cc="es" country="Spain" operator="BT Group España Compañia de Servicios Globales de Telecomunicaciones S.A.U." status="Operational" 16 bands="MVNO" brand="TeleCable" cc="es" country="Spain" operator="Telecable de Asturias S.A.U." status="Operational" 17 bands="MVNO" brand="Móbil R" cc="es" country="Spain" operator="R Cable y Telecomunicaciones Galicia S.A." status="Operational" @@ -128,18 +136,21 @@ 23 bands="MVNO" brand="Barablu" cc="es" country="Spain" operator="Barablu Móvil España" 24 bands="MVNO" brand="Eroski" cc="es" country="Spain" operator="Eroski Móvil España" status="Operational" 25 bands="MVNO" brand="Lycamobile" cc="es" country="Spain" operator="LycaMobile S.L." status="Operational" - 28 bands="" cc="es" country="Spain" operator="Consorcio de Telecomunicaciones Avanzadas, S.A." status="" - 29 bands="" cc="es" country="Spain" operator="NEO-SKY 2002, S.A." status="" + 26 bands="" cc="es" country="Spain" operator="Lleida Networks Serveis Telemátics, SL" status="" + 27 bands="MVNO" brand="Truphone" cc="es" country="Spain" operator="SCN Truphone, S.L." status="Operational" + 28 bands="LTE-TDD 2600" brand="Murcia4G" cc="es" country="Spain" operator="Consorcio de Telecomunicaciones Avanzadas, S.A." status="Operational" + 29 bands="LTE-TDD 3500" cc="es" country="Spain" operator="NEO-SKY 2002, S.A." status="Operational" 30 bands="" cc="es" country="Spain" operator="Compatel Limited" status="" 31 bands="" cc="es" country="Spain" operator="Red Digital De Telecomunicaciones de las Islas Baleares, S.L." status="" 32 bands="MVNO" brand="Tuenti" cc="es" country="Spain" operator="Tuenti Technologies S.L." status="Operational" + 51 bands="GSM-R" brand="ADIF" cc="es" country="Spain" operator="Administrador de Infraestructuras Ferroviarias" status="Operational" 00-99 216 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" - 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" - 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" + 02 bands="" cc="hu" country="Hungary" operator="MVM Net Ltd." status="" + 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" 70 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" - 71 bands="" brand="UPC Hungary" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" + 71 bands="MVNO" brand="UPC Hungary" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" 99 bands="GSM-R 900" brand="MAV GSM-R" cc="hu" country="Hungary" operator="Magyar Államvasutak" status="Planned" 00-99 218 @@ -149,62 +160,68 @@ 00-99 219 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="hr" country="Croatia" operator="T-Mobile Croatia" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tele2" cc="hr" country="Croatia" operator="Tele2" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Tele2" cc="hr" country="Croatia" operator="Tele2" status="Operational" 10 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vip" cc="hr" country="Croatia" operator="Vipnet" status="Operational" + 12 bands="MVNO" cc="hr" country="Croatia" operator="TELE FOCUS d.o.o." status="" 00-99 220 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Serbia" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Montenegro" status="Not operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="mt:s" cc="rs" country="Serbia" operator="Telekom Srbija" status="Operational" + 04 bands="GSM" brand="T-Mobile" cc="rs" country="Serbia" operator="T-Mobile Montenegro LLC" status="Not operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="VIP" cc="rs" country="Serbia" operator="VIP Mobile" status="Operational" + 07 bands="CDMA 450" cc="rs" country="Serbia" operator="Orion Telekom" status="Operational" 00-99 222 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="Operational" 02 bands="Satellite (Globalstar)" brand="Elsacom" cc="it" country="Italy" status="Not operational" 04 bands="" brand="Intermatica" cc="it" country="Italy" status="" 05 bands="" brand="Telespazio" cc="it" country="Italy" status="" 07 bands="MVNO" brand="Noverca" cc="it" country="Italy" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel N.V." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel N.V." status="Operational" 30 bands="GSM-R 900" brand="RFI" cc="it" country="Italy" operator="Rete Ferroviaria Italiana" status="Operational" + 33 bands="" cc="it" country="Italy" operator="Hi3G" status="Operational" 34 bands="MVNO" brand="BT Italia" cc="it" country="Italy" operator="British Telecom Italia" status="Reserved" - 35 bands="MVNO" brand="Lyca Italy" cc="it" country="Italy" operator="Lyca Mobile" status="Reserved" + 35 bands="MVNO" brand="Lyca Italy" cc="it" country="Italy" operator="Lycamobile" status="Operational" 77 bands="UMTS 2100" brand="IPSE 2000" cc="it" country="Italy" status="Not operational" - 88 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni SpA" status="Operational" - 98 bands="GSM 1800" brand="Blu" cc="it" country="Italy" status="Not operational" - 99 bands="UMTS 2100" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni SpA" status="Operational" + 98 bands="GSM 900" brand="BLU s.p.a" cc="it" country="Italy" operator="BLU s.p.a" status="Not operational" + 99 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="Operational" 00-99 226 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / TD-LTE 2600" brand="Vodafone" cc="ro" country="Romania" operator="Vodafone România" status="Operational" - 02 bands="CDMA 420" brand="Clicknet Mobile" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" + 02 bands="CDMA 420" brand="Clicknet Mobile" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" 03 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 04 bands="CDMA 450" brand="Cosmote/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" 05 bands="UMTS 900 / UMTS 2100" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" 06 bands="UMTS 2100" brand="Telekom/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="ro" country="Romania" operator="Orange România" status="Operational" 11 bands="MVNO" cc="ro" country="Romania" operator="Enigma-System" status="" - 15 bands="TD-LTE 2600" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Planned" + 15 bands="TD-LTE 2600" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Operational" + 16 bands="MVNO" brand="Lycamobile" cc="ro" country="Romania" operator="Lycamobile Romania" status="Operational" 00-99 228 - 01 bands="GSM 900 / GSM / LTE 1800 / UMTS 2100" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="Operational" - 03 bands="GSM 1800 / UMTS 2100" brand="Orange" cc="ch" country="Switzerland" operator="Orange Communications SA" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="Operational" + 03 bands="GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="ch" country="Switzerland" operator="Orange Communications SA" status="Operational" 05 bands="" cc="ch" country="Switzerland" operator="Togewanet AG (Comfone)" status="Reserved" 06 bands="GSM-R 900" brand="SBB-CFF-FFS" cc="ch" country="Switzerland" operator="SBB AG" status="Operational" - 07 bands="GSM 1800" brand="IN&Phone" cc="ch" country="Switzerland" operator="IN&Phone SA" status="Operational" + 07 bands="GSM 1800" brand="IN&Phone" cc="ch" country="Switzerland" operator="IN&Phone SA" status="Not operational" 08 bands="GSM 1800" brand="Tele4u" cc="ch" country="Switzerland" operator="TelCommunication Services AG" status="Operational" - 09 bands="Roaming Hub" cc="ch" country="Switzerland" operator="Comfone" status="Inactive" + 09 bands="" cc="ch" country="Switzerland" operator="Comfone AG" status="" 12 cc="ch" country="Switzerland" operator="Sunrise" status="Inactive" - 50 bands="UMTS 2100" cc="ch" country="Switzerland" operator="3G Mobile AG" status="Reserved" + 50 bands="UMTS 2100" cc="ch" country="Switzerland" operator="3G Mobile AG" status="Not operational" 51 bands="MVNO" cc="ch" country="Switzerland" operator="BebbiCell AG" status="Operational" - 52 brand="Barablu" cc="ch" country="Switzerland" operator="Barablu" - 53 cc="ch" country="Switzerland" operator="UPC" status="Inactive" - 54 bands="MVNO" cc="ch" country="Switzerland" operator="Lyca Mobile" status="Operational" + 52 brand="Barablu" cc="ch" country="Switzerland" operator="Barablu" status="Not operational" + 53 bands="MVNO" cc="ch" country="Switzerland" operator="UPC Cablecom GmbH" status="Operational" + 54 bands="MVNO" cc="ch" country="Switzerland" operator="Lycamobile AG" status="Operational" + 56 bands="" cc="ch" country="Switzerland" operator="SMSRelay AG" status="" 99 cc="ch" country="Switzerland" operator="Swisscom" status="" 00-99 230 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="cy" country="Cyprus" operator="T-Mobile Czech Republic" status="Operational" - 02 bands="CDMA 450 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="cy" country="Cyprus" operator="Telefónica Czech Republic" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" + 02 bands="CDMA 450 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="cy" country="Cyprus" operator="O2 Czech Republic" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2100" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" 04 bands="CDMA2000 410 - 430" brand="U:fon" cc="cy" country="Cyprus" operator="Air Telecom a. s." status="Operational" 05 bands="" cc="cy" country="Cyprus" operator="TRAVEL TELEKOMMUNIKATION, s.r.o." status="" 06 bands="" cc="cy" country="Cyprus" operator="OSNO TELECOMUNICATION, s.r.o." status="" @@ -214,98 +231,104 @@ 99 bands="GSM 1800" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" 00-99 231 - 01 bands="GSM 900 / GSM 1800 / UMTS 900/2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" - 03 bands="" cc="sk" country="Slovakia" operator="Unient Communications" status="" - 04 bands="UMTS 2100" brand="T-Mobile" cc="sk" country="Slovakia" operator="T-Mobile Slovensko" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="sk" country="Slovakia" operator="Telefónica O2 Slovakia" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" + 03 bands="LTE 1800" brand="Swan" cc="sk" country="Slovakia" operator="Unient Communications" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="O2" cc="sk" country="Slovakia" operator="Telefónica O2 Slovakia" status="Operational" 99 bands="GSM-R" brand="ŽSR" cc="sk" country="Slovakia" operator="Železnice Slovenskej Republiky" status="Operational" 00-99 232 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="A1 TA" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" - 02 country="Austria - AT" operator="A1 Telekom Austria" status="reserved" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile AT" country="Austria - AT" operator="T-Mobile Austria" status="Operational" - 04 bands="" brand="T-Mobile AT" country="Austria - AT" operator="T-Mobile Austria Gmbh" status="" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange AT" country="Austria - AT" operator="Hutchison Drei Austria" status="Operational" - 06 bands="" brand="Orange AT" country="Austria - AT" operator="Orange Austria GmbH" status="" - 07 bands="MVNO" brand="tele.ring" country="Austria - AT" operator="T-Mobile Austria" status="Operational" - 08 country="Austria - AT" status="Not operational" - 09 bands="MVNO" brand="Tele2Mobil" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" - 10 bands="UMTS 2100 / LTE 2600" brand="3AT" country="Austria - AT" operator="Hutchison Drei Austria" status="Operational" - 11 bands="MVNO" brand="bob" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" - 12 bands="MVNO" brand="yesss!" country="Austria - AT" operator="A1 Telekom Austria" status="Operational" - 13 bands="" country="Austria - AT" status="Not operational" - 14 bands="" country="Austria - AT" operator="Hutchison Drei Austria" status="Reserved" - 15 bands="MVNO" brand="Vectone" country="Austria - AT" operator="Mundio Mobile Austria" status="Operational" - 16 country="Austria - AT" operator="Hutchison Drei Austria" status="Reserved" - 91 bands="GSM-R" brand="GSM-R A" country="Austria - AT" operator="ÖBB" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="A1.net" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" + 02 cc="at" country="Austria" operator="A1 Telekom Austria" status="reserved" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria" status="Operational" + 04 bands="" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria Gmbh" status="" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange AT" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" + 06 bands="" brand="Orange AT" cc="at" country="Austria" operator="Orange Austria GmbH" status="Not operational" + 07 bands="MVNO" brand="tele.ring" cc="at" country="Austria" operator="T-Mobile Austria" status="Operational" + 08 bands="MVNO" brand="Lycamobile" cc="at" country="Austria" operator="Lycamobile Austria" status="Operational" + 09 bands="MVNO" brand="Tele2Mobil" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" + 10 bands="UMTS 2100 / LTE 1800 / LTE 2600" brand="3AT" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" + 11 bands="MVNO" brand="bob" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" + 12 bands="MVNO" brand="yesss!" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" + 13 bands="MVNO" brand="UPC Mobile" cc="at" country="Austria" operator="UPC Austria" status="Operational" + 14 bands="" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Reserved" + 15 bands="MVNO" brand="Vectone Mobile" cc="at" country="Austria" operator="Mundio Mobile Austria" status="Operational" + 16 bands="" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Reserved" + 17 bands="" cc="at" country="Austria" operator="MASS Response Service GmbH" status="" + 18 bands="" cc="at" country="Austria" operator="smartspace GmbH" status="" + 19 bands="" cc="at" country="Austria" operator="Tele2 Telecommunication GmbH" status="" + 91 bands="GSM-R" brand="GSM-R A" cc="at" country="Austria" operator="ÖBB" status="Operational" 00-99 234 - 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="uk" country="United Kingdom" operator="BT Group" status="Operational" - 01 bands="GSM 1800" brand="Vectone Mobile" cc="uk" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="uk" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="uk" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" - 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="uk" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" - 05 cc="uk" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" - 06 cc="uk" country="United Kingdom" operator="Internet Computer Bureau Limited" - 07 bands="GSM 1800" cc="uk" country="United Kingdom" operator="Cable & Wireless Worldwide" status="Operational" - 08 cc="uk" country="United Kingdom" operator="OnePhone (UK) Ltd" - 09 bands="GSM 900 / GSM 1800" brand="Sure Mobile" cc="uk" country="United Kingdom" operator="Tismi BV" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="uk" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 11 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="O2 (UK)" cc="uk" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 12 bands="GSM-R" brand="Railtrack" cc="uk" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" - 13 bands="GSM-R" brand="Railtrack" cc="uk" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" - 14 bands="GSM 1800" brand="Hay Systems Ltd" cc="uk" country="United Kingdom" operator="Hay Systems Ltd" status="Operational" - 15 bands="GSM 900 / GSM 1800 / UMTS 2100 & 900" brand="Vodafone UK" cc="uk" country="United Kingdom" operator="Vodafone" status="Operational" - 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Talk Talk" cc="uk" country="United Kingdom" operator="TalkTalk Communications Limited" status="Operational" - 17 cc="uk" country="United Kingdom" operator="FleXtel Limited" - 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cloud9" cc="uk" country="United Kingdom" operator="Cloud9" status="Operational" - 19 bands="GSM 1800" brand="Private Mobile Networks PMN" cc="uk" country="United Kingdom" operator="Teleware plc" status="Operational" - 20 bands="UMTS 2100" brand="3" cc="uk" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" - 22 bands="" brand="RoutoMessaging" cc="uk" country="United Kingdom" operator="Routo Telecommunications Limited" status="Operational" - 23 bands="" cc="uk" country="United Kingdom" operator="Icron Network Limited" status="" - 24 bands="" brand="Greenfone" cc="uk" country="United Kingdom" operator="Stour Marine" status="Operational" - 25 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Truphone" cc="uk" country="United Kingdom" operator="Truphone" status="Operational" - 26 brand="Lycamobile" cc="uk" country="United Kingdom" operator="Lycamobile UK Limited" status="Operational" - 27 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="uk" country="United Kingdom" operator="Teleena UK Limited" status="Operational" - 28 bands="" brand="Marathon Telecom Ltd" cc="uk" country="United Kingdom" operator="Marathon Telecom Limited" status="Operational" - 29 bands="" brand="aql" cc="uk" country="United Kingdom" operator="(aq) Limited" status="" - 30 bands="GSM 1800 / UMTS 2100" brand="T-Mobile UK" cc="uk" country="United Kingdom" operator="EE" status="Operational" - 31 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="uk" country="United Kingdom" operator="Virgin Media" status="Operational" - 32 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="uk" country="United Kingdom" operator="Virgin Media" status="Operational" - 33 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="uk" country="United Kingdom" operator="EE" status="Operational" - 34 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="uk" country="United Kingdom" operator="EE" status="Operational" - 35 bands="" cc="uk" country="United Kingdom" operator="JSC Ingenium (UK) Limited" status="" - 36 bands="" cc="uk" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="" - 37 bands="" cc="uk" country="United Kingdom" operator="Synectiv Ltd" status="" - 38 bands="" brand="Virgin Mobile UK" cc="uk" country="United Kingdom" operator="Virgin Media" status="" - 39 bands="" cc="uk" country="United Kingdom" operator="SSE Energy Supply Limited" status="" - 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="JT" cc="uk" country="United Kingdom" operator="JT Group Limited" status="Operational" - 51 bands="TD-LTE" brand="UK Broadband" cc="uk" country="United Kingdom" operator="UK Broadband Limited" status="Operational" - 52 bands="" cc="uk" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" - 53 bands="" cc="uk" country="United Kingdom" operator="Limitless Mobile Ltd" status="" - 55 bands="GSM 900 (Guernsey) / GSM 1800 (Jersey) / UMTS 2100" brand="Sure Mobile" cc="uk" country="United Kingdom" operator="Cable & Wireless Guernsey / Sure Mobile (Jersey)" status="Operational" - 58 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Pronto GSM" cc="uk" country="United Kingdom" operator="Manx Telecom" status="Operational" - 76 bands="GSM 900 / GSM 1800" brand="BT" cc="uk" country="United Kingdom" operator="BT Group" status="Operational" - 78 bands="TETRA" brand="Airwave" cc="uk" country="United Kingdom" operator="Airwave Solutions Ltd" status="Operational" - 86 bands="" cc="uk" country="United Kingdom" operator="EE" status="" + 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" + 01 bands="GSM 1800" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="gb" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" + 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="gb" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" + 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" + 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" + 07 bands="GSM 1800" cc="gb" country="United Kingdom" operator="Cable & Wireless Worldwide" status="Operational" + 08 cc="gb" country="United Kingdom" operator="OnePhone (UK) Ltd" + 09 bands="GSM 900 / GSM 1800" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Tismi BV" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 12 bands="GSM-R" brand="Railtrack" cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" + 13 bands="GSM-R" brand="Railtrack" cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" + 14 bands="GSM 1800" brand="Hay Systems Ltd" cc="gb" country="United Kingdom" operator="Hay Systems Ltd" status="Operational" + 15 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vodafone UK" cc="gb" country="United Kingdom" operator="Vodafone" status="Operational" + 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Talk Talk" cc="gb" country="United Kingdom" operator="TalkTalk Communications Limited" status="Operational" + 17 cc="gb" country="United Kingdom" operator="FleXtel Limited" + 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cloud9" cc="gb" country="United Kingdom" operator="Cloud9" status="Operational" + 19 bands="GSM 1800" brand="Private Mobile Networks PMN" cc="gb" country="United Kingdom" operator="Teleware plc" status="Operational" + 20 bands="UMTS 2100" brand="3" cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" + 21 bands="" cc="gb" country="United Kingdom" operator="LogicStar Ltd" status="Not operational" + 22 bands="" cc="gb" country="United Kingdom" operator="Telesign Mobile Limited" status="" + 23 bands="" cc="gb" country="United Kingdom" operator="Icron Network Limited" status="" + 24 bands="" brand="Greenfone" cc="gb" country="United Kingdom" operator="Stour Marine Limited" status="Operational" + 25 bands="MVNO" brand="Truphone" cc="gb" country="United Kingdom" operator="Truphone" status="Operational" + 26 bands="MVNO" brand="Lycamobile" cc="gb" country="United Kingdom" operator="Lycamobile UK Limited" status="Operational" + 27 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="gb" country="United Kingdom" operator="Teleena UK Limited" status="Operational" + 28 bands="" brand="Marathon Telecom Ltd" cc="gb" country="United Kingdom" operator="Marathon Telecom Limited" status="Operational" + 29 bands="" brand="aql" cc="gb" country="United Kingdom" operator="(aq) Limited" status="" + 30 bands="GSM 1800 / UMTS 2100" brand="T-Mobile UK" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 31 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" + 32 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" + 33 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 34 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 35 bands="" cc="gb" country="United Kingdom" operator="JSC Ingenium (UK) Limited" status="Not operational" + 36 bands="" cc="gb" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="" + 37 bands="" cc="gb" country="United Kingdom" operator="Synectiv Ltd" status="" + 38 bands="" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="" + 39 bands="" cc="gb" country="United Kingdom" operator="SSE Energy Supply Limited" status="" + 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" + 51 bands="TD-LTE" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" + 52 bands="" cc="gb" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" + 53 bands="" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="" + 54 bands="" cc="gb" country="United Kingdom" operator="The Carphone Warehouse Limited" status="" + 55 bands="GSM 900 (Guernsey) / GSM 1800 (Jersey) / UMTS 2100" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Cable & Wireless Guernsey / Sure Mobile (Jersey)" status="Operational" + 58 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Pronto GSM" cc="gb" country="United Kingdom" operator="Manx Telecom" status="Operational" + 76 bands="GSM 900 / GSM 1800" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" + 78 bands="TETRA" brand="Airwave" cc="gb" country="United Kingdom" operator="Airwave Solutions Ltd" status="Operational" + 86 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 00-99 235 - 00 cc="uk" country="United Kingdom" operator="Mundio Mobile Limited" - 01 bands="" cc="uk" country="United Kingdom" operator="EE" status="" - 02 bands="" cc="uk" country="United Kingdom" operator="EE" status="" - 03 bands="" brand="UK Broadband" cc="uk" country="United Kingdom" operator="UK Broadband Limited" status="" - 77 brand="BT" cc="uk" country="United Kingdom" operator="BT Group" - 91 cc="uk" country="United Kingdom" operator="Vodafone United Kingdom" - 92 cc="uk" country="United Kingdom" operator="Cable & Wireless UK" - 94 cc="uk" country="United Kingdom" operator="Hutchison 3G UK Ltd" - 95 cc="uk" country="United Kingdom" operator="Network Rail Infrastructure Limited" + 00 cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" + 01 bands="" cc="gb" country="United Kingdom" operator="EE" status="" + 02 bands="" cc="gb" country="United Kingdom" operator="EE" status="" + 03 bands="" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="" + 77 brand="BT" cc="gb" country="United Kingdom" operator="BT Group" + 91 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" + 92 cc="gb" country="United Kingdom" operator="Cable & Wireless UK" + 94 cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" + 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" 00-99 238 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" - 03 bands="" brand="End2End" cc="dk" country="Denmark" operator="MIGway A/S" status="Reserved" - 04 bands="" cc="dk" country="Denmark" operator="NextGen Mobile Ltd" status="" + 03 bands="" cc="dk" country="Denmark" operator="MACH Connectivity" status="" + 04 bands="" cc="dk" country="Denmark" operator="NextGen Mobile Ltd T/A CardBoardFish" status="" 05 bands="TETRA" brand="TetraNet" cc="dk" country="Denmark" operator="ApS KBUS 38 nr. 4418" status="Operational" 06 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="dk" country="Denmark" operator="Hi3G Denmark ApS" status="Operational" 07 bands="MVNO" brand="Vectone Mobile" cc="dk" country="Denmark" operator="Mundio Mobile (Denmark) Limited" status="Operational" @@ -315,6 +338,7 @@ 11 bands="TETRA" brand="SINE" cc="dk" country="Denmark" operator="Dansk Beredskabskommunikation A/S" status="Operational" 12 bands="MVNO" brand="Lycamobile" cc="dk" country="Denmark" operator="Lycamobile Denmark Ltd" status="Operational" 13 bands="" cc="dk" country="Denmark" operator="Compatel Limited" status="" + 15 bands="" cc="dk" country="Denmark" operator="Ice Danmark ApS" status="" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="dk" country="Denmark" operator="Telia" status="Operational" 23 bands="GSM-R" brand="GSM-R DK" cc="dk" country="Denmark" operator="Banedanmark" status="Operational" 28 bands="" cc="dk" country="Denmark" operator="CoolTEL ApS" status="" @@ -325,37 +349,37 @@ 77 bands="GSM 900 / GSM 1800" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" 00-99 240 - 01 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="se" country="Sweden" operator="TeliaSonera Sverige AB" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="se" country="Sweden" operator="TeliaSonera Sverige AB" status="Operational" 02 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="3" cc="se" country="Sweden" operator="HI3G Access AB" status="Operational" - 03 bands="CDMA2000 450" brand="Net 1" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" + 03 bands="CDMA 450" brand="Net 1" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" 04 bands="UMTS 2100" brand="SWEDEN" cc="se" country="Sweden" operator="3G Infrastructure Services AB" status="Operational" 05 bands="UMTS 2100" brand="Sweden 3G" cc="se" country="Sweden" operator="Svenska UMTS-Nät AB" status="Operational" 06 bands="UMTS 2100" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" - 07 bands="GSM 900 / GSM 1800" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Inactive" - 08 bands="GSM 900 / GSM 1800" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" + 07 bands="GSM 900 / GSM 1800" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Not operational" + 08 bands="GSM 900 / GSM 1800" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Not operational" 09 bands="MVNO" brand="djuice" cc="se" country="Sweden" operator="Telenor Mobile Sweden AS" status="Not operational" 10 brand="Spring Mobil" cc="se" country="Sweden" operator="Spring Mobil AB" status="Operational" 11 bands="" cc="se" country="Sweden" operator="Lindholmen Science Park AB" status="Not operational" 12 bands="MVNO" brand="Lycamobile" cc="se" country="Sweden" operator="Lycamobile Sweden Limited" status="Operational" 13 bands="" cc="se" country="Sweden" operator="Alltele Företag Sverige AB" status="" - 14 bands="MVNO" cc="se" country="Sweden" operator="TDC Sverige AB" status="Inactive" + 14 bands="MVNO" cc="se" country="Sweden" operator="TDC Sverige AB" status="Not operational" 15 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="se" country="Sweden" operator="Wireless Maingate Nordic AB" status="Operational" 16 bands="GSM" cc="se" country="Sweden" operator="42 Telecom AB" status="Operational" - 17 bands="" brand="Gotanet" cc="se" country="Sweden" operator="Götalandsnätet AB" status="" + 17 bands="MVNO" brand="Gotanet" cc="se" country="Sweden" operator="Götalandsnätet AB" status="Operational" 18 bands="" cc="se" country="Sweden" operator="Generic Mobile Systems Sweden AB" status="" 19 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="se" country="Sweden" operator="Mundio Mobile (Sweden) Limited" status="Operational" 20 bands="GSM" cc="se" country="Sweden" operator="Wireless Maingate Messaging Services AB" status="Operational" 21 bands="GSM-R 900" brand="MobiSir" cc="se" country="Sweden" operator="Trafikverket ICT" status="Operational" 22 bands="" cc="se" country="Sweden" operator="EuTel AB" status="" 23 bands="" cc="se" country="Sweden" operator="Infobip Limited" status="Operational" - 24 bands="GSM 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" + 24 bands="GSM 900 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" 25 bands="" cc="se" country="Sweden" operator="Digitel Mobile Srl" status="Not operational" 26 bands="GSM" cc="se" country="Sweden" operator="Beepsend AB" status="Operational" 27 bands="MVNO" cc="se" country="Sweden" operator="Fogg Mobile AB" status="Operational" 28 bands="" cc="se" country="Sweden" operator="CoolTEL Aps" status="" 29 bands="" cc="se" country="Sweden" operator="Mercury International Carrier Services" status="" 30 bands="" cc="se" country="Sweden" operator="NextGen Mobile Ltd." status="" - 31 bands="" cc="se" country="Sweden" operator="Mobimax AB" status="Not operational" + 31 bands="" cc="se" country="Sweden" operator="RebTel Network AB" status="" 32 bands="" cc="se" country="Sweden" operator="Compatel Limited" status="" 33 bands="" cc="se" country="Sweden" operator="Mobile Arts AB" status="" 34 bands="" cc="se" country="Sweden" operator="Pro Net Telecommunications Services Ltd." status="" @@ -363,25 +387,28 @@ 36 bands="" cc="se" country="Sweden" operator="interactive digital media GmbH" status="" 37 bands="" cc="se" country="Sweden" operator="CLX Networks AB" status="Operational" 38 bands="MVNO" brand="Voxbone" cc="se" country="Sweden" operator="Voxbone mobile" status="Operational" - 39 bands="" cc="se" country="Sweden" operator="iCentrex Sweden AB" status="Not operational" + 39 bands="" cc="se" country="Sweden" operator="Borderlight AB" status="" 40 bands="" cc="se" country="Sweden" operator="ReWiCom Scandinavia AB" status="" 41 bands="" cc="se" country="Sweden" operator="Shyam Telecom UK Ltd." status="" 42 bands="" cc="se" country="Sweden" operator="Telenor Connexion AB" status="" 43 bands="" cc="se" country="Sweden" operator="MobiWeb Ltd." status="" 44 bands="" cc="se" country="Sweden" operator="Limitless Mobile AB" status="" + 45 bands="" cc="se" country="Sweden" operator="Spirius AB" status="" 00-99 242 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="NetCom" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Operational" - 03 brand="Teletopia" cc="no" country="Norway" operator="Teletopia" status="Not operational" + 03 brand="Teletopia" cc="no" country="Norway" operator="Teletopia Gruppen AS" status="Not operational" 04 bands="MVNO" brand="Tele2" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" 05 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Network Norway" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" - 06 bands="CDMA2000 450" brand="Ice" cc="no" country="Norway" operator="Nordisk Mobiltelefon" status="Operational" - 07 bands="MVNO" brand="Ventelo" cc="no" country="Norway" operator="Ventelo AS" status="Operational" + 06 bands="CDMA2000 450" brand="ICE" cc="no" country="Norway" operator="ICE Norge AS" status="Operational" + 07 bands="MVNO" brand="Phonero" cc="no" country="Norway" operator="Phonero AS" status="Operational" 08 bands="MVNO" brand="TDC" cc="no" country="Norway" operator="TDC Mobil AS" status="Operational" 09 bands="MVNO" brand="Com4" cc="no" country="Norway" operator="Com4 AS" status="Operational" + 10 bands="" cc="no" country="Norway" operator="Nasjonal kommunikasjonsmyndighet" status="" 11 bands="Test" brand="SystemNet" cc="no" country="Norway" operator="SystemNet AS" status="" 12 bands="" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="" + 14 bands="" cc="no" country="Norway" operator="ICE Communication Norge AS" status="" 20 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" 21 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" 23 bands="MVNO" brand="Lyca" cc="no" country="Norway" operator="Lyca Mobile Ltd" status="Operational" @@ -394,35 +421,42 @@ 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" 08 bands="GSM 1800 / UMTS 2100" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" - 09 bands="GSM 900" brand="Finnet Group / Nokia Networks" cc="fi" country="Finland" operator="Global Network" status="Not operational" - 10 bands="MVNO" brand="TDC" cc="fi" country="Finland" operator="TDC Oy (DNA Oy)" status="Operational" + 09 bands="GSM 900" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Not operational" + 10 bands="" cc="fi" country="Finland" operator="Viestintävirasto" status="" 11 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Operational" 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" 13 bands="GSM 900 / GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Not operational" 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Ålcom" cc="fi" country="Finland" operator="Ålands Telekommunikation Ab" status="Operational" + 15 bands="GSM 1800" brand="SAMK" cc="fi" country="Finland" operator="Satakunta University of Applied Sciences" status="Not operational" 16 bands="MVNO" brand="Tele2" cc="fi" country="Finland" operator="Oy Finland Tele2 AB" status="Not operational" - 21 bands="MVNO" brand="Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" + 17 bands="GSM-R" brand="RHK" cc="fi" country="Finland" operator="Finnish Transport Agency" status="Operational" + 21 bands="MVNO" brand="Elisa-Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" 25 bands="CDMA" brand="Datame" cc="fi" country="Finland" operator="Datame Oy" status="Not operational" 26 bands="MVNO" brand="Compatel" cc="fi" country="Finland" operator="Compatel Ltd" status="Operational" + 27 bands="" cc="fi" country="Finland" operator="VTT Technical Research Centre of Finland" status="" 29 bands="MVNO" cc="fi" country="Finland" operator="SCNL Truphone" status="Not operational" 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Operational" - 31 bands="LTE 450" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukko Mobile Oy / Ukkoverkot Oy" status="Operational" + 31 bands="MVNO" brand="Kuiri" cc="fi" country="Finland" operator="Ukko Mobile Oy" status="Operational" 32 bands="MVNO" brand="Voxbone" cc="fi" country="Finland" operator="Voxbone SA" status="Operational" 33 bands="TETRA" brand="VIRVE" cc="fi" country="Finland" operator="Virve Tuotteet ja Palvelut Oy" status="Operational" 34 bands="" brand="Elektrobit Wireless" cc="fi" country="Finland" operator="Elektrobit Wireless Communications Oy" status="Operational" 35 bands="LTE 450" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" + 36 bands="" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="" 91 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="Operational" 00-99 246 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Omnitel" cc="lt" country="Lithuania" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Omnitel" cc="lt" country="Lithuania" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BITĖ" cc="lt" country="Lithuania" operator="UAB Bitė Lietuva" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tele 2" cc="lt" country="Lithuania" status="Operational" - 05 bands="GSM-R 900" brand="LitRail" cc="lt" country="Lithuania" operator="Lithuanian Railways" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Tele 2" cc="lt" country="Lithuania" status="Operational" + 04 bands="" cc="lt" country="Lithuania" operator="Ministry of the Interior)" status="" + 05 bands="GSM-R 900" brand="LitRail" cc="lt" country="Lithuania" operator="Lietuvos geležinkeliai (Lithuanian Railways)" status="Operational" 06 bands="GSM 1800" brand="Mediafon" cc="lt" country="Lithuania" operator="UAB Mediafon" status="Operational" + 07 bands="" cc="lt" country="Lithuania" operator="Compatel Ltd." status="" + 08 bands="WiMAX 3500" brand="MEZON" cc="lt" country="Lithuania" operator="Lietuvos radijo ir televizijos centras" status="Operational" 00-99 247 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tele2" cc="lv" country="Latvia" operator="Tele2" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tele2" cc="lv" country="Latvia" operator="Tele2" status="Operational" 03 bands="CDMA 450" brand="TRIATEL" cc="lv" country="Latvia" operator="Telekom Baltija" status="Operational" 04 bands="" cc="lv" country="Latvia" operator="Beta Telecom" status="" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Bite" cc="lv" country="Latvia" operator="Bite Latvija" status="Operational" @@ -433,7 +467,7 @@ 00-99 248 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="EMT" cc="ee" country="Estonia" operator="Estonian Mobile Telecom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="ee" country="Estonia" operator="Elisa Eesti" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="ee" country="Estonia" operator="Elisa Eesti" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Tele 2" cc="ee" country="Estonia" operator="Tele 2 Eesti" status="Operational" 04 bands="MVNO" cc="ee" country="Estonia" operator="OY Top Connect" status="Operational" 05 bands="" cc="ee" country="Estonia" operator="AS Bravocom Mobiil" status="" @@ -444,7 +478,7 @@ 71 bands="" cc="ee" country="Estonia" operator="Siseministeerium (Ministry of Interior)" status="" 00-99 250 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications" status="Operational" 04 bands="GSM 900" brand="Sibchallenge" cc="ru" country="Russian Federation" operator="Sibchallenge" status="Not operational" @@ -462,7 +496,7 @@ 17 bands="GSM 900 / GSM 1800" brand="Utel" cc="ru" country="Russian Federation" operator="JSC Uralsvyazinform" status="Operational" 18 bands="TD-LTE 2300" brand="Osnova Telecom" cc="ru" country="Russian Federation" status="Not operational" 19 bands="GSM 1800" brand="INDIGO" cc="ru" country="Russian Federation" operator="INDIGO" status="Not operational" - 20 bands="GSM 900 / GSM 1800" brand="Tele2" cc="ru" country="Russian Federation" operator="Tele2" status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tele2" cc="ru" country="Russian Federation" operator="Tele2" status="Operational" 23 bands="GSM 900 / GSM 1800" brand="Mobicom - Novosibirsk" cc="ru" country="Russian Federation" operator="Mobicom - Novosibirsk" status="Not operational" 28 bands="GSM 900" brand="Beeline" cc="ru" country="Russian Federation" operator="Beeline" status="Not operational" 32 bands="GSM 900 / GSM 1800" brand="Win Mobile" cc="ru" country="Russian Federation" operator="K-Telecom" status="Operational" @@ -502,13 +536,13 @@ 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Moldcell" cc="md" country="Moldova" status="Operational" 03 bands="CDMA 450" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Eventis" cc="md" country="Moldova" operator="Eventis Telecom" status="Not operational" - 05 bands="UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" - 99 bands="UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" + 05 bands="UMTS 900 / UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" + 99 bands="UMTS 900 / UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 00-99 260 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Plus" cc="pl" country="Poland" operator="Polkomtel Sp. z o.o." status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="T-Mobile" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA2000 450" brand="Orange" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Plus" cc="pl" country="Poland" operator="Polkomtel Sp. z o.o." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="T-Mobile" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / CDMA2000 450" brand="Orange" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Operational" 04 bands="" cc="pl" country="Poland" operator="CenterNet S.A." status="Not operational" 05 bands="UMTS 2100" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Operational" 06 bands="GSM 900/ GSM 1800 / UMTS 900 / UMTS 2100" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Operational" @@ -545,9 +579,9 @@ 262 01 bands="GSM 900 / GSM 1800/ / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Reserved" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Reserved" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Reserved" 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="Reserved" 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="O2" cc="de" country="Germany" operator="Telefónica Germany GmbH & Co. oHG" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="de" country="Germany" operator="Telefónica Germany GmbH & Co. oHG" status="Reserved" @@ -558,7 +592,7 @@ 13 bands="UMTS 2100" cc="de" country="Germany" operator="Mobilcom Multimedia" status="Not operational" 14 bands="UMTS 2100" cc="de" country="Germany" operator="Group 3G UMTS" status="Not operational" 15 bands="TD-SCDMA" brand="Airdata" cc="de" country="Germany" status="Operational" - 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telogic ex. Vistream" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="" + 16 bands="MVNO" cc="de" country="Germany" operator="Telogic Germany GmbH" status="Not operational" 17 bands="" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="" 18 bands="MVNO" cc="de" country="Germany" operator="NetCologne" status="Operational" 19 bands="" cc="de" country="Germany" operator="Inquam Deutschland" status="" @@ -582,12 +616,16 @@ 00-99 268 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="pt" country="Portugal" operator="Vodafone Portugal" status="Operational" + 02 bands="" brand="MEO" cc="pt" country="Portugal" operator="Telecomunicações Móveis Nacionais" status="" 03 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="NOS" cc="pt" country="Portugal" operator="NOS Comunicações" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 2100" brand="LycaMobile" cc="pt" country="Portugal" operator="MVNO" status="Operational" - 05 bands="" cc="pt" country="Portugal" operator="Oniway - Inforcomunicaçôes, S.A." status="" - 06 brand="TMN" cc="pt" country="Portugal" - 07 bands="GSM 900 / UMTS 2100" brand="Vectonemobile - Delightmobile" cc="pt" country="Portugal" operator="MVNO" status="Operational" + 04 bands="MVNO" brand="LycaMobile" cc="pt" country="Portugal" operator="LycaMobile" status="Operational" + 05 bands="UMTS 2100" cc="pt" country="Portugal" operator="Oniway - Inforcomunicaçôes, S.A." status="Not operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="MEO" cc="pt" country="Portugal" operator="Telecomunicações Móveis Nacionais" status="Operational" + 07 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="pt" country="Portugal" operator="Mundio Mobile (Portugal) Limited" status="Operational" + 11 bands="" cc="pt" country="Portugal" operator="Compatel, Limited" status="" + 12 bands="GSM-R" cc="pt" country="Portugal" operator="Refer Telecom - Serviços de Telecomunicações, S.A." status="Operational" 21 bands="CDMA2000 450" brand="Zapp" cc="pt" country="Portugal" operator="Zapp Portugal" status="Not operational" + 80 bands="" brand="MEO" cc="pt" country="Portugal" operator="Telecomunicações Móveis Nacionais" status="" 00-99 270 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="POST" cc="lu" country="Luxembourg" operator="POST Luxembourg" status="Operational" @@ -598,26 +636,28 @@ 99 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="lu" country="Luxembourg" operator="Orange S.A." status="Operational" 00-99 272 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="ie" country="Ireland" operator="Vodafone Ireland" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="ie" country="Ireland" operator="O2 Ireland" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Meteor" cc="ie" country="Ireland" operator="Meteor Mobile Communications" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Vodafone" cc="ie" country="Ireland" operator="Vodafone Ireland" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="3 (former O2 network)" cc="ie" country="Ireland" operator="Hutchison 3G Ireland limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Meteor" cc="ie" country="Ireland" operator="Meteor Mobile Communications" status="Operational" 04 bands="" cc="ie" country="Ireland" operator="Access Telecom" status="" - 05 bands="UMTS 2100" brand="3" cc="ie" country="Ireland" operator="Hutchison 3G Ireland limited" status="Operational" + 05 bands="UMTS 2100 / LTE 1800" brand="3" cc="ie" country="Ireland" operator="Hutchison 3G Ireland limited" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="eMobile" cc="ie" country="Ireland" operator="Eircom Mobile" status="Operational" 09 bands="" cc="ie" country="Ireland" operator="Clever Communications" status="" - 11 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tesco Mobile" cc="ie" country="Ireland" operator="Liffey Telecom" status="Operational" - 13 bands="GSM 900 / GSM 1800" brand="Lycamobile" cc="ie" country="Ireland" operator="Lycamobile" status="Operational" + 11 bands="MVNO" brand="Tesco Mobile" cc="ie" country="Ireland" operator="Liffey Telecom" status="Operational" + 13 bands="MVNO" brand="Lycamobile" cc="ie" country="Ireland" operator="Lycamobile" status="Operational" 00-99 274 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Síminn" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="is" country="Iceland" operator="Og fjarskipti hf" status="Operational" - 03 bands="" brand="Vodafone" cc="is" country="Iceland" operator="Vodafone Iceland" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Síminn" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Vodafone" cc="is" country="Iceland" operator="Og fjarskipti hf" status="Operational" + 03 bands="" brand="Vodafone" cc="is" country="Iceland" operator="Og fjarskipti hf" status="Operational" 04 bands="GSM 1800" brand="Viking" cc="is" country="Iceland" operator="IMC Island ehf" status="Operational" - 06 bands="" cc="is" country="Iceland" operator="Núll níu ehf" status="Reserved" - 07 bands="GSM 1800" brand="IceCell" cc="is" country="Iceland" operator="IceCell ehf" status="Operational" + 05 bands="GSM 1800" cc="is" country="Iceland" operator="Halló Frjáls fjarskipti hf." status="Not operational" + 06 bands="" cc="is" country="Iceland" operator="Núll níu ehf" status="" + 07 bands="GSM 1800" brand="IceCell" cc="is" country="Iceland" operator="IceCell ehf" status="Not operational" 08 bands="" brand="On-waves" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" 11 bands="UMTS 2100 / LTE 1800" brand="Nova" cc="is" country="Iceland" operator="Nova ehf" status="Operational" - 12 bands="GSM 900 / GSM 1800" brand="Tal" cc="is" country="Iceland" operator="Tal hf" status="Operational" + 12 bands="MVNO" brand="Tal" cc="is" country="Iceland" operator="IP fjarskipti" status="Operational" + 22 bands="" cc="is" country="Iceland" operator="Landhelgisgæslan (Icelandic Coast Guard)" status="" 00-99 276 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="AMC" cc="al" country="Albania" operator="Albanian Mobile Communications" status="Operational" @@ -627,38 +667,42 @@ 00-99 278 01 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="mt" country="Malta" operator="Vodafone Malta" status="Operational" - 21 bands="GSM 1800 / UMTS 2100" brand="GO" cc="mt" country="Malta" operator="Mobisle Communications Limited" status="Operational" + 11 bands="MVNO" cc="mt" country="Malta" operator="YOM Ltd." status="Operational" + 21 bands="GSM 1800 / UMTS 2100" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="Operational" + 30 bands="" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="" 77 bands="UMTS 2100" brand="Melita" cc="mt" country="Malta" operator="Melita Plc" status="Operational" 00-99 280 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cytamobile-Vodafone" cc="cy" country="Cyprus" operator="Cyprus Telecommunications Authority" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="cy" country="Cyprus" operator="MTN Group" status="Operational" - 20 bands="MVNO" brand="PrimeTel" cc="cy" country="Cyprus" operator="PrimeTel PLC" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN" cc="cy" country="Cyprus" operator="MTN Group" status="Operational" + 20 bands="LTE 1800" brand="PrimeTel" cc="cy" country="Cyprus" operator="PrimeTel PLC" status="Operational" 22 bands="MVNO" brand="lemontel" cc="cy" country="Cyprus" operator="Lemontel Ltd" status="Operational" 00-99 282 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Geocell" cc="ge" country="Georgia" operator="Geocell Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MagtiCom" cc="ge" country="Georgia" operator="Magticom GSM" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Geocell" cc="ge" country="Georgia" operator="Geocell Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MagtiCom" cc="ge" country="Georgia" operator="Magticom GSM" status="Operational" 03 bands="CDMA 450" brand="MagtiCom" cc="ge" country="Georgia" operator="Magtifix" status="Operational" - 04 bands="GSM 1800" brand="Beeline" cc="ge" country="Georgia" operator="Mobitel LLC" status="Operational" - 05 bands="CDMA 800" brand="Silknet" cc="ge" country="Georgia" operator="Silknet CDMA" status="Operational" + 04 bands="GSM 1800 / LTE 800" brand="Beeline" cc="ge" country="Georgia" operator="Mobitel LLC" status="Operational" + 05 bands="CDMA 800" brand="Silknet" cc="ge" country="Georgia" operator="JSC Silknet" status="Operational" 06 bands="" cc="ge" country="Georgia" operator="JSC Compatel" status="" - 07 bands="" cc="ge" country="Georgia" operator="GlobalCell Ltd" status="" + 07 bands="MVNO" brand="GlobalCell" cc="ge" country="Georgia" operator="GlobalCell Ltd" status="Operational" + 08 bands="LTE-TDD 2300" brand="Silk LTE" cc="ge" country="Georgia" operator="JSC Silknet" status="Operational" + 09 bands="" cc="ge" country="Georgia" operator="Gmobile Ltd" status="" 00-99 283 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="am" country="Armenia" operator="ArmenTel" status="Operational" 04 bands="GSM 900 / UMTS 900" brand="Karabakh Telecom" cc="am" country="Armenia" operator="Karabakh Telecom" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="VivaCell-MTS" cc="am" country="Armenia" operator="K Telecom CJSC" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="VivaCell-MTS" cc="am" country="Armenia" operator="K Telecom CJSC" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="am" country="Armenia" operator="Orange S.A." status="Operational" 00-99 284 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="M-Tel" cc="bg" country="Bulgaria" operator="Mobiltel" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vivacom" cc="bg" country="Bulgaria" operator="BTC" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="GLOBUL" cc="bg" country="Bulgaria" operator="Cosmo Bulgaria Mobile" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Telenor" cc="bg" country="Bulgaria" operator="Telenor (Bulgaria)" status="Operational" 07 bands="GSM-R" brand="НКЖИ" cc="bg" country="Bulgaria" operator="НАЦИОНАЛНА КОМПАНИЯ ЖЕЛЕЗОПЪТНА ИНФРАСТРУКТУРА" status="Operational" - 09 bands="" brand="COMPATEL LIMITED" cc="bg" country="Bulgaria" operator="COMPATEL LIMITED" status="Operational" - 11 bands="LTE 1800" brand="Bulsatcom" cc="bg" country="Bulgaria" operator="Undisclosed" status="Reserved" - 13 bands="LTE 1800" brand="Max Telecom" cc="bg" country="Bulgaria" operator="Max Telecom LTD" status="Operational" + 09 bands="" cc="bg" country="Bulgaria" operator="COMPATEL LIMITED" status="Not operational" + 11 bands="LTE 1800" cc="bg" country="Bulgaria" operator="Bulsatcom" status="Not operational" + 13 bands="LTE 1800" brand="MAX" cc="bg" country="Bulgaria" operator="Max Telecom LTD" status="Operational" 00-99 286 01 bands="GSM 900 / UMTS 2100" brand="Turkcell" cc="tr" country="Turkey" operator="Turkcell Iletisim Hizmetleri A.S." status="Operational" @@ -673,7 +717,7 @@ 00-99 289 67 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Aquafon" country="Abkhazia - GE-AB" operator="Aquafon JSC" status="Operational" - 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE Band 3/20" brand="A-Mobile" country="Abkhazia - GE-AB" operator="A-Mobile LLC" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="A-Mobile" country="Abkhazia - GE-AB" operator="A-Mobile LLSC" status="Operational" 00-99 290 01 bands="GSM 900 / UMTS 900 / LTE 800" cc="gl" country="Greenland (Denmark)" operator="TELE Greenland A/S" status="Operational" @@ -682,66 +726,68 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="PRIMA" cc="sm" country="San Marino" operator="San Marino Telecom" status="Operational" 00-99 293 - 31 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobitel" cc="si" country="Slovenia" operator="Mobitel D.D." status="Operational" - 40 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Si.mobil" cc="si" country="Slovenia" operator="SI.MOBIL d.d." status="Operational" - 41 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobitel" cc="si" country="Slovenia" operator="Mobitel D.D." status="Operational" - 51 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobitel" cc="si" country="Slovenia" operator="Mobitel D.D." status="Operational" + 10 bands="GSM-R" cc="si" country="Slovenia" operator="SŽ - Infrastruktura, d.o.o." status="Not operational" + 20 bands="" cc="si" country="Slovenia" operator="COMPATEL Ltd" status="" + 40 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Si.mobil" cc="si" country="Slovenia" operator="SI.MOBIL d.d." status="Operational" + 41 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800" brand="Mobitel" cc="si" country="Slovenia" operator="Telekom Slovenije" status="Operational" 64 bands="UMTS 2100" brand="T-2" cc="si" country="Slovenia" operator="T-2 d.o.o." status="Operational" 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Tušmobil" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" 00-99 294 - 01 bands="GSM 900 / UMTS 2100" brand="T-Mobile MK" cc="mk" country="Macedonia" operator="T-Mobile Macedonia" status="Operational" - 02 bands="GSM 900 / UMTS 2100" brand="ONE" cc="mk" country="Macedonia" operator="One" status="Operational" - 03 bands="GSM 900 / GSM 1800 /UMTS 900" brand="Vip MK" cc="mk" country="Macedonia" operator="VIP Operator" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile MK" cc="mk" country="Macedonia" operator="T-Mobile Macedonia" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="ONE" cc="mk" country="Macedonia" operator="One" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vip MK" cc="mk" country="Macedonia" operator="VIP Operator" status="Operational" + 10 bands="" cc="mk" country="Macedonia" operator="WTI Macedonia" status="" + 11 bands="" cc="mk" country="Macedonia" operator="MOBIK TELEKOMUNIKACII DOOEL Skopje" status="" 00-99 295 01 bands="GSM 900 / GSM 1800" brand="Swisscom" cc="li" country="Liechtenstein" operator="Swisscom Schweiz AG" status="Operational" - 02 bands="GSM 1800 / UMTS 2100" brand="Orange" cc="li" country="Liechtenstein" operator="Orange Liechtenstein AG" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="FL1" cc="li" country="Liechtenstein" operator="Mobilkom Liechtenstein AG" status="Operational" + 02 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange" cc="li" country="Liechtenstein" operator="Orange Liechtenstein AG" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="FL1" cc="li" country="Liechtenstein" operator="Telecom Liechtenstein AG" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cubic Telecom" cc="li" country="Liechtenstein" operator="Cubic Telecom AG" status="Operational" + 07 bands="" cc="li" country="Liechtenstein" operator="First Mobile AG" status="" 77 bands="GSM 900" brand="Alpmobil" cc="li" country="Liechtenstein" operator="Alpcom AG" status="Not operational" 00-99 297 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="me" country="Montenegro" operator="Telenor Montenegro" status="Operational" - 02 bands="GSM 900 / UMTS 2100" brand="T-Mobile" cc="me" country="Montenegro" operator="T-Mobile Montenegro LLC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="me" country="Montenegro" operator="Telenor Montenegro" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="T-Mobile" cc="me" country="Montenegro" operator="T-Mobile Montenegro LLC" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="m:tel CG" cc="me" country="Montenegro" operator="MTEL CG" status="Operational" - 04 bands="GSM 900 / UMTS 2100" brand="T-Mobile" cc="me" country="Montenegro" operator="T-Mobile Montenegro" status="Operational" 00-99 302 - 220 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="Telus" cc="ca" country="Canada" operator="Koodo Mobility, Public Mobile and Telus Mobility" status="Operational" + 220 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="Telus Mobility, Koodo Mobile" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 221 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" 222 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" 250 bands="" brand="ALO" cc="ca" country="Canada" operator="ALO Mobile Inc." status="" - 270 bands="UMTS 1700 / LTE 1700" brand="EastLink" cc="ca" country="Canada" operator="EastLink" status="Operational" + 270 bands="UMTS 1700 / LTE 1700" brand="EastLink" cc="ca" country="Canada" operator="Bragg Communications" status="Operational" 290 bands="iDEN 900" brand="Airtel Wireless" cc="ca" country="Canada" operator="Airtel Wireless" status="Operational" 320 bands="UMTS 1700" brand="Mobilicity" cc="ca" country="Canada" operator="DAVE Wireless" status="Operational" - 340 bands="" brand="Execulink" cc="ca" country="Canada" operator="Execulink" status="" - 350 bands="GSM 850" brand="FIRST" cc="ca" country="Canada" operator="FIRST Networks Operations" status="Operational" + 340 bands="MVNO" brand="Execulink" cc="ca" country="Canada" operator="Execulink" status="Operational" + 350 bands="GSM 850" brand="FIRST" cc="ca" country="Canada" operator="FIRST Networks Operations" status="Not operational" 360 bands="iDEN 800" brand="MiKe" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 361 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" - 370 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="Fido" cc="ca" country="Canada" operator="Fido Solutions (Rogers Wireless)" status="Operational" - 380 bands="UMTS 850 / UMTS 1900" brand="DMTS" cc="ca" country="Canada" operator="Dryden Mobility" status="Operational" - 390 bands="" brand="DMTS" cc="ca" country="Canada" operator="Dryden Mobility" status="" + 370 bands="MVNO" brand="Fido" cc="ca" country="Canada" operator="Fido Solutions (Rogers Wireless)" status="Operational" + 380 bands="UMTS 850 / UMTS 1900" brand="Keewaytinook Mobile" cc="ca" country="Canada" operator="Keewaytinook Okimakanak Mobile" status="Operational" + 390 bands="" brand="DMTS" cc="ca" country="Canada" operator="Dryden Mobility" status="Not operational" 480 bands="" brand="SSi Connexions" cc="ca" country="Canada" operator="SSi Connexions" status="" - 490 bands="UMTS 1700" brand="WIND Mobile" cc="ca" country="Canada" operator="Globalive Communications" status="Operational" + 490 bands="UMTS 1700" brand="WIND Mobile" cc="ca" country="Canada" operator="Mid-Bowline Holdings Corp." status="Operational" 500 bands="UMTS 1700" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="Operational" 510 bands="UMTS 1700" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="Operational" 520 bands="" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="" - 530 bands="GSM" brand="Keewatinook Okimakanak Mobile" cc="ca" country="Canada" operator="Keewatinook Okimacinac" status="Operational" - 560 bands="" brand="Lynx Mobility" cc="ca" country="Canada" operator="Lynx Mobility" status="" + 530 bands="GSM" brand="Keewaytinook Mobile" cc="ca" country="Canada" operator="Keewaytinook Okimakanak Mobile" status="Operational" + 560 bands="CDMA / GSM" brand="Lynx Mobility" cc="ca" country="Canada" operator="Lynx Mobility" status="Operational" 570 bands="" brand="LightSquared" cc="ca" country="Canada" operator="LightSquared" status="" - 590 bands="" brand="Quadro Communication" cc="ca" country="Canada" operator="Quadro Communication" status="" - 610 bands="UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility and Virgin Mobile Canada" status="Operational" - 620 bands="GSM 1900 / UMTS 1900" brand="ICE Wireless" cc="ca" country="Canada" operator="ICE Wireless" status="Operational" - 630 bands="" brand="Aliant Mobility" cc="ca" country="Canada" operator="Aliant Mobility" status="" + 590 bands="" brand="Quadro Mobility" cc="ca" country="Canada" operator="Quadro Communications Co-op" status="Operational" + 610 bands="UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Bell Mobility, Virgin Mobile Canada" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" + 620 bands="UMTS 850 / GSM 1900" brand="ICE Wireless" cc="ca" country="Canada" operator="ICE Wireless" status="Operational" + 630 bands="" brand="Aliant Mobility" cc="ca" country="Canada" operator="Bell Aliant" status="" 640 bands="CDMA 800 / CDMA 1900" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" 652 bands="CDMA2000" cc="ca" country="Canada" operator="BC Tel Mobility (Telus)" status="Operational" 653 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" - 655 bands="CDMA 800 / CDMA 1900" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" + 655 bands="CDMA 800 / 850 / CDMA 1900" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" 656 bands="CDMA2000 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="TBay" cc="ca" country="Canada" operator="Thunder Bay Telephone Mobility" status="Operational" 657 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 660 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" - 670 bands="" brand="CityTel Mobility" cc="ca" country="Canada" operator="CityTel Mobility" status="" + 670 bands="" brand="CityTel Mobility" cc="ca" country="Canada" operator="CityWest" status="" 680 bands="CDMA 850 / TDD-LTE 2600" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" 690 bands="UMTS 850 / UMTS 1900" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" 701 bands="CDMA2000" cc="ca" country="Canada" operator="MB Tel Mobility" status="Operational" @@ -749,16 +795,18 @@ 703 bands="CDMA2000" cc="ca" country="Canada" operator="New Tel Mobility (Aliant)" status="Operational" 710 bands="Satellite CDMA" brand="Globalstar" cc="ca" country="Canada" status="Operational" 720 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Rogers Wireless" cc="ca" country="Canada" operator="Rogers Communications" status="Operational" - 730 bands="" brand="TerreStar Solutions" cc="ca" country="Canada" operator="TerreStar Solutions" status="" - 740 bands="" brand="Shaw Telecom G.P." cc="ca" country="Canada" operator="Shaw Telecom G.P." status="" + 730 bands="" brand="TerreStar Solutions" cc="ca" country="Canada" operator="TerreStar Networks" status="" + 740 bands="" brand="Shaw Telecom" cc="ca" country="Canada" operator="Shaw Communications" status="Not operational" 750 bands="" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="" - 760 bands="" brand="Public Mobile Inc." cc="ca" country="Canada" operator="Public Mobile Inc." status="" + 760 bands="MVNO" brand="Public Mobile" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 770 bands="" brand="Rural Com" cc="ca" country="Canada" operator="Rural Com" status="" 780 bands="UMTS 850 / UMTS 1900 / LTE 2100" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" - 790 bands="" cc="ca" country="Canada" operator="NetSet Communications" status="" + 790 bands="WiMAX" cc="ca" country="Canada" operator="NetSet Communications" status="Operational" + 820 bands="" brand="Rogers Wireless" cc="ca" country="Canada" operator="Rogers Communications" status="" 860 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" 880 bands="UMTS 850 / UMTS 1900" brand="Bell / Telus / SaskTel" cc="ca" country="Canada" operator="Shared Telus, Bell, and SaskTel" status="Operational" - 940 bands="" brand="Wightman Telecom" cc="ca" country="Canada" operator="Wightman Telecom" status="" + 920 bands="" brand="Rogers Wireless" cc="ca" country="Canada" operator="Rogers Communications" status="" + 940 bands="" brand="Wightman Mobility" cc="ca" country="Canada" operator="Wightman Telecom" status="Operational" 000-999 308 01 bands="GSM 900" brand="Ameris" cc="pm" country="Saint Pierre and Miquelon (France)" operator="St. Pierre-et-Miquelon Télécom" status="Operational" @@ -767,7 +815,9 @@ 310 004 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 005 bands="CDMA2000 850 / CDMA2000 1900" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" + 006 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 010 bands="" cc="us" country="United States of America" operator="MCI" status="Not operational" + 012 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 013 bands="" brand="MobileTel" cc="us" country="United States of America" status="" 014 bands="" cc="us" country="United States of America" operator="Testing" status="Operational" 016 bands="CDMA2000 1900 / CDMA2000 1700 / CDMA2000 2100" brand="Cricket Communications" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" @@ -783,16 +833,17 @@ 053 bands="CDMA2000 1900." cc="us" country="United States of America" operator="Virgin Mobile US" status="Operational" 054 bands="" cc="us" country="United States of America" operator="Alltel US" status="Operational" 060 bands="" cc="us" country="United States of America" operator="Consolidated Telcom" status="Operational" - 066 bands="GSM AND CDMA" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 066 bands="GSM AND CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" 070 bands="" cc="us" country="United States of America" operator="Highland Cellular" status="Operational" 080 bands="GSM 1900" brand="Corr" cc="us" country="United States of America" operator="Corr Wireless Communications LLC" status="Operational" 090 bands="CDMA2000 1900 / CDMA2000 1700 / CDMA2000 2100" brand="Cricket Communications" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" 100 bands="GSM 850" brand="Plateau Wireless" cc="us" country="United States of America" operator="New Mexico RSA 4 East Ltd. Partnership" status="Operational" 110 bands="GSM 850" brand="PTI Pacifica" cc="us" country="United States of America" operator="PTI Pacifica Inc." status="Operational" - 120 bands="CDMA2000 1900" brand="Sprint" cc="us" country="United States of America" status="Operational" + 120 bands="CDMA2000 1900" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" + 130 bands="CDMA2000 1900" brand="Carolina Wireless" cc="us" country="United States of America" operator="Carolina Wireless" status="Operational" 140 bands="GSM 850 / GSM 1900" brand="mPulse" cc="gu" country="Guam (United States of America)" operator="GTA Wireless" status="Operational" 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" - 160 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" + 160 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" operator="T-Mobile US" status="Operational" 170 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 180 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="West Central" cc="us" country="United States of America" operator="West Central Wireless" status="Operational" 190 bands="GSM 850" brand="Dutch Harbor" cc="us" country="United States of America" operator="Alaska Wireless Communications, LLC" status="Operational" @@ -802,7 +853,7 @@ 230 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 240 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 250 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" - 260 bands="GSM 1900 / UMTS 1900 / UMTS 1700/2100 (AWS)" cc="us" country="United States of America" operator="T-Mobile" status="Operational" + 260 bands="GSM 1900 / UMTS 1900 / UMTS 1700/2100 (AWS) / Band 12 700 MHz" brand="T-Mobile USA" cc="us" country="United States of America" operator="T-Mobile USA" status="Operational" 270 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 280 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not Operational" 290 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" @@ -818,10 +869,10 @@ 390 bands="GSM 850" brand="Cellular One of East Texas" cc="us" country="United States of America" operator="TX-11 Acquisition, LLC" status="Operational" 400 bands="GSM 1900" brand="i CAN_GSM" cc="us" country="United States of America" operator="Wave Runner LLC (Guam)" status="Operational" 410 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 420 bands="GSM 1900" brand="Cincinnati Bell" cc="us" country="United States of America" operator="Cincinnati Bell Wireless" status="Operational" + 420 bands="GSM 1900 / UMTS AWS" brand="Cincinnati Bell" cc="us" country="United States of America" operator="Cincinnati Bell Wireless" status="Operational" 430 bands="GSM 1900" cc="us" country="United States of America" operator="Alaska Digitel" status="Operational" 440 bands="GSM 1900" brand="Cellular One" cc="us" country="United States of America" status="" - 450 bands="GSM 850" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" + 450 bands="GSM 850 / GSM 1900" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" 460 bands="GSM 1900" brand="Simmetry" cc="us" country="United States of America" operator="TMP Corporation" status="Operational" 470 bands="CDMA2000 1900" brand="nTelos" cc="us" country="United States of America" operator="NTT Docomo Pacific" status="Operational" 480 bands="" cc="us" country="United States of America" operator="Choice Phone" status="Operational" @@ -832,19 +883,20 @@ 530 bands="" cc="us" country="United States of America" operator="West Virginia Wireless" status="Operational" 540 bands="GSM 1900" brand="Oklahoma Western" cc="us" country="United States of America" operator="Oklahoma Western Telephone Company" status="Operational" 560 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 570 bands="GSM 1900" brand="Cellular One" cc="us" country="United States of America" operator="MTPCS, LLC" status="Operational" + 570 bands="GSM 850" brand="Cellular One" cc="us" country="United States of America" operator="TX-10, LLC and Central Louisiana Cellular, LLC" status="Operational" 580 bands="" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" 59 bands="CDMA" brand="Cellular One" cc="bm" country="Bermuda" status="Operational" 590 bands="GSM 850 / GSM 1900" brand="Alltel" cc="us" country="United States of America" operator="Alltel Communications Inc" status="Operational" + 600 bands="" cc="us" country="United States of America" operator="New Cell Inc. dba Cellcom" status="Inactive" 610 bands="GSM 1900" brand="Epic Touch" cc="us" country="United States of America" operator="Elkhart Telephone Co." status="Operational" 620 bands="GSM 1900" brand="Coleman County Telecom" cc="us" country="United States of America" operator="Coleman County Telecommunications" status="Operational" 630 bands="GSM 1900" brand="AmeriLink PCS" cc="us" country="United States of America" operator="Choice Wireless" status="Operational" - 640 bands="GSM 1900" brand="Airadigm" cc="us" country="United States of America" operator="Airadigm Communications" status="Operational" + 640 bands="GSM 1900" brand="AirFire" cc="us" country="United States of America" operator="Airadigm Communications" status="Not Operational" 650 bands="GSM 850" brand="Jasper" cc="us" country="United States of America" operator="Jasper Wireless, inc" status="Operational" 660 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" 670 bands="" brand="Northstar" cc="us" country="United States of America" status="Operational" 680 bands="GSM 850 / GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 690 bands="GSM 1900" brand="Immix" cc="us" country="United States of America" operator="Immix Wireless" status="Operational" + 690 bands="GSM 1900" brand="Limitless Mobile" cc="us" country="United States of America" operator="Limitless Mobile, LLC" status="Operational" 730 bands="" brand="SeaMobile" cc="us" country="United States of America" status="Operational" 740 bands="" brand="Convey" cc="us" country="United States of America" operator="Convey Communications Inc." status="Operational" 750 bands="CDMA2000 850 / CDMA2000 1900 / LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="Appalachian Wireless" status="Operational" @@ -857,15 +909,15 @@ 840 bands="GSM 1900" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" 850 bands="CDMA2000 850 / CDMA2000 1900 / GSM 850 / GSM 1900" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" 870 bands="GSM 850" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Operational" - 880 bands="GSM 850" brand="Advantage" cc="us" country="United States of America" operator="Advantage Cellular Systems" status="Operational" + 880 bands="GSM 850" brand="DTC Wireless" cc="us" country="United States of America" operator="Advantage Cellular Systems" status="Operational" 890 bands="GSM 850 / GSM 1900" brand="Unicel" cc="us" country="United States of America" operator="Rural Cellular Corporation" status="Operational" 900 bands="CDMA2000 850 / CDMA2000 1900" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Mid-Rivers Communications" status="Operational" 910 bands="GSM 850" brand="First Cellular" cc="us" country="United States of America" operator="First Cellular of Southern Illinois" status="Operational" 940 bands="" cc="us" country="United States of America" operator="Iris Wireless LLC" status="Operational" 950 bands="GSM 850" brand="XIT Wireless" cc="us" country="United States of America" operator="Texas RSA 1 dba XIT Cellular" status="Operational" 960 bands="" brand="Plateau Wireless" cc="us" country="United States of America" status="Operational" - 970 bands="Satellite" brand="Globalstar" cc="us" country="United States of America" status="Operational" - 980 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" + 970 bands="Satellite" brand="Telemedicine Wireless" cc="us" country="United States of America" operator="Telemedicine Wireless (USA) Telecommunications,Inc" status="Operational" + 980 bands="GSM 1900" brand="Akiba Telecommunications, Inc." cc="us" country="United States of America" operator="AT&T (Antarctica, South Pole) Worldwide, Inc." status="Operational" 990 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" 000-999 311 @@ -878,7 +930,7 @@ 050 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Wikes Cellular" status="Operational" 060 bands="GSM 850 / GSM 1900" brand="Farmers Cellular" cc="us" country="United States of America" operator="Farmers Cellular Telephone" status="Operational" 070 bands="GSM 850" brand="Easterbrooke" cc="us" country="United States of America" operator="Easterbrooke Cellular Corporation" status="Operational" - 080 bands="GSM 850" brand="Pine Cellular" cc="us" country="United States of America" operator="Pine Telephone Company" status="Operational" + 080 bands="GSM 850 / LTE" brand="Pine Cellular" cc="us" country="United States of America" operator="Pine Telephone Company" status="Operational" 090 bands="GSM 1900" brand="Long Lines Wireless" cc="us" country="United States of America" operator="Long Lines Wireless LLC" status="Operational" 100 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" 110 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" @@ -891,29 +943,50 @@ 180 bands="GSM 850 / UMTS 850 / UMTS 1900" cc="us" country="United States of America" operator="Cingular Wireless" status="Not operational" 190 bands="" cc="us" country="United States of America" operator="Cellular Properties" status="" 210 bands="GSM 1900 / UMTS 2100" cc="us" country="United States of America" operator="Emery Telcom Wireless" status="Operational" - 220 cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" - 230 bands="" cc="us" country="United States of America" operator="C Spire Wireless" status="Operational" + 220 brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 230 bands="" brand="C Spire Wireless" cc="us" country="United States of America" operator="C Spire Wireless" status="Operational" 250 bands="GSM 1900" brand="i CAN_GSM" cc="gu" country="Guam (United States of America)" operator="Wave Runner LLC" status="Not operational" 330 bands="" brand="Bug Tussel Wireless" cc="us" country="United States of America" operator="Bug Tussel Wireless" status="Operational" + 360 bands="UMTS AWS" cc="us" country="United States of America" operator="Stelera Wireless" status="Not operational" + 370 bands="LTE AWS" brand="GCI Wireless" cc="us" country="United States of America" operator="General Communication Inc." status="Operational" 480 bands="LTE 700 MHz C Block (4G LTE Network)" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 481 cc="us" country="United States of America" 490 bands="TDD-LTE (Band 41)" brand="Sprint Corporation" cc="us" country="United States of America" operator="Sprint" status="Operational" - 580 cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 500 bands="LTE 700 / LTE AWS" cc="us" country="United States of America" operator="Mosaic Telecom" status="Operational" + 530 bands="GSM 1900 / LTE 1900" brand="PTCI" cc="us" country="United States of America" operator="Panhandle Wireless" status="Operational" + 570 bands="UMTS AWS / LTE AWS" cc="us" country="United States of America" operator="BendBroadband" status="Not operational" + 580 brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 650 bands="CDMA / LTE" brand="United Wireless" cc="us" country="United States of America" operator="United Wireless" status="Operational" 660 bands="CDMA2000 1900 / CDMA 2000 LTE/AWS 1700" brand="metroPCS" cc="us" country="United States of America" operator="metroPCS" status="Operational" - 870 bands="" brand="Boost" cc="us" country="United States of America" operator="Boost Mobile" status="Operational" - 960 bands="GSM 1900" brand="Lycamobile" cc="us" country="United States of America" operator="Lyca Technology Solutions" status="Operational" - 970 bands="LTE/AWS 1700" brand="Big River Broadband" cc="us" country="United States of America" operator="Big River Broadband, LLC" status="Operational" + 750 bands="LTE" cc="us" country="United States of America" operator="NetAmerica Alliance" status="Operational" + 810 bands="CDMA / LTE 700" brand="Bluegrass Wireless" cc="us" country="United States of America" operator="Bluegrass Wireless" status="Operational" + 870 bands="MVNO" brand="Boost" cc="us" country="United States of America" operator="Boost Mobile" status="Operational" + 930 bands="LTE 700" cc="us" country="United States of America" operator="Syringa Wireless" status="Operational" + 950 bands="LTE" brand="ETC" cc="us" country="United States of America" operator="Enhanced Telecommmunications Corp. (Sunman Telecom)" status="Operational" + 960 bands="MVNO" brand="Lycamobile" cc="us" country="United States of America" operator="Lyca Technology Solutions" status="Operational" + 970 bands="LTE AWS 1700" brand="Big River Broadband" cc="us" country="United States of America" operator="Big River Broadband, LLC" status="Operational" + 990 bands="LTE 700" cc="us" country="United States of America" operator="VTel Wireless" status="Operational" 000-999 312 + 050 bands="LTE 700" cc="us" country="United States of America" operator="Fuego Wireless" status="Operational" + 070 bands="LTE 700" cc="us" country="United States of America" operator="Adams Networks Inc" status="Operational" + 080 bands="LTE" brand="SyncSouth" cc="us" country="United States of America" operator="South Georgia Regional Information Technology Authority" status="Operational" + 220 bands="LTE 700" cc="us" country="United States of America" operator="Chariton Valley Telephone" status="Operational" + 330 bands="LTE 700" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular" status="Operational" + 350 bands="LTE" cc="us" country="United States of America" operator="Triangle Communications" status="Operational" + 370 bands="LTE" cc="us" country="United States of America" operator="Choice Wireless" status="Operational" + 420 bands="LTE 700" cc="us" country="United States of America" operator="Nex-Tech Wireless" status="Operational" + 530 bands="" cc="us" country="United States of America" operator="Sprint Spectrum" status="Operational" 590 bands="Band 7 FDD LTE 2600 MHz" brand="NMU" cc="us" country="United States of America" operator="Northern Michigan University" status="Operational" + 610 bands="" cc="us" country="United States of America" operator="nTelos" status="" 000-999 313 - 100 bands="700 MHz Public Safety Broadband" brand="700 MHz Public Safety Broadband" cc="us" country="United States of America" status="" + 100 bands="LTE" brand="FirstNet" cc="us" country="United States of America" operator="700 MHz Public Safety Broadband" status="" 101 cc="us" country="United States of America" 000-999 316 - 010 bands="iDEN 800" brand="Nextel" cc="us" country="United States of America" operator="Nextel Communications" status="Not Operational" - 011 bands="iDEN 800" cc="us" country="United States of America" operator="Southern Communications Services" status="Operational" + 010 bands="iDEN 800" brand="Nextel" cc="us" country="United States of America" operator="Nextel Communications" status="Not operational" + 011 bands="iDEN 800" brand="Southern LINC" cc="us" country="United States of America" operator="Southern Communications Services" status="Operational" 000-999 330 00 bands="PCS 1900" brand="Open Mobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" @@ -924,7 +997,7 @@ 001 bands="" cc="mx" country="Mexico" operator="Comunicaciones Digitales Del Norte, S.A. de C.V." status="" 010 bands="iDEN 800" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" 020 bands="TDMA 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="Telcel" cc="mx" country="Mexico" operator="América Móvil" status="Operational" - 030 bands="CDMA2000 800 / CDMA2000 1900 / GSM 1900 / UMTS 850" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles" status="Operational" + 030 bands="CDMA2000 800 / CDMA2000 1900 / GSM 1900 / UMTS 850 / LTE 1900" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles" status="Operational" 040 bands="CDMA2000 800 / CDMA2000 1900" brand="Iusacell / Unefon" cc="mx" country="Mexico" operator="Iusacell / Unefon" status="Operational" 050 bands="GSM 850 / GSM 1900" brand="Iusacell" cc="mx" country="Mexico" operator="Iusacell" status="Operational" 060 bands="" cc="mx" country="Mexico" operator="Servicios de Acceso Inalambrico, S.A. de C.V." status="" @@ -934,9 +1007,10 @@ 090 bands="UMTS 1700" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" 000-999 338 - 020 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not Operational" + 020 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not operational" 050 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="tc" country="Turks and Caicos Islands" operator="Digicel (Turks & Caicos) Limited" status="Operational" - 110 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="" + 070 bands="GSM / UMTS / CDMA" brand="Claro" cc="jm" country="Jamaica" operator="Oceanic Digital Jamaica Limited" status="Not operational" + 110 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" 180 bands="GSM 850 / GSM 1900 / UMTS 850" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" 000-999 340 @@ -1008,7 +1082,7 @@ 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Digicel Aruba" status="Operational" 00-99 364 - 39 bands="GSM 850 / GSM 1900 / UMTS 850" brand="BaTelCo" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd" status="Operational" + 39 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="BTC" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd (BaTelCo)" status="Operational" 00-99 365 010 bands="" cc="ai" country="Anguilla" operator="Weblinks Limited" status="Operational" @@ -1022,10 +1096,11 @@ 01 bands="GSM 900 / GSM 850" brand="CUBACEL" cc="cu" country="Cuba" operator="Empresa de Telecomunicaciones de Cuba, SA" status="Operational" 00-99 370 - 01 bands="GSM 900 / GSM 1800 / 1900 / UMTS 900 / LTE 1800" brand="Orange" cc="do" country="Dominican Republic" operator="Orange Dominicana" status="Operational" - 02 bands="CDMA 1900 / GSM 850 / GSM 1900 / UMTS 850" brand="Claro" cc="do" country="Dominican Republic" operator="Compañía Dominicana de Teléfonos, C por" status="Operational" - 03 bands="AMPS / IS-95A 800 / CDMA 1900 / LTE 1900" brand="Tricom" cc="do" country="Dominican Republic" operator="Tricom S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / GSM 1900 / UMTS 900 / LTE 1800" brand="Orange" cc="do" country="Dominican Republic" operator="Orange Dominicana" status="Operational" + 02 bands="CDMA 1900 / GSM 850 / GSM 1900 / UMTS 850 / LTE AWS" brand="Claro" cc="do" country="Dominican Republic" operator="Compañía Dominicana de Teléfonos" status="Operational" + 03 bands="AMPS / IS-95A 800 / CDMA 1900 / LTE 1900" brand="Tricom" cc="do" country="Dominican Republic" operator="Tricom, S.A" status="Operational" 04 bands="CDMA 1900 / GSM 1900" brand="Viva" cc="do" country="Dominican Republic" operator="Trilogy Dominicana, S.A." status="Operational" + 05 bands="LTE-TDD 2600" brand="Wind" cc="do" country="Dominican Republic" operator="WIND Telecom, S.A" status="Operational" 00-99 372 01 bands="GSM 850" brand="Voila" cc="ht" country="Haiti" operator="Communication Cellulaire d'Haiti S.A." status="Operational" @@ -1035,23 +1110,26 @@ 374 12 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="bmobile" cc="tt" country="Trinidad and Tobago" operator="TSTT" status="Operational" 130 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="Digicel" cc="tt" country="Trinidad and Tobago" operator="Digicel (Trinidad & Tobago) Limited" status="Operational" + 140 bands="CDMA" cc="tt" country="Trinidad and Tobago" operator="LaqTel Ltd." status="Not operational" 00-99 376 350 bands="GSM 850" brand="C&W" cc="tc" country="Turks and Caicos Islands" operator="Cable & Wireless West Indies Ltd (Turks & Caicos)" status="Operational" - 352 bands="UMTS 850" brand="Islandcom" cc="tc" country="Turks and Caicos Islands" operator="Islandcom Telecommunications" status="Operational" + 352 bands="UMTS 850" brand="IslandCom" cc="tc" country="Turks and Caicos Islands" operator="IslandCom Telecommunications" status="Operational" + 360 bands="" brand="IslandCom" cc="tc" country="Turks and Caicos Islands" operator="IslandCom Telecommunications" status="" 000-999 400 01 bands="GSM 900 / GSM 1800/ UMTS 2100 / LTE 1800" brand="Azercell" cc="az" country="Azerbaijan" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Bakcell" cc="az" country="Azerbaijan" status="Operational" 03 bands="CDMA" brand="FONEX" cc="az" country="Azerbaijan" operator="CATEL" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Nar Mobile" cc="az" country="Azerbaijan" operator="Azerfon" status="Operational" + 05 bands="TETRA?" cc="az" country="Azerbaijan" operator="Special State Protection Service of the Republic of Azerbaijan" status="" 00-99 401 01 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kz" country="Kazakhstan" operator="KaR-Tel LLP" status="Operational" 02 bands="GSM 900 / GSM 1800" brand="Kcell" cc="kz" country="Kazakhstan" operator="Kcell JSC" status="Operational" - 07 bands="CDMA2000 800" brand="Dalacom" cc="kz" country="Kazakhstan" operator="Altel" status="Operational" + 07 bands="UMTS 850 / GSM 1800 / LTE 1800" brand="Altel" cc="kz" country="Kazakhstan" operator="Altel" status="Operational" 08 bands="CDMA2000 800 / CDMA2000 450" brand="Kazakhtelecom" cc="kz" country="Kazakhstan" status="Operational" - 77 bands="GSM 900 / GSM 1800" brand="Tele2.kz" cc="kz" country="Kazakhstan" operator="MTS" status="Operational" + 77 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Tele2.kz" cc="kz" country="Kazakhstan" operator="MTS" status="Operational" 00-99 402 11 bands="GSM 900 / UMTS 850 / UMTS 2100 / LTE 1800" brand="B-Mobile" cc="bt" country="Bhutan" operator="B-Mobile / Bhutan Telecom Ltd." status="Operational" @@ -1276,14 +1354,15 @@ 410 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobilink" cc="pk" country="Pakistan" operator="Mobilink-PMCL" status="Operational" 02 bands="CDMA2000 1900" brand="PTCL" cc="pk" country="Pakistan" operator="PTCL" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Ufone" cc="pk" country="Pakistan" operator="Pakistan Telecommunication Mobile Ltd" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="Zong" cc="pk" country="Pakistan" operator="China Mobile" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ufone" cc="pk" country="Pakistan" operator="Pakistan Telecommunication Mobile Ltd" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Zong" cc="pk" country="Pakistan" operator="China Mobile" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="SCO Mobile" cc="pk" country="Pakistan" operator="SCO Mobile Ltd" status="Operational" - 06 bands="GSM 900 / GSM 1800" brand="Telenor" cc="pk" country="Pakistan" operator="Telenor Pakistan" status="Operational" - 07 bands="GSM 900 / GSM 1800" brand="Warid Pakistan" cc="pk" country="Pakistan" operator="WaridTel" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="pk" country="Pakistan" operator="Telenor Pakistan" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Warid Pakistan" cc="pk" country="Pakistan" operator="WaridTel" status="Operational" + 08 bands="GSM 900 / GSM 1800" brand="SCO Mobile" cc="pk" country="Pakistan" operator="SCO Mobile Ltd" status="Operational" 00-99 412 - 01 bands="GSM 900 / GSM 1800" brand="AWCC" cc="af" country="Afghanistan" operator="Afghan Wireless Communication Company" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="AWCC" cc="af" country="Afghanistan" operator="Afghan Wireless Communication Company" status="Operational" 20 bands="GSM 900 / UMTS" brand="Roshan" cc="af" country="Afghanistan" operator="Telecom Development Company Afghanistan Ltd." status="Operational" 40 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="af" country="Afghanistan" operator="MTN Group Afghanistan" status="Operational" 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="af" country="Afghanistan" operator="Etisalat Afghanistan" status="Operational" @@ -1299,14 +1378,14 @@ 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Hutch" cc="lk" country="Sri Lanka" operator="Hutchison Telecommunications Lanka (Pvt) Ltd" status="Operational" 00-99 414 - 01 bands="GSM 900" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Post and Telecommunication" status="Operational" + 01 bands="GSM 900 / UMTS 2100" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Post and Telecommunication" status="Operational" 05 bands="UMTS 900 / UMTS 2100" brand="Ooredoo" cc="mm" country="Myanmar" operator="Ooredoo Myanmar" status="Operational" - 06 bands="GSM 900" brand="Telenor Myanmar" cc="mm" country="Myanmar" operator="Telenor Myanmar" status="Test" + 06 bands="GSM 900 / UMTS 2100" brand="Telenor Myanmar" cc="mm" country="Myanmar" operator="Telenor Myanmar (Comcel Myanmar)" status="Operational" 00-99 415 - 01 bands="GSM 900 2G 3G 4G" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" - 03 bands="GSM 900 2G 3G 4G" brand="mtc touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" - 05 bands="GSM 900" brand="Ogero Mobile" cc="lb" country="Lebanon" operator="Ogero Telecom" status="Planned" + 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" + 03 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="mtc touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" + 05 bands="GSM 900" brand="Ogero Mobile" cc="lb" country="Lebanon" operator="Ogero Telecom" status="Operational" 00-99 416 01 bands="GSM 900" brand="zain JO" cc="jo" country="Jordan" operator="Jordan Mobile Telephone Services" status="Operational" @@ -1317,6 +1396,7 @@ 417 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Syriatel" cc="sy" country="Syria" operator="Syriatel Mobile Telecom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="sy" country="Syria" operator="MTN Syria" status="Operational" + 09 bands="" cc="sy" country="Syria" operator="Syrian Telecom" status="" 00-99 418 05 bands="GSM 900" brand="Asia Cell" cc="iq" country="Iraq" operator="Asia Cell Telecommunications Company" status="Operational" @@ -1329,15 +1409,16 @@ 92 bands="CDMA" brand="Omnnea" cc="iq" country="Iraq" operator="Omnnea Wireless" status="Operational" 00-99 419 - 02 bands="GSM 900 / UMTS 2100" brand="zain KW" cc="kw" country="Kuwait" operator="Zain Kuwait" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Wataniya" cc="kw" country="Kuwait" operator="National Mobile Telecommunications" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Viva" cc="kw" country="Kuwait" operator="Kuwait Telecommunication Company" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="zain KW" cc="kw" country="Kuwait" operator="Zain Kuwait" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="K.S.C Ooredoo" cc="kw" country="Kuwait" operator="National Mobile Telecommunications" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Viva" cc="kw" country="Kuwait" operator="Kuwait Telecommunication Company" status="Operational" 00-99 420 - 01 bands="GSM 900 / UMTS 2100 / LTE 2300" brand="Al Jawal (STC )" cc="sa" country="Saudi Arabia" operator="Saudi Telecom Company" status="Operational" - 03 bands="GSM 900 / UMTS 2100 / LTE 2600" brand="Mobily" cc="sa" country="Saudi Arabia" operator="Etihad Etisalat Company" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800/ LTE 2600" brand="Zain SA" cc="sa" country="Saudi Arabia" operator="Zain Saudi Arabia" status="Operational" - 21 bands="RGSM 900" brand="RGSM" cc="sa" country="Saudi Arabia" operator="Saudi Railways GSM" status="Operational" + 01 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 2300" brand="Al Jawal (STC )" cc="sa" country="Saudi Arabia" operator="Saudi Telecom Company" status="Operational" + 03 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 2600" brand="Mobily" cc="sa" country="Saudi Arabia" operator="Etihad Etisalat Company" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800/ LTE 2600" brand="Zain SA" cc="sa" country="Saudi Arabia" operator="Zain Saudi Arabia" status="Operational" + 05 bands="MVNO" brand="Virgin Mobile" cc="sa" country="Saudi Arabia" operator="Virgin Mobile Saudi Arabia" status="Operational" + 21 bands="GSM-R 900" brand="RGSM" cc="sa" country="Saudi Arabia" operator="Saudi Railways GSM" status="Operational" 00-99 421 01 bands="GSM 900" brand="SabaFon" cc="ye" country="Yemen" status="Operational" @@ -1346,8 +1427,8 @@ 04 bands="GSM 900" brand="HiTS-UNITEL" cc="ye" country="Yemen" operator="Y" status="Operational" 00-99 422 - 02 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Oman Mobile" cc="om" country="Oman" operator="Oman Mobile Telecommunications Company" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Nawras" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Nawras" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" 04 bands="" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="" 00-99 424 @@ -1355,25 +1436,28 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="du" cc="ae" country="United Arab Emirates" operator="Emirates Integrated Telecommunications Company" status="Operational" 00-99 425 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="il" country="Israel" operator="Partner Communications Company Ltd" status="Operational" - 02 bands="GSM 1800 / UMTS 850 / UMTS 2100" brand="Cellcom" cc="il" country="Israel" operator="Cellcom Israel Ltd" status="Operational" - 03 bands="CDMA 800 / UMTS 850 / UMTS 2100" brand="Pelephone" cc="il" country="Israel" operator="Pelephone Communications Ltd." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Orange" cc="il" country="Israel" operator="Partner Communications Company Ltd." status="Operational" + 02 bands="GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Cellcom" cc="il" country="Israel" operator="Cellcom Israel Ltd." status="Operational" + 03 bands="CDMA 800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Pelephone" cc="il" country="Israel" operator="Pelephone Communications Ltd." status="Operational" 04 bands="" cc="il" country="Israel" operator="Globalsim Ltd" status="" - 05 bands="GSM 900" brand="Jawwal" cc="ps" country="Palestine, State of" operator="Palestine Cellular Communications, Ltd." status="Operational" - 06 bands="GSM 900 / GSM 1800" brand="Wataniya" cc="ps" country="Palestine, State of" operator="Wataniya Palestine Mobile Telecommunications Company" status="Operational" - 07 bands="iDEN 800 / UMTS 2100" brand="Hot Mobile" cc="il" country="Israel" operator="Hot Mobile Ltd" status="Operational" - 08 bands="UMTS 2100" brand="Golan Telecom" cc="il" country="Israel" operator="Golan Telecom Ltd" status="Operational" + 05 bands="GSM 900" brand="Jawwal" cc="ps" country="Palestine" operator="Palestine Cellular Communications, Ltd." status="Operational" + 06 bands="GSM 900 / GSM 1800" brand="Wataniya" cc="ps" country="Palestine" operator="Wataniya Palestine Mobile Telecommunications Company" status="Operational" + 07 bands="iDEN 800 / UMTS 2100" brand="Hot Mobile" cc="il" country="Israel" operator="Hot Mobile Ltd. (Former Mirs Communications)" status="Operational" + 08 bands="UMTS 2100 / LTE 1800" brand="Golan Telecom" cc="il" country="Israel" operator="Golan Telecom Ltd" status="Operational" 11 bands="MVNO" cc="il" country="Israel" operator="365 Telecom" status="" 12 bands="MVNO" cc="il" country="Israel" operator="Free Telecom" status="" 13 bands="" cc="il" country="Israel" operator="Ituran Cellular Communications" status="" 14 bands="MVNO" brand="Youphone" cc="il" country="Israel" operator="Alon Cellular Ltd." status="Operational" 15 bands="MVNO" brand="Home Cellular" cc="il" country="Israel" operator="Home Cellular" status="Operational" - 16 bands="MVNO" brand="Rami Levy" cc="il" country="Israel" operator="Rami Levy" status="Operational" - 17 bands="MVNO" cc="il" country="Israel" operator="Gale Phone" status="" + 16 bands="MVNO" brand="Rami Levy" cc="il" country="Israel" operator="Rami Levy Communications Ltd." status="Operational" + 17 bands="MVNO" brand="Sipme" cc="il" country="Israel" operator="Gale Phone" status="" 18 bands="MVNO" brand="Cellact Communications" cc="il" country="Israel" operator="Cellact Communications Ltd." status="Operational" - 19 bands="" cc="il" country="Israel" operator="Azi Communications Ltd." status="" - 20 bands="" cc="il" country="Israel" operator="Bezeq Ltd" status="" - 21 bands="" cc="il" country="Israel" operator="B.I.P. Communications Ltd." status="" + 19 bands="MVNO" brand="Telzar 019" cc="il" country="Israel" operator="Azi Communications Ltd." status="Operational" + 20 bands="" brand="Bezeq" cc="il" country="Israel" operator="Bezeq The Israeli Telecommunication Corp Ltd." status="" + 21 bands="" brand="Bezeq International" cc="il" country="Israel" operator="B.I.P. Communications Ltd." status="" + 23 bands="" cc="il" country="Israel" operator="Beezz Communication Solutions Ltd." status="" + 24 bands="MVNO" brand="012 Telecom" cc="il" country="Israel" operator="Partner Communications Company Ltd." status="Operational" + 25 bands="LTE" brand="IMOD" cc="il" country="Israel" operator="Israel Ministry of Defense" status="Not operational" 00-99 426 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Batelco" cc="bh" country="Bahrain" operator="Bahrain Telecommunications Company" status="Operational" @@ -1384,7 +1468,7 @@ 00-99 427 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="ooredoo" cc="qa" country="Qatar" operator="ooredoo" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="qa" country="Qatar" operator="Vodafone Qatar" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vodafone" cc="qa" country="Qatar" operator="Vodafone Qatar" status="Operational" 05 bands="TETRA 380" brand="Ministry of Interior" cc="qa" country="Qatar" operator="Ministry of Interior" status="Operational" 06 bands="LTE" brand="Ministry of Interior" cc="qa" country="Qatar" operator="Ministry of Interior" status="Operational" 00-99 @@ -1395,29 +1479,30 @@ 99 bands="GSM 900 / UMTS 2100" brand="Mobicom" cc="mn" country="Mongolia" operator="Mobicom Corporation" status="Operational" 00-99 429 - 01 bands="GSM 900 / GSM 1800" brand="Namaste / NT Mobile" cc="np" country="Nepal" operator="Nepal Telecom" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Ncell" cc="np" country="Nepal" operator="Ncell Pvt. Ltd.Spice Nepal" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Namaste / NT Mobile" cc="np" country="Nepal" operator="Nepal Telecom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ncell" cc="np" country="Nepal" operator="Ncell Pvt. Ltd." status="Operational" 03 bands="CDMA2000 800" brand="Sky/C-Phone" cc="np" country="Nepal" operator="Nepal Telecom" status="Operational" 04 bands="GSM 900" brand="SmartCell" cc="np" country="Nepal" operator="Smart Telecom Pvt. Ltd." status="Operational" 00-99 432 - 11 bands="GSM 900 / GSM 1800" brand="IR-MCI (Hamrahe Avval)" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS" brand="IR-MCI (Hamrahe Avval)" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" 14 bands="GSM 900" brand="TKC" cc="ir" country="Iran" operator="Telecommunication Kish Company" status="Operational" 19 bands="GSM 900" brand="MTCE (Espadan)" cc="ir" country="Iran" operator="Mobile Telecommunications Company of Esfahan" status="Operational" 20 bands="UMTS" brand="Rightel" cc="ir" country="Iran" status="Operational" 32 bands="GSM 900 / GSM 1800" brand="Taliya" cc="ir" country="Iran" operator="Rafsanjan Industrial Complex" status="Operational" - 35 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" + 35 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" 70 bands="GSM 900 / GSM 1800" brand="TCI" cc="ir" country="Iran" operator="Telephone Communications Company of Iran" status="Operational" 93 bands="GSM 1800" brand="Iraphone" cc="ir" country="Iran" operator="Iraphone" status="Operational" 00-99 434 01 bands="GSM 900 / GSM 1800" cc="uz" country="Uzbekistan" operator="Buztel" status="Not operational" 02 bands="GSM 900 / GSM 1800" cc="uz" country="Uzbekistan" operator="Uzmacom" status="Not operational" - 03 bands="CDMA2000 450 EVDO Rev A" brand="UzMobile" cc="uz" country="Uzbekistan" operator="Uzbektelekom" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="Beeline" cc="uz" country="Uzbekistan" operator="Unitel LLC" status="Operational" - 05 bands="GSM 900 / GSM 1800" brand="Ucell" cc="uz" country="Uzbekistan" operator="Coscom" status="Operational" + 03 bands="CDMA2000 450" brand="UzMobile" cc="uz" country="Uzbekistan" operator="Uzbektelekom" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Beeline" cc="uz" country="Uzbekistan" operator="Unitel LLC" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Ucell" cc="uz" country="Uzbekistan" operator="Coscom" status="Operational" 06 bands="CDMA2000 800" brand="Perfectum Mobile" cc="uz" country="Uzbekistan" operator="RUBICON WIRELESS COMMUNICATION" status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS" cc="uz" country="Uzbekistan" operator="Uzdunrobita" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="UMS" cc="uz" country="Uzbekistan" operator="Universal Mobile Systems" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="UzMobile" cc="uz" country="Uzbekistan" operator="Uzbektelekom" status="Operational" 00-99 436 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="JV Somoncom" status="Operational" @@ -1435,10 +1520,10 @@ 00-99 438 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS (BARASH Communication)" cc="tm" country="Turkmenistan" operator="ES "MTS-Turkmenistan"" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TM-Cell" cc="tm" country="Turkmenistan" operator="Altyn Asyr" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="TM-Cell" cc="tm" country="Turkmenistan" operator="Altyn Asyr" status="Operational" 00-99 440 - 00 bands="UMTS 1700" brand="eMobile" cc="jp" country="Japan" operator="EMOBILE Limited" status="Operational" + 00 bands="UMTS 1700" brand="Y!Mobile" cc="jp" country="Japan" operator="EMOBILE Limited" status="Operational" 01 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" 02 bands="UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT DoCoMo - Kansai" status="Operational" 03 bands="UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT DoCoMo - Hokuriku" status="Operational" @@ -1539,20 +1624,20 @@ 02 bands="CDMA2000 1700" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" 03 bands="CDMA2000 800" brand="Power 017" cc="kr" country="South Korea" operator="Shinsegi Telecom, Inc." status="Discontinued" 04 bands="CDMA2000 1700" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" - 05 bands="CDMA2000 800 / UMTS 2100 / LTE 850 / LTE 1800" brand="SKTelecom" cc="kr" country="South Korea" operator="SK Telecom" status="Operational" + 05 bands="CDMA2000 800 / UMTS 2100 / LTE 850 1800 2100" brand="SKTelecom" cc="kr" country="South Korea" operator="SK Telecom" status="Operational" 06 bands="CDMA2000 1700 / LTE 850 2100 2600" brand="LG U+" cc="kr" country="South Korea" operator="LG Telecom" status="Operational" - 08 bands="UMTS 2100 / LTE 900 / LTE 1800" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" - 11 bands="UMTS 2100" brand="SKTelecom" cc="kr" country="South Korea" operator="Korea Cable Telecom(t-plus), Eco-mobile" status="Operational" + 08 bands="UMTS 2100 / LTE 900 1800 2100" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" + 11 bands="MVNO of SKTelecom" cc="kr" country="South Korea" operator="Korea Cable Telecom" status="Operational" 00-99 452 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MobiFone" cc="vn" country="Vietnam" operator="Vietnam Mobile Telecom Services Company (VMS)" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MobiFone" cc="vn" country="Vietnam" operator="Vietnam Mobile Telecom Services Company" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vinaphone" cc="vn" country="Vietnam" operator="Vietnam Telecom Services Company" status="Operational" - 03 bands="CDMA2000 800" brand="S-Fone" cc="vn" country="Vietnam" operator="S-Telecom" status="Operational" + 03 bands="CDMA2000 800" brand="S-Fone" cc="vn" country="Vietnam" operator="S-Telecom" status="Not operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Viettel Mobile" cc="vn" country="Vietnam" operator="Viettel Telecom" status="Operational" - 05 bands="GSM 900 / UMTS 1900 / UMTS 2100" brand="Vietnamobile (HT Mobile )" cc="vn" country="Vietnam" operator="Hanoi Telecom" status="Operational" - 06 bands="CDMA2000 450" brand="EVNTelecom" cc="vn" country="Vietnam" operator="EVNTelecom - EVN" status="Operational" - 07 bands="GSM 1800" brand="G-Mobile" cc="vn" country="Vietnam" operator="GTEL Mobile JSC" status="Operational" - 08 bands="UMTS 2100" brand="3G EVNTelecom" cc="vn" country="Vietnam" operator="EVNTelecom - EVN" status="Operational" + 05 bands="GSM 900 / UMTS 2100" brand="Vietnamobile" cc="vn" country="Vietnam" operator="Hanoi Telecom" status="Operational" + 06 bands="CDMA2000 450" brand="EVNTelecom" cc="vn" country="Vietnam" operator="EVN Telecom" status="Not operational" + 07 bands="GSM 1800" brand="Gmobile" cc="vn" country="Vietnam" operator="GTEL Mobile JSC" status="Operational" + 08 bands="UMTS 2100" brand="EVNTelecom" cc="vn" country="Vietnam" operator="EVN Telecom" status="Not operational" 00-99 454 00 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="1O1O / One2Free / New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" @@ -1561,7 +1646,7 @@ 03 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="3 (2G)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 05 bands="CDMA 800" brand="3 (CDMA)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Not operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2600" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" 07 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" 08 bands="" brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" 09 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="China Motion Telecom" status="Operational" @@ -1589,12 +1674,12 @@ 00-99 456 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" 03 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" 04 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Smart" cc="kh" country="Cambodia" operator="Latelz Company Limited" status="Operational" - 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Metfone" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Metfone" cc="kh" country="Cambodia" operator="Viettel" status="Operational" 09 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kh" country="Cambodia" operator="Sotelco Ltd." status="Operational" 11 bands="CDMA2000" brand="Excell" cc="kh" country="Cambodia" status="Operational" 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" @@ -1603,29 +1688,29 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 2100 /LTE 4G/" brand="LTC" cc="la" country="Laos" operator="LaoTelecom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="ETL" cc="la" country="Laos" operator="Enterprise of Telecommunications Lao" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Unitel" cc="la" country="Laos" operator="Star Telecom Co., Ltd" status="Operational" - 08 bands="GSM 900 / GSM 1800 /LTE 4G" brand="Beeline" cc="la" country="Laos" operator="VimpelCom Lao Ltd" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 4G" brand="Beeline" cc="la" country="Laos" operator="VimpelCom Lao Ltd" status="Operational" 00-99 460 00 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Operational" 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / TD-LTE 2300 / TD-LTE 2600 / FDD-LTE 1800" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Operational" 02 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" - 03 bands="CDMA2000 800 / CDMA2000 2100 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" + 03 bands="CDMA2000 800 / FDD-LTE 1800 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" 04 bands="" cc="cn" country="China" operator="Global Star Satellite" status="" - 05 bands="CDMA2000 800 / CDMA2000 2100 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" + 05 bands="CDMA2000 800 / FDD-LTE 1800 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Not operational" 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" 20 bands="GSM-R" brand="China Tietong" cc="cn" country="China" operator="China Tietong" status="Operational" 00-99 466 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" - 05 bands="CDMA2000 800" brand="APTG" cc="tw" country="Taiwan" operator="Asia Pacific Telecom" status="Operational" - 06 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" + 05 bands="CDMA2000 800 / LTE 700" brand="APTG" cc="tw" country="Taiwan" operator="Asia Pacific Telecom" status="Operational" + 06 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" 11 bands="Refer to 466-92 Chunghwa Telecom" brand="Chunghwa LDM" cc="tw" country="Taiwan" operator="LDTA/Chunghwa Telecom" status="Operational" - 88 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="operational" + 88 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" 89 bands="UMTS 2100" brand="VIBO" cc="tw" country="Taiwan" operator="VIBO Telecom" status="Operational" - 92 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Chungwa" cc="tw" country="Taiwan" operator="Chunghwa Telecom" status="Operational" + 92 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Chunghwa" cc="tw" country="Taiwan" operator="Chunghwa Telecom" status="Operational" 93 bands="GSM 900" brand="MobiTai" cc="tw" country="Taiwan" operator="Mobitai Communications" status="Not operational" - 97 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Taiwan Mobile" cc="tw" country="Taiwan" operator="Taiwan Mobile Co. Ltd" status="Operational" + 97 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700" brand="Taiwan Mobile" cc="tw" country="Taiwan" operator="Taiwan Mobile Co. Ltd" status="Operational" 99 bands="GSM 900" brand="TransAsia" cc="tw" country="Taiwan" operator="TransAsia Telecoms" status="Not operational" 00-99 467 @@ -1635,10 +1720,9 @@ 470 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Grameenphone" cc="bd" country="Bangladesh" operator="GrameenPhone Ltd" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Robi" cc="bd" country="Bangladesh" operator="Axiata Bangladesh Ltd." status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Banglalink" cc="bd" country="Bangladesh" operator="Orascom Telecom Holding" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Banglalink" cc="bd" country="Bangladesh" operator="Banglalink Digital Communications Ltd" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TeleTalk" cc="bd" country="Bangladesh" operator="Teletalk Bangladesh Limited" status="Operational" - 05 bands="CDMA 800" brand="Citycell" cc="bd" country="Bangladesh" operator="Pacific Bangladesh Telecom Limited" status="Operational" - 06 bands="GSM 900 / GSM 1800" brand="Beeong3G Warid Telekom" cc="bd" country="Bangladesh" operator="Beeong Ltd" status="Reserved" + 05 bands="CDMA 800 / GSM 900 / GSM 1800" brand="Citycell" cc="bd" country="Bangladesh" operator="Pacific Bangladesh Telecom Limited" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="bd" country="Bangladesh" operator="Bharti airtel Bangladesh Ltd." status="Operational" 00-99 472 @@ -1646,25 +1730,29 @@ 02 bands="GSM 900 / UMTS 2100 / LTE 2600" brand="Ooredoo" cc="mv" country="Maldives" operator="Wataniya Telecom Maldives" status="Operational" 00-99 502 - 01 bands="CDMA2000 450 (depreciated)011-(6digits)" brand="ATUR 450" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" + 01 bands="CDMA2000 450" brand="ATUR 450" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" 10 cc="my" country="Malaysia" operator="DiGi Telecommunications" - 11 brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" - 12 bands="MVNO" brand="Kartu As" cc="my" country="Malaysia" operator="Telin Malaysia Sdn Bhd" status="Operational" - 13 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" + 11 bands="CDMA2000 850" brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" + 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Maxis" cc="my" country="Malaysia" operator="Maxis Mobile Services SDN Berhad" status="Operational" + 13 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" 14 cc="my" country="Malaysia" operator="Telekom Malaysia Berhad for PSTN SMS" 150 bands="MVNO" brand="Tune Talk" cc="my" country="Malaysia" operator="Tune Talk Sdn Bhd" status="Operational" 151 bands="MVNO" cc="my" country="Malaysia" operator="Baraka Telecom Sdn Bhd (MVNE)" status="Operational" 152 bands="WiMAX 2.3 GHz / LTE 4G" brand="Yes" cc="my" country="Malaysia" operator="YTL Communications Sdn Bhd" status="Operational" + 153 bands="WiMAX 2.3 GHz" cc="my" country="Malaysia" operator="Packet One Networks Sdn Bhd" status="Operational" + 154 bands="" cc="my" country="Malaysia" operator="Talk Focus Sdn Bhd" status="" + 155 bands="" cc="my" country="Malaysia" operator="Clixster Mobile Sdn Bhd" status="" 156 bands="LTE 4G / MVNO" brand="Altel" cc="my" country="Malaysia" operator="Altel Communications Sdn Bhd" status="Operational" - 16 bands="GSM 1800 / UMTS 2100" brand="DiGi" cc="my" country="Malaysia" operator="DiGi Telecommunications" status="Operational" - 17 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Hotlink" cc="my" country="Malaysia" operator="Maxis Prepaid" status="Operational" - 18 bands="CDMA 850" brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" - 19 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" + 157 bands="" cc="my" country="Malaysia" operator="Telekomunikasi Indonesia International (M) Sdn Bhd" status="" + 16 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="DiGi" cc="my" country="Malaysia" operator="DiGi Telecommunications" status="Operational" + 17 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Hotlink" cc="my" country="Malaysia" operator="Maxis Prepaid" status="Operational" + 18 bands="UMTS 2100" brand="U Mobile" cc="my" country="Malaysia" operator="U Mobile Sdn Bhd" status="Operational" + 19 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" 20 bands="CDMA" cc="my" country="Malaysia" operator="Electcoms Wireless Sdn Bhd" status="Operational" 00-99 505 - 01 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE-TDD 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / LTE-TDD 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 04 bands="" cc="au" country="Australia" operator="Department of Defence" status="Operational" 05 brand="Ozitel" cc="au" country="Australia" status="Not operational" @@ -1679,7 +1767,7 @@ 14 bands="GSM 1800 / UMTS 2100" brand="AAPT" cc="au" country="Australia" operator="Telecom New Zealand" status="Operational" 15 brand="3GIS" cc="au" country="Australia" status="Not operational" 16 bands="GSM 1800" brand="VicTrack" cc="au" country="Australia" operator="Victorian Rail Track" status="Reserved" - 17 bands="" cc="au" country="Australia" operator="Vidid Wireless Pty. Ltd." status="" + 17 bands="" cc="au" country="Australia" operator="Vivid Wireless Pty. Ltd." status="" 18 brand="Pactel" cc="au" country="Australia" operator="Pactel International Pty Ltd" status="Reserved" 19 bands="MVNO" brand="Lycamobile" cc="au" country="Australia" operator="Lycamobile Pty Ltd" status="Operational" 20 bands="" cc="au" country="Australia" operator="Ausgrid Corporation" status="" @@ -1693,6 +1781,7 @@ 28 bands="" cc="au" country="Australia" operator="RCOM International Pty Ltd" status="" 30 bands="" cc="au" country="Australia" operator="Compatel Limited" status="" 31 bands="" cc="au" country="Australia" operator="BHP Billiton" status="" + 32 bands="" cc="au" country="Australia" operator="Thales Australia" status="" 38 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Crazy John's" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 62 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" 68 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" @@ -1704,17 +1793,18 @@ 00-99 510 00 bands="Satellite" brand="PSN" cc="id" country="Indonesia" operator="PT Pasifik Satelit Nusantara (ACeS)" status="Operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="INDOSAT" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE FDD 900" brand="INDOSAT" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" 03 bands="CDMA 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Operational" 07 bands="CDMA 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Operational" 08 bands="GSM 1800 / UMTS 2100" brand="AXIS" cc="id" country="Indonesia" operator="PT Natrindo Telepon Seluler" status="Operational" - 09 bands="CDMA 1900 / 800" brand="SMARTFREN" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" - 11 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" + 09 bands="CDMA 1900 / 800 / LTE TDD 2300" brand="SMARTFREN" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE FDD 900" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE FDD 1800" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" 20 bands="GSM 1800" brand="TELKOMMobile" cc="id" country="Indonesia" operator="PT Telkom Indonesia Tbk" status="Not operational" 21 bands="GSM 1800" brand="IM3" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Not operational" 27 bands="CDMA 450" brand="Ceria" cc="id" country="Indonesia" operator="PT Sampoerna Telekomunikasi Indonesia" status="Operational" 28 bands="CDMA 800" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" + 88 bands="LTE TDD 2300" brand="BOLT! Super 4G" cc="id" country="Indonesia" operator="PT Internux" status="Operational" 89 bands="GSM 1800 / UMTS 2100" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" 995 brand="Komselindo" cc="id" country="Indonesia" operator="Komselindo STKB-C" @@ -1727,9 +1817,9 @@ 00-99 515 01 bands="GSM 900" brand="Islacom" cc="ph" country="Philippines" operator="Globe Telecom via Innove Communications" status="Not operational" - 02 bands="EDGE 900 / EDGE 1800 / UMTS 850 / UMTS 2100" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" - 03 bands="EDGE 900 / EDGE 1800 / UMTS 850 / UMTS 2100" brand="Smart" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" - 05 bands="EDGE 1800 / UMTS 2100" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100" brand="Smart" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" + 05 bands="GSM 1800 / UMTS 2100" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" 11 bands="" cc="ph" country="Philippines" operator="PLDT via ACeS Philippines" status="" 18 bands="GSM 900 / UMTS 2100 (defunct)" brand="Cure" cc="ph" country="Philippines" operator="PLDT via Smart's Connectivity Unlimited Resources Enterprise" status="Operational" 24 bands="" brand="ABS-CBN" cc="ph" country="Philippines" operator="ABS-CBN Convergence with Globe Telecom" status="Operational" @@ -1742,10 +1832,9 @@ 03 bands="UMTS 2100" brand="AIS 3G" cc="th" country="Thailand" operator="AWN" status="Operational" 04 bands="UMTS 2100 / LTE 2100" brand="truemove H 4G LTE" cc="th" country="Thailand" operator="Real Future" status="Operational" 05 bands="UMTS 2100 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTN" status="Operational" - 10 bands="" brand="?" cc="th" country="Thailand" operator="WCS IQ" status="" 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="Operational" 18 bands="GSM 1800 / UMTS 850" brand="dtac" cc="th" country="Thailand" operator="Total Access Communication" status="Operational" - 23 bands="GSM 1800" brand="AIS GSM 1800" cc="th" country="Thailand" operator="AIS)" status="Operational" + 23 bands="GSM 1800" brand="AIS GSM 1800" cc="th" country="Thailand" operator="AIS)" status="Not operational" 25 bands="PHS 1900" brand="WE PCT" cc="th" country="Thailand" operator="True Corporation" status="Operational" 47 bands="" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="" 99 bands="GSM 1800" brand="truemove" cc="th" country="Thailand" operator="True Corporation" status="Operational" @@ -1766,14 +1855,14 @@ 00-99 530 00 bands="AMPS 800 / TDMA 800" brand="Telecom" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Not operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="nz" country="New Zealand" operator="Vodafone New Zealand" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Vodafone" cc="nz" country="New Zealand" operator="Vodafone New Zealand" status="Operational" 02 bands="CDMA2000 800" brand="Telecom" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Not operational" - 03 bands="UMTS 2000" brand="Woosh" cc="nz" country="New Zealand" operator="Woosh Wireless New Zealand Walker" status="Operational" + 03 bands="UMTS-TDD 2000" brand="Woosh" cc="nz" country="New Zealand" operator="Woosh Wireless" status="Operational" 04 bands="UMTS 2100" brand="TelstraClear" cc="nz" country="New Zealand" operator="TelstraClear New Zealand" status="Not operational" - 05 bands="UMTS 850 / UMTS 2100 / LTE 1800" brand="XT Mobile Network" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" - 06 bands="UMTS 850 / UMTS 2100" brand="Skinny" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" + 05 bands="UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Spark NZ" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" + 06 bands="MVNO" brand="Skinny" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" 07 bands="" cc="nz" country="New Zealand" operator="Bluereach Limited" status="" - 24 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="2degrees" cc="nz" country="New Zealand" operator="2degrees" status="Operational" + 24 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="2degrees" cc="nz" country="New Zealand" operator="2degrees" status="Operational" 00-99 536 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="nr" country="Nauru" operator="Digicel (Nauru) Corporation" status="Operational" @@ -1781,7 +1870,7 @@ 537 01 bands="GSM 900 / UMTS 900" brand="bmobile" cc="pg" country="Papua New Guinea" operator="Bemobile Limited" status="Operational" 02 bands="CDMA2000 450" cc="pg" country="Papua New Guinea" operator="Telikom PNG Ltd." status="Operational" - 03 bands="GSM 900 / UMTS 900" brand="Digicel" cc="pg" country="Papua New Guinea" operator="Digicel PNG" status="Operational" + 03 bands="GSM 900 / UMTS 900 / LTE 700" brand="Digicel" cc="pg" country="Papua New Guinea" operator="Digicel PNG" status="Operational" 00-99 539 01 bands="GSM 900" brand="U-Call" cc="to" country="Tonga" operator="Tonga Communications Corporation" status="Operational" @@ -1795,8 +1884,8 @@ 541 00 bands="GSM 900" brand="AIL" cc="vu" country="Vanuatu" operator="ACeS International (AIL)" status="Operational" 01 bands="GSM 900" brand="SMILE" cc="vu" country="Vanuatu" operator="Telecom Vanuatu Ltd" status="Operational" - 05 bands="GSM 900, UMTS 900" brand="Digicel" cc="vu" country="Vanuatu" operator="Digicel Vanuatu Ltd" status="Operational" - 07 bands="LTE Band 40" brand="WanTok" cc="vu" country="Vanuatu" operator="WanTok Vanuatu Ltd" status="Operational" + 05 bands="GSM 900 / UMTS 900" brand="Digicel" cc="vu" country="Vanuatu" operator="Digicel Vanuatu Ltd" status="Operational" + 07 bands="LTE-TDD 2300" brand="WanTok" cc="vu" country="Vanuatu" operator="WanTok Vanuatu Ltd" status="Operational" 00-99 542 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="fj" country="Fiji" operator="Vodafone Fiji" status="Operational" @@ -1811,9 +1900,10 @@ 09 bands="GSM 900" brand="Kiribati - Frigate Net" cc="ki" country="Kiribati" operator="Telecom Services Kiribati Ltd" status="Operational" 00-99 546 - 01 bands="GSM 900" brand="Mobilis" cc="nc" country="New Caledonia (France)" operator="OPT New Caledonia" status="Operational" + 01 bands="GSM 900 / UMTS 900 / LTE 800 / LTE 1800 / LTE 2600" brand="Mobilis" cc="nc" country="New Caledonia (France)" operator="OPT New Caledonia" status="Operational" 00-99 547 + 05 bands="WiMAX" cc="pf" country="French Polynesia" operator="VITI" status="Operational" 10 bands="GSM 900" cc="pf" country="French Polynesia" operator="Mara Telecom" status="Not operational" 15 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="pf" country="French Polynesia" operator="Pacific Mobile Telecom" status="Operational" 20 bands="GSM 900 / UMTS 2100" brand="Vini" cc="pf" country="French Polynesia" operator="Tikiphone SA" status="Operational" @@ -1848,7 +1938,7 @@ 00-99 603 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA 1900" brand="Mobilis" cc="dz" country="Algeria" operator="ATM Mobilis" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Djezzy" cc="dz" country="Algeria" operator="Orascom Telecom Algerie Spa" status="Operational" + 02 bands="GSM 900 / GSM 1800/ UMTS 2100" brand="Djezzy" cc="dz" country="Algeria" operator="Orascom Telecom Algerie Spa" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ooredoo" cc="dz" country="Algeria" operator="Wataniya Telecom Algerie" status="Operational" 00-99 604 @@ -1860,7 +1950,7 @@ 605 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tunicell" cc="tn" country="Tunisia" operator="Tunisie Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="Orascom Telecom Tunisie" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="ooredoo Tunisiana" status="Operational" 00-99 606 00 bands="GSM900 / GSM 1800 / UMTS 2100" brand="Libyana" cc="ly" country="Libya" operator="Libyana" status="Operational" @@ -1877,7 +1967,7 @@ 00-99 608 01 bands="GSM 900 / UMTS 2100" brand="Orange" cc="sn" country="Senegal" operator="Sonatel" status="Operational" - 02 bands="GSM 900 / UMTS 2100" brand="Tigo" cc="sn" country="Senegal" operator="Millicom International Cellular S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 4G" brand="Tigo" cc="sn" country="Senegal" operator="Millicom International Cellular S.A." status="Operational" 03 bands="GSM 900 / UMTS 2100" brand="Expresso" cc="sn" country="Senegal" operator="Sudatel" status="Operational" 04 bands="" cc="sn" country="Senegal" operator="CSU-SA" status="" 00-99 @@ -1899,12 +1989,13 @@ 00-99 612 01 bands="" cc="ci" country="Ivory Coast" operator="Cora de Comstar" status="Not operational" - 02 bands="GSM 900 / GSM 1800" brand="Moov" cc="ci" country="Ivory Coast" operator="Atlantique Cellulaire" status="Operational" - 03 bands="GSM 900" brand="Orange" cc="ci" country="Ivory Coast" operator="Orange" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS" brand="Moov" cc="ci" country="Ivory Coast" operator="Atlantique Cellulaire" status="Operational" + 03 bands="GSM 900 / UMTS" brand="Orange" cc="ci" country="Ivory Coast" operator="Orange" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="KoZ" cc="ci" country="Ivory Coast" operator="Comium Ivory Coast Inc" status="Operational" - 05 bands="GSM 900" brand="MTN" cc="ci" country="Ivory Coast" operator="Loteny Telecom" status="Operational" + 05 bands="GSM 900 / UMTS" brand="MTN" cc="ci" country="Ivory Coast" operator="Loteny Telecom" status="Operational" 06 bands="GSM 1800" brand="GreenN" cc="ci" country="Ivory Coast" operator="Oricel" status="Operational" - 07 bands="GSM 1800" cc="ci" country="Ivory Coast" operator="Aircomm" status="Operational" + 07 bands="GSM 1800" brand="café" cc="ci" country="Ivory Coast" operator="Aircomm" status="Operational" + 18 bands="LTE-TDD 2300" cc="ci" country="Ivory Coast" operator="YooMee" status="Operational" 00-99 613 01 bands="GSM 900 / UMTS" brand="Telmob" cc="bf" country="Burkina Faso" operator="Onatel" status="Operational" @@ -1942,12 +2033,16 @@ 20 bands="CDMA2000" brand="LIBTELCO" cc="lr" country="Liberia" operator="Liberia Telecommunications Corporation" status="Operational" 00-99 619 - 01 bands="GSM 900" brand="Airtel" cc="sl" country="Sierra Leone" operator="Bharti Airtel Limited" status="Operational" + 01 bands="GSM 900 / UMTS" brand="Airtel" cc="sl" country="Sierra Leone" operator="Bharti Airtel Limited" status="Operational" + 02 bands="" brand="Africell" cc="sl" country="Sierra Leone" operator="Lintel Sierra Leone Limited" status="" 03 bands="GSM 900" brand="Africell" cc="sl" country="Sierra Leone" operator="Lintel Sierra Leone Limited" status="Operational" - 04 bands="GSM 900/1800" brand="Comium" cc="sl" country="Sierra Leone" operator="Comium Sierra leone INC" status="Operational" + 04 bands="GSM 900 / GSM 1800" brand="Comium" cc="sl" country="Sierra Leone" operator="Comium (Sierra Leone) Ltd." status="Not operational" 05 bands="GSM 900" brand="Africell" cc="sl" country="Sierra Leone" operator="Lintel Sierra Leone Limited" status="Operational" 06 bands="CDMA 800" brand="SierraTel" cc="sl" country="Sierra Leone" operator="Sierra Leone Telephony" status="Operational" + 09 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Smart Mobile" cc="sl" country="Sierra Leone" operator="InterGroup Telecom SL" status="Operational" 25 bands="" brand="Mobitel" cc="sl" country="Sierra Leone" operator="Mobitel" status="Reserved" + 40 bands="GSM" cc="sl" country="Sierra Leone" operator="Datatel (SL) Ltd." status="" + 50 bands="CDMA" cc="sl" country="Sierra Leone" operator="Datatel (SL) Ltd." status="" 00-99 620 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="MTN" cc="gh" country="Ghana" operator="MTN Group" status="Operational" @@ -1956,15 +2051,21 @@ 04 bands="CDMA2000" brand="Expresso" cc="gh" country="Ghana" operator="Kasapa / Hutchison Telecom" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="gh" country="Ghana" operator="Airtel" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS" brand="Globacom" cc="gh" country="Ghana" operator="Globacom Group" status="Operational" + 08 bands="LTE-FDD 2600" brand="Surfline" cc="gh" country="Ghana" operator="Surfline Communications Ltd" status="Operational" + 10 bands="LTE-TDD 2600" brand="Blu" cc="gh" country="Ghana" operator="Blu Telecommunications" status="Operational" 11 bands="" cc="gh" country="Ghana" operator="Netafrique Dot Com Ltd" status="" 00-99 621 - 20 bands="GSM 900 / GSM 1800" brand="Airtel" cc="ng" country="Nigeria" operator="Bharti Airtel Limited" status="Operational" + 00 bands="LTE 1900" cc="ng" country="Nigeria" operator="Capcom" status="Not operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="ng" country="Nigeria" operator="Bharti Airtel Limited" status="Operational" + 24 bands="LTE-TDD 2300" cc="ng" country="Nigeria" operator="Spectranet" status="Operational" 25 bands="CDMA2000 800 / CDMA2000 1900" brand="Visafone" cc="ng" country="Nigeria" operator="Visafone Communications Ltd." status="Operational" - 30 bands="GSM 900 / GSM 1800" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" - 40 bands="GSM 900 / GSM 1800" brand="M-Tel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Not Operational" - 50 bands="GSM 900 / GSM 1800" brand="Glo" cc="ng" country="Nigeria" operator="Globacom Ltd" status="Operational" - 60 bands="GSM 900 / GSM 1800" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" + 26 bands="LTE-TDD 2300" cc="ng" country="Nigeria" operator="Swift" status="Operational" + 27 bands="LTE 800" brand="Smile" cc="ng" country="Nigeria" operator="Smile Communications Nigeria" status="Operational" + 30 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" + 40 bands="GSM 900 / GSM 1800" brand="M-Tel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Not operational" + 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Glo" cc="ng" country="Nigeria" operator="Globacom Ltd" status="Operational" + 60 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" 00-99 622 01 bands="GSM 900" brand="Airtel" cc="td" country="Chad" operator="Bharti Airtel SA" status="Operational" @@ -1981,6 +2082,7 @@ 624 01 bands="GSM 900" brand="MTN Cameroon" cc="cm" country="Cameroon" operator="Mobile Telephone Network Cameroon Ltd" status="Operational" 02 bands="GSM 900" brand="Orange" cc="cm" country="Cameroon" operator="Orange Cameroun S.A." status="Operational" + 04 bands="" brand="Nexttel" cc="cm" country="Cameroon" operator="Nexttel" status="Operational" 00-99 625 01 bands="GSM 900" brand="CVMOVEL" cc="cv" country="Cape Verde" operator="CVMovel, S.A." status="Operational" @@ -2001,9 +2103,9 @@ 05 bands="" brand="RAG" cc="ga" country="Gabon" operator="Réseau de l’Administration Gabonaise" status="" 00-99 629 - 01 bands="GSM 900" brand="Airtel" cc="cg" country="Republic of the Congo" operator="Celtel Congo" status="Operational" - 07 bands="GSM 900" cc="cg" country="Republic of the Congo" operator="Warid Telecom" status="Operational" - 10 bands="GSM 900" brand="Libertis Telecom" cc="cg" country="Republic of the Congo" operator="MTN CONGO S.A" status="Operational" + 01 bands="GSM 900" brand="Airtel" cc="cg" country="Congo" operator="Celtel Congo" status="Operational" + 07 bands="GSM 900" cc="cg" country="Congo" operator="Warid Telecom" status="Operational" + 10 bands="GSM 900" brand="Libertis Telecom" cc="cg" country="Congo" operator="MTN CONGO S.A" status="Operational" 00-99 630 01 bands="GSM 900 / GSM 1800" brand="Vodacom" cc="cd" country="Democratic Republic of the Congo" operator="Vodacom Congo RDC sprl" status="Operational" @@ -2027,9 +2129,9 @@ 07 bands="GSM 900 / GSM 1800" brand="Guinetel" cc="gw" country="Guinea-Bissau" operator="Guinétel S.A." status="Operational" 00-99 633 - 01 bands="GSM 900" brand="Cable & Wireless" cc="sc" country="Seychelles" operator="Cable & Wireless Seychelles" status="Operational" - 02 bands="GSM 1800" brand="Mediatech International" cc="sc" country="Seychelles" operator="Mediatech International" status="Operational" - 10 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="sc" country="Seychelles" operator="Telecom Seychelles Ltd" status="Operational" + 01 bands="GSM 900 / UMTS" brand="Cable & Wireless" cc="sc" country="Seychelles" operator="Cable & Wireless Seychelles" status="Operational" + 02 bands="GSM 1800" brand="Mediatech" cc="sc" country="Seychelles" operator="Mediatech International" status="Not operational" + 10 bands="GSM 900 / UMTS 2100 / LTE 800" brand="Airtel" cc="sc" country="Seychelles" operator="Telecom Seychelles Ltd" status="Operational" 00-99 634 01 bands="GSM 900 / UMTS 2100" brand="Zain SD" cc="sd" country="Sudan" operator="Zain Group - Sudan" status="Operational" @@ -2039,11 +2141,12 @@ 09 brand="Privet Network" cc="sd" country="Sudan" operator="NEC" 00-99 635 - 10 bands="GSM 900" brand="MTN" cc="rw" country="Rwanda" operator="MTN Rwandacell SARL" status="Operational" - 12 bands="GSM ???" brand="Rwandatel" cc="rw" country="Rwanda" operator="Rwandatel S.A." status="Not operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="rw" country="Rwanda" operator="MTN Rwandacell SARL" status="Operational" + 11 bands="CDMA" brand="Rwandatel" cc="rw" country="Rwanda" operator="Rwandatel S.A." status="Not operational" + 12 bands="GSM" brand="Rwandatel" cc="rw" country="Rwanda" operator="Rwandatel S.A." status="Not operational" 13 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tigo" cc="rw" country="Rwanda" operator="TIGO RWANDA S.A" status="Operational" - 14 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="rw" country="Rwanda" operator="Airtel RWANDA" status="Operational" - 17 bands="" cc="rw" country="Rwanda" operator="Olleh Rwanda Networks" status="" + 14 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Airtel" cc="rw" country="Rwanda" operator="Airtel RWANDA" status="Operational" + 17 bands="LTE 800" brand="Olleh" cc="rw" country="Rwanda" operator="Olleh Rwanda Networks" status="Operational" 00-99 636 01 bands="GSM 900 / GSM 1800 / UMTS 21000" brand="ETH-MTN" cc="et" country="Ethiopia" operator="Ethio Telecom" status="Operational" @@ -2056,6 +2159,7 @@ 50 bands="GSM 900" brand="Hormuud" cc="so" country="Somalia" operator="Hormuud Telecom Somalia Inc" status="Operational" 57 bands="GSM 900 / GSM 1800" brand="Unittel" cc="so" country="Somalia" operator="Unitted Telecom" status="Operational" 60 bands="GSM 900/ GSM 1800" brand="Nationlink Telecom" cc="so" country="Somalia" operator="Nationlink Telecom" status="Operational" + 67 bands="GSM 900 GSM 1800 3G 2100" brand="Horntel Group" cc="so" country="Somalia" operator="HTG Group Somalia" status="Operational" 70 bands="" cc="so" country="Somalia" operator="Onkod Telecom Ltd." status="Not operational" 71 bands="900/1800/2100" brand="Somtel" cc="so" country="Somalia" operator="2G/3G" status="Operational" 82 bands="GSM 900 / GSM 1800 / CDMA2000 / 4G LTE Alcatel-Lucent" brand="Telcom" cc="so" country="Somalia" operator="Telcom Somalia" status="Operational" @@ -2064,12 +2168,13 @@ 01 bands="GSM 900" brand="Evatis" cc="dj" country="Djibouti" operator="Djibouti Telecom SA" status="Operational" 00-99 639 - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Safaricom" cc="ke" country="Kenya" operator="Safaricom Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Safaricom" cc="ke" country="Kenya" operator="Safaricom Limited" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="ke" country="Kenya" operator="B Airtel" status="Operational" 05 bands="GSM 900" brand="yu" cc="ke" country="Kenya" operator="Econet Wireless Kenya" status="Operational" 07 bands="CDMA2000 / GSM 900 / GSM 1800 / UMTS 2100" brand="Orange Kenya" cc="ke" country="Kenya" operator="Telkom Kenya" status="Operational" 00-99 640 + 01 bands="" cc="tz" country="Tanzania" operator="Rural NetCo Limited" status="" 02 bands="GSM 900 / GSM 1800" brand="tiGO" cc="tz" country="Tanzania" operator="MIC Tanzania Limited" status="Operational" 03 bands="GSM 900 / GSM 1800" brand="Zantel" cc="tz" country="Tanzania" operator="Zanzibar Telecom Ltd" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Vodacom" cc="tz" country="Tanzania" operator="Vodacom Tanzania Limited" status="Operational" @@ -2077,17 +2182,22 @@ 06 bands="CDMA" brand="Sasatel" cc="tz" country="Tanzania" operator="Dovetel Limited" status="Operational" 07 bands="CDMA 800" brand="TTCL Mobile" cc="tz" country="Tanzania" operator="Tanzania Telecommunication Company LTD (TTCL)" status="Operational" 08 bands="CDMA" brand="Benson Online (BOL)" cc="tz" country="Tanzania" operator="Benson Informatics Limited" status="Operational" - 09 bands="???" brand="Hits" cc="tz" country="Tanzania" operator="ExcellentCom Tanzania Limited" status="Reserved" + 09 brand="Hits" cc="tz" country="Tanzania" operator="ExcellentCom Tanzania Limited" status="Not operational" 11 bands="LTE 800" brand="SmileCom" cc="tz" country="Tanzania" operator="Smile Telecoms Holdings Ltd." status="Operational" + 12 bands="" cc="tz" country="Tanzania" operator="MyCell Limited" status="" 00-99 641 - 01 bands="GSM 900" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" - 10 bands="GSM 900 / LTE 2600" brand="MTN" cc="ug" country="Uganda" operator="MTN Uganda" status="Operational" - 11 bands="GSM 900 / UMTS 2100" brand="UTL ( Telecom Limited)" cc="ug" country="Uganda" operator="Uganda Telecom Ltd." status="Operational" - 14 bands="GSM 900 / GSM 1800 / LTE 800" brand="Orange" cc="ug" country="Uganda" operator="Orange Uganda" status="Operational" - 22 bands="GSM 900 / GSM 1800" brand="Warid Telecom" cc="ug" country="Uganda" operator="Warid Telecom" status="Operational" + 01 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" + 06 bands="LTE-TDD 2600" brand="Vodafone" cc="ug" country="Uganda" operator="Afrimax Uganda" status="Operational" + 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE-TDD 2600" brand="MTN" cc="ug" country="Uganda" operator="MTN Uganda" status="Operational" + 11 bands="GSM 900 / UMTS 2100" brand="UTL" cc="ug" country="Uganda" operator="Uganda Telecom Ltd." status="Operational" + 14 bands="GSM 900 / GSM 1800 / UMTS / LTE 800" brand="Africell" cc="ug" country="Uganda" operator="Africell Uganda" status="Operational" + 18 bands="GSM 900 / GSM 1800" cc="ug" country="Uganda" operator="Suretelecom" status="Operational" + 22 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" + 30 bands="" cc="ug" country="Uganda" operator="Anupam Global Soft Uganda Limited" status="" 33 bands="LTE 800" brand="Smile" cc="ug" country="Uganda" operator="Smile Communications Uganda Limited" status="Operational" - 44 bands="" brand="K2" cc="ug" country="Uganda" operator="K2 Telecom Ltd" status="" + 40 bands="" cc="ug" country="Uganda" operator="Civil Aviation Authority (CAA)" status="" + 44 bands="MVNO" brand="K2" cc="ug" country="Uganda" operator="K2 Telecom Ltd" status="Operational" 66 bands="" brand="i-Tel" cc="ug" country="Uganda" operator="i-Tel Ltd" status="" 00-99 642 @@ -2099,7 +2209,7 @@ 82 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Leo" cc="bi" country="Burundi" operator="Orascom Telecom (a subsidiary of Vimplecom)" status="Operational" 00-99 643 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="mCel" cc="mz" country="Mozambique" operator="Mocambique Celular S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="mCel" cc="mz" country="Mozambique" operator="Mocambique Celular S.A." status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Movitel" cc="mz" country="Mozambique" operator="Movitel S.A." status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodacom" cc="mz" country="Mozambique" operator="Vodacom Mozambique, S.A." status="Operational" 00-99 @@ -2144,6 +2254,7 @@ 04 bands="GSM 900 / GSM 1800" brand="BTC Mobile" cc="bw" country="Botswana" operator="Botswana Telecommunications Corporation" status="Operational" 00-99 653 + 01 bands="" cc="sz" country="Swaziland" operator="SPTC" status="" 10 bands="GSM 900" brand="Swazi MTN" cc="sz" country="Swaziland" operator="Swazi MTN Limited" status="Operational" 00-99 654 @@ -2151,19 +2262,28 @@ 00-99 655 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodacom" cc="za" country="South Africa" operator="Vodacom" status="Operational" - 02 bands="GSM 1800 / UMTS 2100" brand="Telkom Mobile / 8.ta / Telkom SA" cc="za" country="South Africa" operator="Telkom SA" status="Operational" - 06 bands="" brand="Sentech" cc="za" country="South Africa" status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 2100" brand="Cell C" cc="za" country="South Africa" operator="Cell C" status="Operational" - 10 bands="GSM 900 / UMTS 2100 / UMTS 900 / LTE 1800" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="Operational" + 02 bands="GSM 1800 / UMTS 2100 / LTE-TDD 2300" brand="Telkom" cc="za" country="South Africa" operator="Telkom SA Ltd" status="Operational" + 04 bands="" cc="za" country="South Africa" operator="Sasol (Pty) Ltd." status="" + 06 bands="" cc="za" country="South Africa" operator="Sentech (Pty) Ltd" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Cell C" cc="za" country="South Africa" operator="Cell C (Pty) Ltd" status="Operational" + 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="Operational" 11 bands="TETRA 410" cc="za" country="South Africa" operator="South African Police Service Gauteng" status="Operational" + 12 bands="" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="" 13 bands="CDMA 800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" - 14 bands="" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="" - 19 bands="LTE" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" + 14 bands="LTE 1800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" + 16 bands="" cc="za" country="South Africa" operator="Phoenix System Integration (Pty) Ltd" status="Not operational" + 19 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" 21 bands="TETRA 410" cc="za" country="South Africa" operator="Cape Town Metropolitan Council" status="Operational" + 25 bands="" cc="za" country="South Africa" operator="Wirels Connect" status="" + 27 bands="" cc="za" country="South Africa" operator="A to Z Vaal Industrial Supplies Pty Ltd" status="" 30 bands="" cc="za" country="South Africa" operator="Bokamoso Consortium" status="Operational" 31 bands="" cc="za" country="South Africa" operator="Karabo Telecoms (Pty) Ltd." status="Operational" 32 bands="" cc="za" country="South Africa" operator="Ilizwi Telecommunications" status="Operational" - 33 bands="" cc="za" country="South Africa" operator="Thinta Thinta Telecommunications" status="Operational" + 33 bands="" cc="za" country="South Africa" operator="Thinta Thinta Telecommunications Pty Ltd" status="Operational" + 34 bands="" cc="za" country="South Africa" operator="Bokone Telecoms Pty Ltd" status="" + 35 bands="" cc="za" country="South Africa" operator="Kingdom Communications Pty Ltd" status="" + 36 bands="" cc="za" country="South Africa" operator="Amatole Telecommunications Pty Ltd" status="" + 41 bands="" cc="za" country="South Africa" operator="South African Police Service" status="" 50 bands="" cc="za" country="South Africa" operator="Ericsson South Africa (Pty) Ltd" status="" 51 bands="" cc="za" country="South Africa" operator="Integrat (Pty) Ltd" status="" 00-99 @@ -2178,7 +2298,7 @@ 07 bands="CDMA" brand="Sudani" country="South Sudan - SS" operator="Sudani" status="Operational" 00-99 702 - 67 bands="GSM 1900 / UMTS / LTE 850 / LTE 1900" brand="DigiCell" cc="bz" country="Belize" operator="Belize Telemedia Ltd. (BTL)" status="Operational" + 67 bands="GSM 1900 / UMTS / LTE 850 / LTE 1900" brand="DigiCel" cc="bz" country="Belize" operator="Belize Telemedia Ltd. (BTL)" status="Operational" 68 bands="" brand="INTELCO" cc="bz" country="Belize" operator="International Telecommunications Ltd." status="" 99 bands="CDMA2000" brand="Smart" cc="bz" country="Belize" operator="SpeedNet Communications Limited" status="Operational" 00-99 @@ -2188,10 +2308,11 @@ 03 bands="CDMA 1900 / GSM 1900 / UMTS 1900" brand="movistar" cc="gt" country="Guatemala" operator="Telefónica Móviles Guatemala (Telefónica)" status="Operational" 00-99 706 - 01 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="sv" country="El Salvador" operator="CTE Telecom Personal SA de CV América Móvil" status="Operational" - 02 bands="GSM 900" brand="digicel" cc="sv" country="El Salvador" operator="Digicel Group" status="Operational" - 03 bands="GSM 850" brand="Tigo" cc="sv" country="El Salvador" operator="Telemovil EL Salvador S.A." status="Operational" - 04 bands="GSM 850" brand="movistar" cc="sv" country="El Salvador" operator="Telefónica Móviles El Salvador" status="Operational" + 01 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="sv" country="El Salvador" operator="CTE Telecom Personal, S.A. de C.V." status="Operational" + 02 bands="GSM 900 / UMTS 900" brand="digicel" cc="sv" country="El Salvador" operator="Digicel Group" status="Operational" + 03 bands="GSM 850 / UMTS 850" brand="Tigo" cc="sv" country="El Salvador" operator="Telemovil El Salvador S.A." status="Operational" + 04 bands="GSM 850 / GSM 1900 / UMTS" brand="movistar" cc="sv" country="El Salvador" operator="Telefónica Móviles El Salvador" status="Operational" + 05 bands="iDEN" brand="RED" cc="sv" country="El Salvador" operator="INTELFON, S.A. de C.V." status="Operational" 00-99 708 001 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="hn" country="Honduras" operator="Servicios de Comunicaciones de Honduras S.A. de C.V." status="Operational" @@ -2207,12 +2328,12 @@ 712 01 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" 02 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" - 03 bands="GSM 1800 / UMTS 2100" brand="Claro" cc="cr" country="Costa Rica" operator="Claro CR Telecomunicaciones" status="Operational" - 04 bands="GSM 1800 / UMTS 850 / UMTS 2100" brand="movistar" cc="cr" country="Costa Rica" operator="Telefónica Móviles Costa Rica" status="Operational" + 03 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Claro" cc="cr" country="Costa Rica" operator="Claro CR Telecomunicaciones (Aló)" status="Operational" + 04 bands="GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="movistar" cc="cr" country="Costa Rica" operator="Telefónica Móviles Costa Rica" status="Operational" 20 bands="GSM 1800 / UMTS 850" brand="'full'móvil" cc="cr" country="Costa Rica" operator="Virtualis S.A." status="Operational" 00-99 714 - 01 bands="GSM 850 / UMTS 850" brand="Cable & Wireless" cc="pa" country="Panama" operator="Cable & Wireless Panama S.A." status="Operational" + 01 bands="GSM 850 / UMTS 850 / LTE 700" brand="Cable & Wireless" cc="pa" country="Panama" operator="Cable & Wireless Panama S.A." status="Operational" 02 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="movistar" cc="pa" country="Panama" operator="Telefónica Moviles Panama S.A, Bell South Corp. (BSC)" status="Operational" 03 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="pa" country="Panama" operator="América Móvil" status="Operational" 04 bands="GSM 1900 / UMTS 1900" brand="Digicel" cc="pa" country="Panama" operator="Digicel Group" status="Operational" @@ -2225,14 +2346,15 @@ 17 bands="iDEN / UMTS 1900" brand="NEXTEL" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" 00-99 722 - 010 bands="GSM 850 / GSM 1900 / UMTS" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" + 010 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" 020 bands="iDEN 800" brand="Nextel" cc="ar" country="Argentina" operator="NII Holdings" status="Operational" + 034 bands="" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" 040 bands="" brand="Globalstar" cc="ar" country="Argentina" operator="TE.SA.M Argentina S.A." status="Operational" 070 bands="GSM 1900" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" 310 bands="GSM 1900" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 320 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 330 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 340 bands="GSM 850 / GSM 1900 / UMTS" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" + 341 bands="GSM 850 / GSM 1900 / UMTS" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" 350 bands="GSM 900" brand="PORT-HABLE" cc="ar" country="Argentina" operator="Hutchison Telecommunications Argentina S.A." status="Operational" 000-999 724 @@ -2242,13 +2364,13 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Claro BR" cc="br" country="Brazil" operator="Claro" status="Operational" - 06 bands="GSM 850 / GSM 900/ GSM 1800/ GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" - 10 bands="GSM 850 / GSM 900 / GSM 1800 / GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" - 11 bands="GSM 850 / GSM 900 / GSM 1800 / GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 06 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 10 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 11 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 15 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Sercomtel" cc="br" country="Brazil" operator="Sercomtel Celular" status="Operational" - 16 bands="GSM 1800 / UMTS 2100" brand="Brasil Telecom GSM" cc="br" country="Brazil" operator="Brasil Telecom GSM" status="Phasing out" - 18 bands="MVNO" cc="br" country="Brazil" operator="Datora" status="" - 23 bands="GSM 850 / GSM 900 / GSM 1800 / GSM 1900 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" + 16 bands="GSM 1800 / UMTS 2100" brand="Brasil Telecom GSM" cc="br" country="Brazil" operator="Brasil Telecom GSM" status="Not operational" + 18 bands="MVNO" cc="br" country="Brazil" operator="Datora (Vodafone)" status="Operational" + 23 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 24 bands="" cc="br" country="Brazil" operator="Amazonia Celular" status="" 30 bands="" brand="Oi" cc="br" country="Brazil" operator="TNL PCS Oi" status="" 31 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="Oi" cc="br" country="Brazil" operator="TNL PCS Oi" status="Operational" @@ -2259,29 +2381,30 @@ 36 bands="" cc="br" country="Brazil" operator="Options Telecomunicações" status="" 37 bands="" brand="aeiou" cc="br" country="Brazil" operator="Unicel" status="Not operational" 38 bands="" brand="Claro BR" cc="br" country="Brazil" operator="Claro" status="" - 39 bands="UMTS 2100" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Reserved" - 54 bands="MVNO" cc="br" country="Brazil" operator="PORTO SEGURO TELECOMUNICAÇÔES" status="" + 39 bands="UMTS 2100 / LTE 1800" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Operational" + 54 bands="MVNO" cc="br" country="Brazil" operator="PORTO SEGURO TELECOMUNICAÇÔES" status="Operational" + 99 bands="" brand="Local" cc="br" country="Brazil" operator="Local ( purpose or usage)" status="" 00-99 730 - 01 bands="GSM 1900 / UMTS 1900" brand="entel" cc="cl" country="Chile" operator="Entel PCS Telecomunicaciones S.A." status="Operational" - 02 bands="GSM 850 / UMTS 850 / UMTS 1900 / LTE 2600" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" - 03 bands="GSM 1900 / UMTS 1900 / UMTS 850 / LTE 2600" brand="Claro" cc="cl" country="Chile" operator="Claro Chile S.A." status="Operational" + 01 bands="GSM 1900 / UMTS 1900 / LTE 2600" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" + 02 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" + 03 bands="GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="Claro" cc="cl" country="Chile" operator="Claro Chile S.A." status="Operational" 04 bands="iDEN 800" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" 05 bands="" cc="cl" country="Chile" operator="Multikom S.A." status="" - 06 bands="" cc="cl" country="Chile" operator="Blue Two Chile S.A." status="" - 07 bands="MVNO" brand="Virgin Mobile" cc="cl" country="Chile" operator="Virgin Mobile" status="Operational" + 06 bands="Operational" brand="Telefónica del Sur" cc="cl" country="Chile" operator="Blue Two Chile S.A." status="MVNO" + 07 bands="" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="" 08 bands="MVNO" brand="VTR Móvil" cc="cl" country="Chile" operator="VTR S.A." status="Operational" 09 bands="UMTS 1700/2100 (AWS)" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" 10 bands="GSM 1900 / UMTS 1900" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" 11 bands="" cc="cl" country="Chile" operator="Celupago S.A." status="" - 12 bands="" cc="cl" country="Chile" operator="Telestar Móvil S.A." status="" - 13 bands="" cc="cl" country="Chile" operator="Tribe Mobile Chile SPA" status="" + 12 bands="MVNO" brand="Colo-Colo Movil Wanderers Movil" cc="cl" country="Chile" operator="Telestar Móvil S.A." status="Operational" + 13 bands="Operational" brand="Virgin Mobile" cc="cl" country="Chile" operator="Tribe Mobile Chile SPA" status="MVNO" 14 bands="" cc="cl" country="Chile" operator="Netline Telefónica Móvil Ltda" status="" 15 bands="" cc="cl" country="Chile" operator="Cibeles Telecom S.A." status="" - 99 bands="GSM 1900 / UMTS 1900 (Residential)." brand="Will" cc="cl" country="Chile" operator="WILL Telefonía" status="Operational" + 99 bands="GSM 1900 / UMTS 1900" brand="Will" cc="cl" country="Chile" operator="WILL Telefonía" status="Operational" 00-99 732 - 001 bands="" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A." status="Operational" + 001 bands="" brand="movistar (?)" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A." status="Operational" 002 bands="" brand="Edatel" cc="co" country="Colombia" operator="Edatel S.A." status="Operational" 020 bands="" cc="co" country="Colombia" operator="Emtelsa" status="" 099 bands="GSM 900" brand="EMCALI" cc="co" country="Colombia" operator="Empresas Municipales de Cali" status="Operational" @@ -2325,11 +2448,14 @@ 02 bands="GSM 900 / GSM 1800" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="Operational" 03 bands="GSM 900/ GSM 1800" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" 04 bands="GSM 900" brand="Uniqa" cc="sr" country="Suriname" operator="Intelsur N.V. / UTS N.V." status="Operational" + 05 bands="CDMA" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="" 00-99 748 - 01 bands="GSM 900/1800/ UMTS 850/2100 / LTE 1700" brand="Antel" cc="uy" country="Uruguay" operator="Compania estatal (ANTEL)" status="Operational" - 07 bands="GSM 850/1900 / UMTS 850" brand="Movistar" cc="uy" country="Uruguay" operator="Telefónica Móviles Uruguay" status="Operational" - 10 bands="GSM/UMTS 1900" brand="Claro" cc="uy" country="Uruguay" operator="AM Wireless Uruguay S.A." status="Operational" + 00 bands="TDMA" brand="Antel" cc="uy" country="Uruguay" operator="Administración Nacional de Telecomunicaciones" status="" + 01 bands="GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1700" brand="Antel" cc="uy" country="Uruguay" operator="Administración Nacional de Telecomunicaciones" status="Operational" + 03 bands="" brand="Antel" cc="uy" country="Uruguay" operator="Administración Nacional de Telecomunicaciones" status="" + 07 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 1900" brand="Movistar" cc="uy" country="Uruguay" operator="Telefónica Móviles Uruguay" status="Operational" + 10 bands="GSM 1900 / UMTS 1900 / LTE 1700" brand="Claro" cc="uy" country="Uruguay" operator="AM Wireless Uruguay S.A." status="Operational" 00-99 750 001 bands="GSM 900" brand="sure" cc="fk" country="Falkland Islands (United Kingdom)" operator="Batelco" status="Operational" @@ -2372,7 +2498,13 @@ 35 bands="" country="International operators" operator="Globecomm Network Services" status="" 36 bands="GSM 1800" country="International operators" operator="Azerfon" status="Operational" 37 bands="2G, 3G, 4G Roaming" country="International operators" operator="Transatel" status="Operational" + 38 bands="" country="International operators" operator="Multiregional Transit Telecom (MTT)" status="" 39 bands="" country="International operators" operator="MTX Connect Ltd" status="" 40 bands="" country="International operators" operator="Deutsche Telekom AG" status="" + 41 bands="" country="International operators" operator="BodyTrace Netherlands B.V." status="" + 42 bands="" country="International operators" operator="DCN Hub ehf" status="" + 43 bands="" country="International operators" operator="EMnify GmbH" status="" + 44 bands="" country="International operators" operator="AT&T Inc." status="" + 45 bands="" country="International operators" operator="Advanced Wireless Network Company Limited" status="" 88 bands="" country="International operators" operator="UN Office for the Coordination of Humanitarian Affairs (OCHA)" status="" 00-99 diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index a9d2051a..9b3792d4 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,13 +1,13 @@ # generated from RangeMessage.xml, downloaded from # https://www.isbn-international.org/export_rangemessage.xml -# file serial 792b02d4-0ff4-431b-b6a0-a2a377c6ce69 -# file date Mon, 13 Oct 2014 17:30:04 CEST +# file serial 163a541f-1011-4f23-ba84-80e3be02c022 +# file date Wed, 22 Apr 2015 16:00:13 CEST 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" 00-19,200-699,7000-8499,85000-89999,900000-949999,9500000-9999999 1 agency="English language" - 00-09,100-329,330-399,4000-5499,55000-86979,869800-998999,9990000-9999999 + 00-09,100-399,4000-5499,55000-86979,869800-998999,9990000-9999999 2 agency="French language" 00-19,200-349,35000-39999,400-699,7000-8399,84000-89999,900000-949999 9500000-9999999 @@ -27,9 +27,9 @@ 601 agency="Kazakhstan" 00-19,200-699,7000-7999,80000-84999,85-99 602 agency="Indonesia" - 00-08,0900-1099,1100-1199,1200-1399,14000-14999,1500-1699,17000-17999 - 18000-18999,19000-19999,200-699,70000-74999,7500-7999,8000-9499 - 95000-99999 + 00-07,0800-0899,0900-1099,1100-1199,1200-1399,14000-14999,1500-1699 + 17000-17999,18000-18999,19000-19999,200-699,70000-74999,7500-7999 + 8000-9499,95000-99999 603 agency="Saudi Arabia" 00-04,05-49,500-799,8000-8999,90000-99999 604 agency="Vietnam" @@ -79,8 +79,8 @@ 00-13,140-149,15000-19999,200-699,7000-8499,85000-89999,9000-9199 920000-923999,92400-92999,930000-949999,95000-96999,9700-9999 85 agency="Brazil" - 00-19,200-549,5500-5999,60000-69999,7000-8499,85000-89999,900000-979999 - 98000-99999 + 00-19,200-549,5500-5999,60000-69999,7000-8499,85000-89999,900000-959999 + 96-97,98000-99999 86 agency="former Yugoslavia" 00-29,300-599,6000-7999,80000-89999,900000-999999 87 agency="Denmark" @@ -185,12 +185,16 @@ 986 agency="Taiwan" 00-11,120-559,5600-7999,80000-99999 987 agency="Argentina" - 00-09,1000-1999,20000-29999,30-35,3600-3999,40-44,45000-49999,500-899 - 9000-9499,95000-99999 + 00-09,1000-1999,20000-29999,30-35,3600-3999,4000-4199,42-43,4400-4499 + 45000-48999,4900-4999,500-899,9000-9499,95000-99999 988 agency="Hong Kong, China" 00-11,12000-14999,15000-16999,17000-19999,200-799,8000-9699,97000-99999 989 agency="Portugal" 0-1,20-54,550-799,8000-9499,95000-99999 + 9924 agency="Cambodia" + 30-39,500-649,9000-9999 + 9925 agency="Cyprus" + 0-2,30-54,550-734,7350-9999 9926 agency="Bosnia and Herzegovina" 0-1,20-39,400-799,8000-9999 9927 agency="Qatar" @@ -320,7 +324,7 @@ 0-0,100-199,2000-2999,30-59,600-949,9500-9999 99901 agency="Bahrain" 00-49,500-799,80-99 - 99902 agency="Gabon (reserved)" + 99902 agency="Reserved Agency" 99903 agency="Mauritius" 0-1,20-89,900-999 99904 agency="Curaçao" @@ -415,7 +419,7 @@ 0-1,20-89,900-999 99950 agency="Cambodia" 0-4,50-79,800-999 - 99951 agency="Congo, The Democratic Republic" + 99951 agency="Reserved Agency" 99952 agency="Mali" 0-4,50-79,800-999 99953 agency="Paraguay" @@ -466,6 +470,8 @@ 0-3,40-79,800-999 99976 agency="Srpska, Republic of" 0-1,20-59,600-799 + 99977 agency="Rwanda" + 0-1,40-69,700-799 979 10-12 10 agency="France" diff --git a/stdnum/isil.dat b/stdnum/isil.dat index fc5ba0ea..c2e33d8c 100644 --- a/stdnum/isil.dat +++ b/stdnum/isil.dat @@ -1,5 +1,6 @@ # generated from ISIL Registration Authority, downloaded from # http://biblstandard.dk/isil/ +US$ country="United States of America" ra_url="http://www.loc.gov/marc/organizations/" ra="Library of Congress" AR$ country="Argentine Republic" ra_url="http://www.iram.org.ar" ra="Argentine Standardization and Certification Institute (IRAM)" AT$ country="Austria" ra_url="http://www.obvsg.at" ra="Die Österreichische Bibliothekenverbund und Service GmbH" AU$ country="Australia" ra_url="http://www.nla.gov.au/ilrs" ra="National Library of Australia" @@ -7,7 +8,7 @@ BE$ country="Belgium" ra_url="http://www.kbr.be" ra="Royal Library of Belgium" BY$ country="Belarus" ra_url="http://www.nlb.by/portal/page/portal/index?lang=en" ra="National Library of Belarus" CA$ country="Canada" ra_url="http://www.collectionscanada.ca/ill/s16-206-e.html#3.2.2" ra="Library and Archives Canada" CH$ country="Switzerland" ra_url="http://www.nb.admin.ch/slb/slb_professionnel/01540/index.html?lang=en" ra="Swiss National Library" -CY$ country="Cyprus" ra_url="http://www.cut.ac.cy/library/english/isil_reg_agent.htm" ra="Cyprus University of Technology Library" +CY$ country="Cyprus" ra_url="http://library.cut.ac.cy/en/isil" ra="Cyprus University of Technology Library" DE$ country="Germany" ra_url="http://sigel.staatsbibliothek-berlin.de/" ra="Staatsbibliothek zu Berlin" DK$ country="Denmark" ra_url="http://www.kulturstyrelsen.dk/english/institutions/libraries/national-solutions/standards/danish-library-number/" ra="Danish Agency for Culture" EG$ country="Egypt" ra_url="http://www.sti.sci.eg/index.php?option=com_content&view=article&id=30:focal-point&catid=1:pages&Itemid=56" ra="Egyptian National Scientific and Technical Information Network (ENSTINET)" @@ -27,8 +28,6 @@ NZ$ country="New Zealand" ra_url="http://natlib.govt.nz/" ra="National Library o QA$ country="Qatar" ra_url="http://www.qnl.qa/" ra="Qatar National Library (QNL)" RU$ country="Russian Federation" ra_url="http://english.gpntb.ru/" ra="Russian National Public Library for Science and Technology" SI$ country="The Republic of Slovenia" ra_url="http://www.nuk.uni-lj.si/nukeng3.asp?id=311364382" ra="National and University Library" -US$ country="United States of America" ra="Library of Congress - under registration" -M$ country="Library of Congress - outside US" ra="Library of Congress - under registration" O$ ra="See OCLC" OCLC$ country="WorldCat Symbol" ra_url="http://www.oclc.org" ra="OCLC" ZDB$ country="Staatsbibliothek zu Berlin - Zeitschriftendatenbank" ra="Staatsbibliothek zu Berlin" From 58775d96a5fc9783fc5dc3fa22fa0a0361419e78 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 27 Apr 2015 18:38:03 +0200 Subject: [PATCH 042/654] Get files ready for 1.1 release --- ChangeLog | 168 ++++++++++++++++++++++++++++++++++ NEWS | 27 ++++++ README | 17 +++- docs/index.rst | 13 +++ docs/stdnum.al.nipt.rst | 5 + docs/stdnum.ar.cuit.rst | 5 + docs/stdnum.cl.rut.rst | 5 + docs/stdnum.co.nit.rst | 5 + docs/stdnum.do.cedula.rst | 5 + docs/stdnum.do.rnc.rst | 5 + docs/stdnum.is_.kennitala.rst | 5 + docs/stdnum.is_.vsk.rst | 5 + docs/stdnum.iso9362.rst | 5 + docs/stdnum.no.mva.rst | 5 + docs/stdnum.no.orgnr.rst | 5 + docs/stdnum.se.orgnr.rst | 5 + docs/stdnum.sm.coe.rst | 5 + setup.py | 2 +- stdnum/__init__.py | 19 +++- 19 files changed, 305 insertions(+), 6 deletions(-) create mode 100644 docs/stdnum.al.nipt.rst create mode 100644 docs/stdnum.ar.cuit.rst create mode 100644 docs/stdnum.cl.rut.rst create mode 100644 docs/stdnum.co.nit.rst create mode 100644 docs/stdnum.do.cedula.rst create mode 100644 docs/stdnum.do.rnc.rst create mode 100644 docs/stdnum.is_.kennitala.rst create mode 100644 docs/stdnum.is_.vsk.rst create mode 100644 docs/stdnum.iso9362.rst create mode 100644 docs/stdnum.no.mva.rst create mode 100644 docs/stdnum.no.orgnr.rst create mode 100644 docs/stdnum.se.orgnr.rst create mode 100644 docs/stdnum.sm.coe.rst diff --git a/ChangeLog b/ChangeLog index b42d1f34..04bbf15b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,171 @@ +2015-04-27 Arthur de Jong + + * [583b066] getcnloc.py, stdnum/cn/loc.dat, stdnum/iban.dat, + stdnum/imsi.dat, stdnum/isbn.dat, stdnum/isil.dat: Update + database files + + This also updates the script to download updated Chinese + location names. + +2014-10-24 Tomas Thor Jonsson + + * [dd309e4] stdnum/se/orgnr.py, stdnum/se/vat.py: Add support for + SE orgnr + + This also delegates some of the validation for the Swedish VAT + module to the orgnr module. + +2015-04-27 Arthur de Jong + + * [23882e2] tests/test_ec_ruc.doctest: Add extra tests for the + stdnum.ec.ruc module + + These numbers were found in various online sources. + +2015-04-25 Arthur de Jong + + * [eac4d63] stdnum/fr/tva.py: Add extra test for French TVA + +2014-10-14 P. Christeas + + * [9934f76] stdnum/gr/vat.py: Change description of Greek FPA number + + In Greece, our VAT number is used as a generic "tax registration" + num. Update the docstring to reflect that name. + +2015-04-22 Arthur de Jong + + * [4d7163c] stdnum/ar/__init__.py, stdnum/ar/cuit.py, + tests/test_ar_cuit.doctest: Add Argentinian CUIT (VAT) number + + Based partially on the implementation in the vatnumber module. + +2015-04-18 Arthur de Jong + + * [ba894d7] stdnum/sm/__init__.py, stdnum/sm/coe.py: Add San Marino + COE (VAT) number + + Based partially on the implementation in the vatnumber module. + +2015-04-18 Arthur de Jong + + * [144e1a4] stdnum/co/__init__.py, stdnum/co/nit.py: Add Colombian + NIT/RUT (VAT) code + + Based on the implementation in the vatnumber module. + +2015-04-18 Arthur de Jong + + * [c69c8f0] stdnum/cl/__init__.py, stdnum/cl/rut.py, + tests/test_cl_rut.doctest: Add Chilean national tax number (RUT) + + Based on the implementation in the vatnumber module. + +2015-04-18 Arthur de Jong + + * [3db826c] stdnum/al/__init__.py, stdnum/al/nipt.py, + tests/test_al_nipt.doctest: Add Albanian NIPT (VAT) number + + Partially based on the implementation in the vatnumber module. + + Some valid numbers appear to start with an L so those are allowed + as well. + +2015-04-23 Arthur de Jong + + * [88d1af3] stdnum/do/cedula.py: Extend the list of valid Cedula + + This is based on the list of Cedula found at + http://prd.org.do/2013/07/30/lista-del-cen-del-prd-actualizada-y-registrada-en-la-junta-central-electoral/ + (link provided by José Arturo García) + +2015-04-17 Arthur de Jong + + * [49d1e69] stdnum/do/cedula.py, tests/test_do_cedula.doctest: + Add Dominican Republic Cedula number + + The Cedule is a Dominican Republic national identification number + for persons. + + The number uses the Luhn checksum but apparently there are a lof + of valid numbers in use that do not match the checksum. For this + a whitelist is used. + +2015-04-17 Arthur de Jong + + * [d003ac3] stdnum/do/__init__.py, stdnum/do/rnc.py, + tests/test_do_rnc.doctest: Add Dominican Republic RNC number + + The RNC (Registro Nacional del Contribuyente) is the Dominican + Republic taxpayer registration number for companies. + +2015-04-19 Arthur de Jong + + * [9e94ab8] tests/test_no_mva.doctest: Add more stdnum.no.mva tests + +2015-04-18 Arthur de Jong + + * [c334bcf] stdnum/is_/kennitala.py, tests/test_is_kennitala.doctest: + Add more tests for Kennitala + +2015-04-11 Tuomas Toivonen + + * [84620f8] stdnum/is_/__init__.py, stdnum/is_/kennitala.py, + stdnum/is_/vsk.py: Support Icelandic personal, organisation and + VAT identifiers + + The package is named "is_" because "is" is a reserved word. + +2015-04-11 Tuomas Toivonen + + * [699b340] stdnum/no/__init__.py, stdnum/no/mva.py, + stdnum/no/orgnr.py: Add support for Norwegian organisation and + VAT numbers + + This commit also includes changes from Tomas Thor Jonsson + . + +2015-02-09 Tony Bajan + + * [75bcef0] stdnum/iso9362.py: Add ISO 9362 (BIC) support + +2015-04-17 Arthur de Jong + + * [2574f89] stdnum/imsi.py: Raise InvalidComponent for unregistered + IMSI + +2014-12-23 Emiliano Castro + + * [9883c72] stdnum/eu/vat.py, stdnum/hr/__init__.py: Adding HR + (Croatia) to the list of available countries + +2014-11-01 Arthur de Jong + + * [3a7c9f7] stdnum/bg/vat.py, stdnum/eu/at_02.py, stdnum/iban.py, + stdnum/isan.py, stdnum/meid.py, stdnum/numdb.py: Fix common + spelling mistake + +2014-10-31 Matt McDonald + + * [6e332b1] stdnum/meid.py, tests/test_meid.doctest: Fix for + invalidating MEIDs with invalid decimal bit length + + See: http://arthurdejong.org/trac/python-stdnum/ticket/10 + +2014-10-20 Arthur de Jong + + * [3fa795d] getnumlist.py: Restore section for on homepage + +2014-10-19 Arthur de Jong + + * [147eeb1] ChangeLog, NEWS, README, docs/index.rst, + docs/stdnum.ch.ssn.rst, docs/stdnum.cn.ric.rst, + docs/stdnum.ec.ci.rst, docs/stdnum.ec.ruc.rst, + docs/stdnum.eu.at_02.rst, docs/stdnum.iso6346.rst, + docs/stdnum.it.codicefiscale.rst, docs/stdnum.us.rtn.rst, + getnumlist.py, setup.py, stdnum/__init__.py: Get files ready + for 1.0 release + 2014-10-19 Arthur de Jong * [72c0ff1] stdnum/iso6346.py: Remove unused import diff --git a/NEWS b/NEWS index d64ee92a..3f584f9d 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,30 @@ +changes from 1.0 to 1.1 +----------------------- + +* add number formats based on the implementation in the vatnumber module: + - NIPT (Numri i Identifikimit për Personin e Tatueshëm, Albanian VAT number) + - CUIT (Código Único de Identificación Tributaria, Argentinian tax number) + - RUT (Rol Único Tributario, Chilean national tax number) + - NIT (Número De Identificación Tributaria, Colombian identity code) + - COE (Codice operatore economico, San Marino national tax number) +* add modules for the following number formats: + - Cedula (Dominican Republic national identification number) + - RNC (Registro Nacional del Contribuyente, Dominican Republic tax number) + - Kennitala (Icelandic personal and organisation identity code, provided by + Tuomas Toivonen) + - VSK number (Virðisaukaskattsnúmer, Icelandic VAT number, provided by + Tuomas Toivonen) + - ISO 9362 (Business identifier codes, provided by Tony Bajan) + - MVA (Merverdiavgift, Norwegian VAT number, provided by Tuomas Toivonen) + - Orgnr (Organisasjonsnummer, Norwegian organisation number, provided by + Tuomas Toivonen) + - Orgnr (Organisationsnummer, Swedish company number, provided by Tomas + Thor Jonsson) +* add Croatia to list of EU VAT numbers +* update getcnloc script +* various small fixes and additional tests for existing modules + + changes from 0.9 to 1.0 ----------------------- diff --git a/README b/README index 1fd9612b..563e4eb4 100644 --- a/README +++ b/README @@ -9,6 +9,8 @@ Available formats Currently this package supports the following formats: + * NIPT (Numri i Identifikimit për Personin e Tatueshëm, Albanian VAT number) + * CUIT (Código Único de Identificación Tributaria, Argentinian tax number) * UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) * BTW, TVA, NWSt (Belgian VAT number) * EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) @@ -16,13 +18,17 @@ Currently this package supports the following formats: * VAT (Идентификационен номер по ДДС, Bulgarian VAT number) * CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) * Swiss social security number ("Sozialversicherungsnummer") + * RUT (Rol Único Tributario, Chilean national tax number) * RIC No. (Chinese Resident Identity Card Number) + * NIT (Número De Identificación Tributaria, Colombian identity code) * Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) * DIČ (Daňové identifikační číslo, Czech VAT number) * RČ (Rodné číslo, the Czech birth number) * Ust ID Nr. (Umsatzsteur Identifikationnummer, German VAT number) * CPR (personnummer, the Danish citizen number) * CVR (Momsregistreringsnummer, Danish VAT number) + * Cedula (Dominican Republic national identification number) + * RNC (Registro Nacional del Contribuyente, Dominican Republic tax number) * EAN (International Article Number) * CI (Cédula de identidad, Ecuadorian personal identity code) * RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) @@ -38,7 +44,7 @@ Currently this package supports the following formats: * SIREN (a French company identification number) * n° TVA (taxe sur la valeur ajoutée, French VAT number) * VAT (United Kingdom (and Isle of Man) VAT registration number) - * FPA, ΦΠΑ (Foros Prostithemenis Aksias, the Greek VAT number) + * FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) * GRid (Global Release Identifier) * OIB (Osobni identifikacijski broj, Croatian identification number) * ANUM (Közösségi adószám, Hungarian VAT number) @@ -47,11 +53,14 @@ Currently this package supports the following formats: * VAT (Irish VAT number) * IMEI (International Mobile Equipment Identity) * IMSI (International Mobile Subscriber Identity) + * Kennitala (Icelandic personal and organisation identity code) + * VSK number (Virðisaukaskattsnúmer, Icelandic VAT number) * ISAN (International Standard Audiovisual Number) * ISBN (International Standard Book Number) * ISIL (International Standard Identifier for Libraries) * ISMN (International Standard Music Number) * ISO 6346 (International standard for container identification) + * ISO 9362 (Business identifier codes) * ISSN (International Standard Serial Number) * Codice Fiscale (Italian tax code for individuals) * Partita IVA (Italian VAT number) @@ -66,14 +75,18 @@ Currently this package supports the following formats: * BTW-nummer (Omzetbelastingnummer, the Dutch VAT number) * Onderwijsnummer (Dutch student school number) * Postcode (Dutch postal code) + * MVA (Merverdiavgift, Norwegian VAT number) + * Orgnr (Organisasjonsnummer, Norwegian organisation number) * NIP (Numer Identyfikacji Podatkowej, Polish VAT number) * NIF (Número de identificação fiscal, Portuguese VAT number) * CF (Cod de înregistrare în scopuri de TVA, Romanian VAT number) * CNP (Cod Numeric Personal, Romanian Numerical Personal Code) + * Orgnr (Organisationsnummer, Swedish company number) * VAT (Moms, Mervärdesskatt, Swedish VAT number) * ID za DDV (Davčna številka, Slovenian VAT number) * IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) * RČ (Rodné číslo, the Slovak birth number) + * COE (Codice operatore economico, San Marino national tax number) * ATIN (U.S. Adoption Taxpayer Identification Number) * EIN (U.S. Employer Identification Number) * ITIN (U.S. Individual Taxpayer Identification Number) @@ -123,7 +136,7 @@ also work with older versions of Python. Copyright --------- -Copyright (C) 2010-2014 Arthur de Jong and others +Copyright (C) 2010-2015 Arthur de Jong and others This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public diff --git a/docs/index.rst b/docs/index.rst index c7a7acc0..971502f6 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -85,6 +85,8 @@ Available formats .. autosummary:: :toctree: + al.nipt + ar.cuit at.uid be.vat bg.egn @@ -92,13 +94,17 @@ Available formats bg.vat br.cpf ch.ssn + cl.rut cn.ric + co.nit cy.vat cz.dic cz.rc de.vat dk.cpr dk.cvr + do.cedula + do.rnc ean ec.ci ec.ruc @@ -123,11 +129,14 @@ Available formats ie.vat imei imsi + is_.kennitala + is_.vsk isan isbn isil ismn iso6346 + iso9362 issn it.codicefiscale it.iva @@ -142,14 +151,18 @@ Available formats nl.btw nl.onderwijsnummer nl.postcode + no.mva + no.orgnr pl.nip pt.nif ro.cf ro.cnp + se.orgnr se.vat si.ddv sk.dph sk.rc + sm.coe us.atin us.ein us.itin diff --git a/docs/stdnum.al.nipt.rst b/docs/stdnum.al.nipt.rst new file mode 100644 index 00000000..7234305e --- /dev/null +++ b/docs/stdnum.al.nipt.rst @@ -0,0 +1,5 @@ +stdnum.al.nipt +============== + +.. automodule:: stdnum.al.nipt + :members: \ No newline at end of file diff --git a/docs/stdnum.ar.cuit.rst b/docs/stdnum.ar.cuit.rst new file mode 100644 index 00000000..cb407a37 --- /dev/null +++ b/docs/stdnum.ar.cuit.rst @@ -0,0 +1,5 @@ +stdnum.ar.cuit +============== + +.. automodule:: stdnum.ar.cuit + :members: \ No newline at end of file diff --git a/docs/stdnum.cl.rut.rst b/docs/stdnum.cl.rut.rst new file mode 100644 index 00000000..ba375b1f --- /dev/null +++ b/docs/stdnum.cl.rut.rst @@ -0,0 +1,5 @@ +stdnum.cl.rut +============= + +.. automodule:: stdnum.cl.rut + :members: \ No newline at end of file diff --git a/docs/stdnum.co.nit.rst b/docs/stdnum.co.nit.rst new file mode 100644 index 00000000..7a02c0fd --- /dev/null +++ b/docs/stdnum.co.nit.rst @@ -0,0 +1,5 @@ +stdnum.co.nit +============= + +.. automodule:: stdnum.co.nit + :members: \ No newline at end of file diff --git a/docs/stdnum.do.cedula.rst b/docs/stdnum.do.cedula.rst new file mode 100644 index 00000000..fb9d1425 --- /dev/null +++ b/docs/stdnum.do.cedula.rst @@ -0,0 +1,5 @@ +stdnum.do.cedula +================ + +.. automodule:: stdnum.do.cedula + :members: \ No newline at end of file diff --git a/docs/stdnum.do.rnc.rst b/docs/stdnum.do.rnc.rst new file mode 100644 index 00000000..86b13ae6 --- /dev/null +++ b/docs/stdnum.do.rnc.rst @@ -0,0 +1,5 @@ +stdnum.do.rnc +============= + +.. automodule:: stdnum.do.rnc + :members: \ No newline at end of file diff --git a/docs/stdnum.is_.kennitala.rst b/docs/stdnum.is_.kennitala.rst new file mode 100644 index 00000000..469c9d39 --- /dev/null +++ b/docs/stdnum.is_.kennitala.rst @@ -0,0 +1,5 @@ +stdnum.is_.kennitala +==================== + +.. automodule:: stdnum.is_.kennitala + :members: \ No newline at end of file diff --git a/docs/stdnum.is_.vsk.rst b/docs/stdnum.is_.vsk.rst new file mode 100644 index 00000000..e917647a --- /dev/null +++ b/docs/stdnum.is_.vsk.rst @@ -0,0 +1,5 @@ +stdnum.is_.vsk +============== + +.. automodule:: stdnum.is_.vsk + :members: \ No newline at end of file diff --git a/docs/stdnum.iso9362.rst b/docs/stdnum.iso9362.rst new file mode 100644 index 00000000..d8749e84 --- /dev/null +++ b/docs/stdnum.iso9362.rst @@ -0,0 +1,5 @@ +stdnum.iso9362 +============== + +.. automodule:: stdnum.iso9362 + :members: \ No newline at end of file diff --git a/docs/stdnum.no.mva.rst b/docs/stdnum.no.mva.rst new file mode 100644 index 00000000..029d9b33 --- /dev/null +++ b/docs/stdnum.no.mva.rst @@ -0,0 +1,5 @@ +stdnum.no.mva +============= + +.. automodule:: stdnum.no.mva + :members: \ No newline at end of file diff --git a/docs/stdnum.no.orgnr.rst b/docs/stdnum.no.orgnr.rst new file mode 100644 index 00000000..08a79dd1 --- /dev/null +++ b/docs/stdnum.no.orgnr.rst @@ -0,0 +1,5 @@ +stdnum.no.orgnr +=============== + +.. automodule:: stdnum.no.orgnr + :members: \ No newline at end of file diff --git a/docs/stdnum.se.orgnr.rst b/docs/stdnum.se.orgnr.rst new file mode 100644 index 00000000..ac85b057 --- /dev/null +++ b/docs/stdnum.se.orgnr.rst @@ -0,0 +1,5 @@ +stdnum.se.orgnr +=============== + +.. automodule:: stdnum.se.orgnr + :members: \ No newline at end of file diff --git a/docs/stdnum.sm.coe.rst b/docs/stdnum.sm.coe.rst new file mode 100644 index 00000000..d8dd6385 --- /dev/null +++ b/docs/stdnum.sm.coe.rst @@ -0,0 +1,5 @@ +stdnum.sm.coe +============= + +.. automodule:: stdnum.sm.coe + :members: \ No newline at end of file diff --git a/setup.py b/setup.py index 008ef463..399893bd 100755 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ # setup.py - python-stdnum installation script # -# Copyright (C) 2010-2014 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public diff --git a/stdnum/__init__.py b/stdnum/__init__.py index 9705c24e..1e32343c 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -1,7 +1,7 @@ # __init__.py - main module # coding: utf-8 # -# Copyright (C) 2010-2014 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -25,6 +25,8 @@ Currently this package supports the following formats: +* al.nipt: NIPT (Numri i Identifikimit për Personin e Tatueshëm, Albanian VAT number) +* ar.cuit: CUIT (Código Único de Identificación Tributaria, Argentinian tax number) * at.uid: UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) * be.vat: BTW, TVA, NWSt (Belgian VAT number) * bg.egn: EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) @@ -32,13 +34,17 @@ * bg.vat: VAT (Идентификационен номер по ДДС, Bulgarian VAT number) * br.cpf: CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) * ch.ssn: Swiss social security number ("Sozialversicherungsnummer") +* cl.rut: RUT (Rol Único Tributario, Chilean national tax number) * cn.ric: RIC No. (Chinese Resident Identity Card Number) +* co.nit: NIT (Número De Identificación Tributaria, Colombian identity code) * cy.vat: Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) * cz.dic: DIČ (Daňové identifikační číslo, Czech VAT number) * cz.rc: RČ (Rodné číslo, the Czech birth number) * de.vat: Ust ID Nr. (Umsatzsteur Identifikationnummer, German VAT number) * dk.cpr: CPR (personnummer, the Danish citizen number) * dk.cvr: CVR (Momsregistreringsnummer, Danish VAT number) +* do.cedula: Cedula (Dominican Republic national identification number) +* do.rnc: RNC (Registro Nacional del Contribuyente, Dominican Republic tax number) * ean: EAN (International Article Number) * ec.ci: CI (Cédula de identidad, Ecuadorian personal identity code) * ec.ruc: RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) @@ -54,7 +60,7 @@ * fr.siren: SIREN (a French company identification number) * fr.tva: n° TVA (taxe sur la valeur ajoutée, French VAT number) * gb.vat: VAT (United Kingdom (and Isle of Man) VAT registration number) -* gr.vat: FPA, ΦΠΑ (Foros Prostithemenis Aksias, the Greek VAT number) +* gr.vat: FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) * grid: GRid (Global Release Identifier) * hr.oib: OIB (Osobni identifikacijski broj, Croatian identification number) * hu.anum: ANUM (Közösségi adószám, Hungarian VAT number) @@ -63,11 +69,14 @@ * ie.vat: VAT (Irish VAT number) * imei: IMEI (International Mobile Equipment Identity) * imsi: IMSI (International Mobile Subscriber Identity) +* is_.kennitala: Kennitala (Icelandic personal and organisation identity code) +* is_.vsk: VSK number (Virðisaukaskattsnúmer, Icelandic VAT number) * isan: ISAN (International Standard Audiovisual Number) * isbn: ISBN (International Standard Book Number) * isil: ISIL (International Standard Identifier for Libraries) * ismn: ISMN (International Standard Music Number) * iso6346: ISO 6346 (International standard for container identification) +* iso9362: ISO 9362 (Business identifier codes) * issn: ISSN (International Standard Serial Number) * it.codicefiscale: Codice Fiscale (Italian tax code for individuals) * it.iva: Partita IVA (Italian VAT number) @@ -82,14 +91,18 @@ * nl.btw: BTW-nummer (Omzetbelastingnummer, the Dutch VAT number) * nl.onderwijsnummer: Onderwijsnummer (Dutch student school number) * nl.postcode: Postcode (Dutch postal code) +* no.mva: MVA (Merverdiavgift, Norwegian VAT number) +* no.orgnr: Orgnr (Organisasjonsnummer, Norwegian organisation number) * pl.nip: NIP (Numer Identyfikacji Podatkowej, Polish VAT number) * pt.nif: NIF (Número de identificação fiscal, Portuguese VAT number) * ro.cf: CF (Cod de înregistrare în scopuri de TVA, Romanian VAT number) * ro.cnp: CNP (Cod Numeric Personal, Romanian Numerical Personal Code) +* se.orgnr: Orgnr (Organisationsnummer, Swedish company number) * se.vat: VAT (Moms, Mervärdesskatt, Swedish VAT number) * si.ddv: ID za DDV (Davčna številka, Slovenian VAT number) * sk.dph: IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) * sk.rc: RČ (Rodné číslo, the Slovak birth number) +* sm.coe: COE (Codice operatore economico, San Marino national tax number) * us.atin: ATIN (U.S. Adoption Taxpayer Identification Number) * us.ein: EIN (U.S. Employer Identification Number) * us.itin: ITIN (U.S. Individual Taxpayer Identification Number) @@ -124,4 +137,4 @@ # the version number of the library -__version__ = '1.0' +__version__ = '1.1' From 8925ae2731e2122d3ebc746243f08042ba65cb62 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 27 Apr 2015 20:34:19 +0200 Subject: [PATCH 043/654] Fix copyright header --- tests/test_iso6346.doctest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_iso6346.doctest b/tests/test_iso6346.doctest index 11bd81fc..32b67ea3 100644 --- a/tests/test_iso6346.doctest +++ b/tests/test_iso6346.doctest @@ -1,6 +1,6 @@ test_doctest - more detailed doctests for the stdnum.iso6346 package -Copyright (C) 2014 Openlabs Technologies & consulting (P) Limited +Copyright (C) 2014 Openlabs Technologies & Consulting (P) Limited This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public From 12ba35214afef27d4db2de453857bde3d905e784 Mon Sep 17 00:00:00 2001 From: Jiangge Zhang Date: Mon, 8 Jun 2015 18:00:34 +0800 Subject: [PATCH 044/654] Download GB2260 data from github.com/cn. --- getcnloc.py | 125 +++++++++++++++++++++++----------------------------- 1 file changed, 54 insertions(+), 71 deletions(-) diff --git a/getcnloc.py b/getcnloc.py index c54d68b2..9004b83c 100755 --- a/getcnloc.py +++ b/getcnloc.py @@ -24,89 +24,72 @@ import sys import codecs -from urlparse import urljoin -from operator import itemgetter +from collections import OrderedDict from datetime import datetime import requests -import lxml.html - - -revisions_url = 'http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/' - - -def make_etree(response, encoding='utf-8'): - if not response.ok: - args = (response.status_code, response.reason, response.url) - print('%d %s: %s' % args, file=sys.stderr) - sys.exit(-1) - response.encoding = encoding - return lxml.html.fromstring(response.text) - - -def get_revisions(url): - """Return the links to versions of the published administrative division - codes.""" - html = make_etree(requests.get(url)) - anchors = html.xpath('.//div[@class="center_list"]/ul/li/a') - for anchor in anchors: - url = urljoin(url, anchor.attrib['href']) - date_text = anchor.findtext('.//span/*[@class="cont_tit02"]') - date = datetime.strptime(date_text, '%Y-%m-%d').date() - yield url, date - - -def iter_records(url): - html = make_etree(requests.get(url)) - lines = html.xpath('.//div[@class="xilan_con"]//p') - for line in lines: - line = ' '.join(line.xpath('.//text()')) - try: - city_code, city_name = line.strip().split() - except ValueError: - if line.strip(): - print('invalid line: %r' % line, file=sys.stderr) - else: - yield city_code.strip(), city_name.strip() - - -def group_records(url): - - provinces = {} - prefectures = {} - - for city_code, city_name in iter_records(url): - province_code = city_code[:2] - prefecture_code = city_code[2:4] - county_code = city_code[4:6] - county_name = None - if prefecture_code == '00': - provinces[province_code] = city_name - elif county_code == '00': - prefectures[prefecture_code] = city_name +data_url = 'https://github.com/cn/GB2260' +data_revisions = [ + 'GB2260-2002', + 'GB2260-2003', + 'GB2260-200306', + 'GB2260-2004', + 'GB2260-200403', + 'GB2260-200409', + 'GB2260-2005', + 'GB2260-200506', + 'GB2260-2006', + 'GB2260-2007', + 'GB2260-2008', + 'GB2260-2009', + 'GB2260-2010', + 'GB2260-2011', + 'GB2260-2012', + 'GB2260-2013', + 'GB2260', +] + + +def fetch_data(): + data_collection = OrderedDict() + for revision in data_revisions: + response = requests.get('%s/raw/master/%s.txt' % (data_url, revision)) + if response.ok: + print('%s is fetched' % revision, file=sys.stderr) else: - county_name = city_name + print('%s is missing' % revision, file=sys.stderr) + continue + for line in response.text.strip().split('\n'): + code, name = line.split('\t') + data_collection[code.strip()] = name.strip() + return data_collection + - yield city_code, dict( - province=provinces.get(province_code), - prefecture=prefectures.get(prefecture_code), - county=county_name) +def group_data(data_collection): + for code, name in sorted(data_collection.items()): + if code.endswith('00'): + continue # county only + province_code = code[:2] + '0000' + prefecture_code = code[:4] + '00' + province_name = data_collection[province_code] + prefecture_name = data_collection[prefecture_code] + yield code, name, prefecture_name, province_name def print_data_file(file): print("# generated from National Bureau of Statistics of the People's", file=file) - print('# Republic of China, downloaded from %s' % revisions_url, file=file) - url, dt = max(get_revisions(revisions_url), key=itemgetter(1)) - print('# %s (revision %s)' % (url, dt), file=file) - for city_code, city_data in group_records(url): - if not all(city_data.values()): - continue - city_pairs = ' '.join( - '%s="%s"' % (k, v) for k, v in sorted(city_data.items()) if v) - print('%s %s' % (city_code, city_pairs), file=file) + print('# Republic of China, downloaded from %s' % data_url, file=file) + print('# %s' % datetime.utcnow(), file=file) + + print('Downloading...', file=sys.stderr) + data_collection = fetch_data() + + print('Generating...', file=sys.stderr) + for data in group_data(data_collection): + print('%s county="%s" prefecture="%s" province="%s"' % data, file=file) if __name__ == '__main__': From 6308261e00dfa3094db4d5cbd3934e211004d102 Mon Sep 17 00:00:00 2001 From: Jiangge Zhang Date: Mon, 8 Jun 2015 18:01:44 +0800 Subject: [PATCH 045/654] Download and generate latest Chinese location data. --- stdnum/cn/loc.dat | 250 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 248 insertions(+), 2 deletions(-) diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat index fbf373fa..b6cff7dc 100644 --- a/stdnum/cn/loc.dat +++ b/stdnum/cn/loc.dat @@ -1,8 +1,10 @@ # generated from National Bureau of Statistics of the People's -# Republic of China, downloaded from http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/ -# http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html (revision 2015-04-15) +# Republic of China, downloaded from https://github.com/cn/GB2260 +# 2015-06-08 09:43:51.705262 110101 county="东城区" prefecture="市辖区" province="北京市" 110102 county="西城区" prefecture="市辖区" province="北京市" +110103 county="崇文区" prefecture="市辖区" province="北京市" +110104 county="宣武区" prefecture="市辖区" province="北京市" 110105 county="朝阳区" prefecture="市辖区" province="北京市" 110106 county="丰台区" prefecture="市辖区" province="北京市" 110107 county="石景山区" prefecture="市辖区" province="北京市" @@ -23,6 +25,9 @@ 120104 county="南开区" prefecture="市辖区" province="天津市" 120105 county="河北区" prefecture="市辖区" province="天津市" 120106 county="红桥区" prefecture="市辖区" province="天津市" +120107 county="塘沽区" prefecture="市辖区" province="天津市" +120108 county="汉沽区" prefecture="市辖区" province="天津市" +120109 county="大港区" prefecture="市辖区" province="天津市" 120110 county="东丽区" prefecture="市辖区" province="天津市" 120111 county="西青区" prefecture="市辖区" province="天津市" 120112 county="津南区" prefecture="市辖区" province="天津市" @@ -35,6 +40,7 @@ 120225 county="蓟县" prefecture="县" province="天津市" 130101 county="市辖区" prefecture="石家庄市" province="河北省" 130102 county="长安区" prefecture="石家庄市" province="河北省" +130103 county="桥东区" prefecture="石家庄市" province="河北省" 130104 county="桥西区" prefecture="石家庄市" province="河北省" 130105 county="新华区" prefecture="石家庄市" province="河北省" 130107 county="井陉矿区" prefecture="石家庄市" province="河北省" @@ -44,6 +50,7 @@ 130111 county="栾城区" prefecture="石家庄市" province="河北省" 130121 county="井陉县" prefecture="石家庄市" province="河北省" 130123 county="正定县" prefecture="石家庄市" province="河北省" +130124 county="栾城县" prefecture="石家庄市" province="河北省" 130125 county="行唐县" prefecture="石家庄市" province="河北省" 130126 county="灵寿县" prefecture="石家庄市" province="河北省" 130127 county="高邑县" prefecture="石家庄市" province="河北省" @@ -53,8 +60,11 @@ 130131 county="平山县" prefecture="石家庄市" province="河北省" 130132 county="元氏县" prefecture="石家庄市" province="河北省" 130133 county="赵县" prefecture="石家庄市" province="河北省" +130181 county="辛集市" prefecture="石家庄市" province="河北省" +130182 county="藁城市" prefecture="石家庄市" province="河北省" 130183 county="晋州市" prefecture="石家庄市" province="河北省" 130184 county="新乐市" prefecture="石家庄市" province="河北省" +130185 county="鹿泉市" prefecture="石家庄市" province="河北省" 130201 county="市辖区" prefecture="唐山市" province="河北省" 130202 county="路南区" prefecture="唐山市" province="河北省" 130203 county="路北区" prefecture="唐山市" province="河北省" @@ -68,6 +78,7 @@ 130225 county="乐亭县" prefecture="唐山市" province="河北省" 130227 county="迁西县" prefecture="唐山市" province="河北省" 130229 county="玉田县" prefecture="唐山市" province="河北省" +130230 county="唐海县" prefecture="唐山市" province="河北省" 130281 county="遵化市" prefecture="唐山市" province="河北省" 130283 county="迁安市" prefecture="唐山市" province="河北省" 130301 county="市辖区" prefecture="秦皇岛市" province="河北省" @@ -141,6 +152,7 @@ 130637 county="博野县" prefecture="保定市" province="河北省" 130638 county="雄县" prefecture="保定市" province="河北省" 130681 county="涿州市" prefecture="保定市" province="河北省" +130682 county="定州市" prefecture="保定市" province="河北省" 130683 county="安国市" prefecture="保定市" province="河北省" 130684 county="高碑店市" prefecture="保定市" province="河北省" 130701 county="市辖区" prefecture="张家口市" province="河北省" @@ -345,6 +357,19 @@ 141130 county="交口县" prefecture="吕梁市" province="山西省" 141181 county="孝义市" prefecture="吕梁市" province="山西省" 141182 county="汾阳市" prefecture="吕梁市" province="山西省" +142301 county="孝义市" prefecture="吕梁地区" province="山西省" +142302 county="离石市" prefecture="吕梁地区" province="山西省" +142303 county="汾阳市" prefecture="吕梁地区" province="山西省" +142322 county="文水县" prefecture="吕梁地区" province="山西省" +142323 county="交城县" prefecture="吕梁地区" province="山西省" +142325 county="兴县" prefecture="吕梁地区" province="山西省" +142326 county="临县" prefecture="吕梁地区" province="山西省" +142327 county="柳林县" prefecture="吕梁地区" province="山西省" +142328 county="石楼县" prefecture="吕梁地区" province="山西省" +142329 county="岚县" prefecture="吕梁地区" province="山西省" +142330 county="方山县" prefecture="吕梁地区" province="山西省" +142332 county="中阳县" prefecture="吕梁地区" province="山西省" +142333 county="交口县" prefecture="吕梁地区" province="山西省" 150101 county="市辖区" prefecture="呼和浩特市" province="内蒙古自治区" 150102 county="新城区" prefecture="呼和浩特市" province="内蒙古自治区" 150103 county="回民区" prefecture="呼和浩特市" province="内蒙古自治区" @@ -453,6 +478,24 @@ 152529 county="正镶白旗" prefecture="锡林郭勒盟" province="内蒙古自治区" 152530 county="正蓝旗" prefecture="锡林郭勒盟" province="内蒙古自治区" 152531 county="多伦县" prefecture="锡林郭勒盟" province="内蒙古自治区" +152601 county="集宁市" prefecture="乌兰察布盟" province="内蒙古自治区" +152602 county="丰镇市" prefecture="乌兰察布盟" province="内蒙古自治区" +152624 county="卓资县" prefecture="乌兰察布盟" province="内蒙古自治区" +152625 county="化德县" prefecture="乌兰察布盟" province="内蒙古自治区" +152626 county="商都县" prefecture="乌兰察布盟" province="内蒙古自治区" +152627 county="兴和县" prefecture="乌兰察布盟" province="内蒙古自治区" +152629 county="凉城县" prefecture="乌兰察布盟" province="内蒙古自治区" +152630 county="察哈尔右翼前旗" prefecture="乌兰察布盟" province="内蒙古自治区" +152631 county="察哈尔右翼中旗" prefecture="乌兰察布盟" province="内蒙古自治区" +152632 county="察哈尔右翼后旗" prefecture="乌兰察布盟" province="内蒙古自治区" +152634 county="四子王旗" prefecture="乌兰察布盟" province="内蒙古自治区" +152801 county="临河市" prefecture="巴彦淖尔盟" province="内蒙古自治区" +152822 county="五原县" prefecture="巴彦淖尔盟" province="内蒙古自治区" +152823 county="磴口县" prefecture="巴彦淖尔盟" province="内蒙古自治区" +152824 county="乌拉特前旗" prefecture="巴彦淖尔盟" province="内蒙古自治区" +152825 county="乌拉特中旗" prefecture="巴彦淖尔盟" province="内蒙古自治区" +152826 county="乌拉特后旗" prefecture="巴彦淖尔盟" province="内蒙古自治区" +152827 county="杭锦后旗" prefecture="巴彦淖尔盟" province="内蒙古自治区" 152921 county="阿拉善左旗" prefecture="阿拉善盟" province="内蒙古自治区" 152922 county="阿拉善右旗" prefecture="阿拉善盟" province="内蒙古自治区" 152923 county="额济纳旗" prefecture="阿拉善盟" province="内蒙古自治区" @@ -579,6 +622,7 @@ 220112 county="双阳区" prefecture="长春市" province="吉林省" 220113 county="九台区" prefecture="长春市" province="吉林省" 220122 county="农安县" prefecture="长春市" province="吉林省" +220181 county="九台市" prefecture="长春市" province="吉林省" 220182 county="榆树市" prefecture="长春市" province="吉林省" 220183 county="德惠市" prefecture="长春市" province="吉林省" 220201 county="市辖区" prefecture="吉林市" province="吉林省" @@ -613,16 +657,19 @@ 220582 county="集安市" prefecture="通化市" province="吉林省" 220601 county="市辖区" prefecture="白山市" province="吉林省" 220602 county="浑江区" prefecture="白山市" province="吉林省" +220604 county="江源区" prefecture="白山市" province="吉林省" 220605 county="江源区" prefecture="白山市" province="吉林省" 220621 county="抚松县" prefecture="白山市" province="吉林省" 220622 county="靖宇县" prefecture="白山市" province="吉林省" 220623 county="长白朝鲜族自治县" prefecture="白山市" province="吉林省" +220625 county="江源县" prefecture="白山市" province="吉林省" 220681 county="临江市" prefecture="白山市" province="吉林省" 220701 county="市辖区" prefecture="松原市" province="吉林省" 220702 county="宁江区" prefecture="松原市" province="吉林省" 220721 county="前郭尔罗斯蒙古族自治县" prefecture="松原市" province="吉林省" 220722 county="长岭县" prefecture="松原市" province="吉林省" 220723 county="乾安县" prefecture="松原市" province="吉林省" +220724 county="扶余县" prefecture="松原市" province="吉林省" 220781 county="扶余市" prefecture="松原市" province="吉林省" 220801 county="市辖区" prefecture="白城市" province="吉林省" 220802 county="洮北区" prefecture="白城市" province="吉林省" @@ -642,11 +689,15 @@ 230102 county="道里区" prefecture="哈尔滨市" province="黑龙江省" 230103 county="南岗区" prefecture="哈尔滨市" province="黑龙江省" 230104 county="道外区" prefecture="哈尔滨市" province="黑龙江省" +230105 county="太平区" prefecture="哈尔滨市" province="黑龙江省" +230106 county="香坊区" prefecture="哈尔滨市" province="黑龙江省" +230107 county="动力区" prefecture="哈尔滨市" province="黑龙江省" 230108 county="平房区" prefecture="哈尔滨市" province="黑龙江省" 230109 county="松北区" prefecture="哈尔滨市" province="黑龙江省" 230110 county="香坊区" prefecture="哈尔滨市" province="黑龙江省" 230111 county="呼兰区" prefecture="哈尔滨市" province="黑龙江省" 230112 county="阿城区" prefecture="哈尔滨市" province="黑龙江省" +230121 county="呼兰县" prefecture="哈尔滨市" province="黑龙江省" 230123 county="依兰县" prefecture="哈尔滨市" province="黑龙江省" 230124 county="方正县" prefecture="哈尔滨市" province="黑龙江省" 230125 county="宾县" prefecture="哈尔滨市" province="黑龙江省" @@ -654,6 +705,7 @@ 230127 county="木兰县" prefecture="哈尔滨市" province="黑龙江省" 230128 county="通河县" prefecture="哈尔滨市" province="黑龙江省" 230129 county="延寿县" prefecture="哈尔滨市" province="黑龙江省" +230181 county="阿城市" prefecture="哈尔滨市" province="黑龙江省" 230182 county="双城市" prefecture="哈尔滨市" province="黑龙江省" 230183 county="尚志市" prefecture="哈尔滨市" province="黑龙江省" 230184 county="五常市" prefecture="哈尔滨市" province="黑龙江省" @@ -731,6 +783,7 @@ 230722 county="嘉荫县" prefecture="伊春市" province="黑龙江省" 230781 county="铁力市" prefecture="伊春市" province="黑龙江省" 230801 county="市辖区" prefecture="佳木斯市" province="黑龙江省" +230802 county="永红区" prefecture="佳木斯市" province="黑龙江省" 230803 county="向阳区" prefecture="佳木斯市" province="黑龙江省" 230804 county="前进区" prefecture="佳木斯市" province="黑龙江省" 230805 county="东风区" prefecture="佳木斯市" province="黑龙江省" @@ -775,10 +828,15 @@ 231281 county="安达市" prefecture="绥化市" province="黑龙江省" 231282 county="肇东市" prefecture="绥化市" province="黑龙江省" 231283 county="海伦市" prefecture="绥化市" province="黑龙江省" +232701 county="加格达奇区" prefecture="大兴安岭地区" province="黑龙江省" +232702 county="松岭区" prefecture="大兴安岭地区" province="黑龙江省" +232703 county="新林区" prefecture="大兴安岭地区" province="黑龙江省" +232704 county="呼中区" prefecture="大兴安岭地区" province="黑龙江省" 232721 county="呼玛县" prefecture="大兴安岭地区" province="黑龙江省" 232722 county="塔河县" prefecture="大兴安岭地区" province="黑龙江省" 232723 county="漠河县" prefecture="大兴安岭地区" province="黑龙江省" 310101 county="黄浦区" prefecture="市辖区" province="上海市" +310103 county="卢湾区" prefecture="市辖区" province="上海市" 310104 county="徐汇区" prefecture="市辖区" province="上海市" 310105 county="长宁区" prefecture="市辖区" province="上海市" 310106 county="静安区" prefecture="市辖区" province="上海市" @@ -793,13 +851,16 @@ 310116 county="金山区" prefecture="市辖区" province="上海市" 310117 county="松江区" prefecture="市辖区" province="上海市" 310118 county="青浦区" prefecture="市辖区" province="上海市" +310119 county="南汇区" prefecture="市辖区" province="上海市" 310120 county="奉贤区" prefecture="市辖区" province="上海市" 310230 county="崇明县" prefecture="县" province="上海市" 320101 county="市辖区" prefecture="南京市" province="江苏省" 320102 county="玄武区" prefecture="南京市" province="江苏省" +320103 county="白下区" prefecture="南京市" province="江苏省" 320104 county="秦淮区" prefecture="南京市" province="江苏省" 320105 county="建邺区" prefecture="南京市" province="江苏省" 320106 county="鼓楼区" prefecture="南京市" province="江苏省" +320107 county="下关区" prefecture="南京市" province="江苏省" 320111 county="浦口区" prefecture="南京市" province="江苏省" 320113 county="栖霞区" prefecture="南京市" province="江苏省" 320114 county="雨花台区" prefecture="南京市" province="江苏省" @@ -807,6 +868,8 @@ 320116 county="六合区" prefecture="南京市" province="江苏省" 320117 county="溧水区" prefecture="南京市" province="江苏省" 320118 county="高淳区" prefecture="南京市" province="江苏省" +320124 county="溧水县" prefecture="南京市" province="江苏省" +320125 county="高淳县" prefecture="南京市" province="江苏省" 320201 county="市辖区" prefecture="无锡市" province="江苏省" 320202 county="崇安区" prefecture="无锡市" province="江苏省" 320203 county="南长区" prefecture="无锡市" province="江苏省" @@ -819,11 +882,13 @@ 320301 county="市辖区" prefecture="徐州市" province="江苏省" 320302 county="鼓楼区" prefecture="徐州市" province="江苏省" 320303 county="云龙区" prefecture="徐州市" province="江苏省" +320304 county="九里区" prefecture="徐州市" province="江苏省" 320305 county="贾汪区" prefecture="徐州市" province="江苏省" 320311 county="泉山区" prefecture="徐州市" province="江苏省" 320312 county="铜山区" prefecture="徐州市" province="江苏省" 320321 county="丰县" prefecture="徐州市" province="江苏省" 320322 county="沛县" prefecture="徐州市" province="江苏省" +320323 county="铜山县" prefecture="徐州市" province="江苏省" 320324 county="睢宁县" prefecture="徐州市" province="江苏省" 320381 county="新沂市" prefecture="徐州市" province="江苏省" 320382 county="邳州市" prefecture="徐州市" province="江苏省" @@ -836,6 +901,9 @@ 320481 county="溧阳市" prefecture="常州市" province="江苏省" 320482 county="金坛市" prefecture="常州市" province="江苏省" 320501 county="市辖区" prefecture="苏州市" province="江苏省" +320502 county="沧浪区" prefecture="苏州市" province="江苏省" +320503 county="平江区" prefecture="苏州市" province="江苏省" +320504 county="金阊区" prefecture="苏州市" province="江苏省" 320505 county="虎丘区" prefecture="苏州市" province="江苏省" 320506 county="吴中区" prefecture="苏州市" province="江苏省" 320507 county="相城区" prefecture="苏州市" province="江苏省" @@ -844,6 +912,7 @@ 320581 county="常熟市" prefecture="苏州市" province="江苏省" 320582 county="张家港市" prefecture="苏州市" province="江苏省" 320583 county="昆山市" prefecture="苏州市" province="江苏省" +320584 county="吴江市" prefecture="苏州市" province="江苏省" 320585 county="太仓市" prefecture="苏州市" province="江苏省" 320601 county="市辖区" prefecture="南通市" province="江苏省" 320602 county="崇川区" prefecture="南通市" province="江苏省" @@ -853,11 +922,14 @@ 320623 county="如东县" prefecture="南通市" province="江苏省" 320681 county="启东市" prefecture="南通市" province="江苏省" 320682 county="如皋市" prefecture="南通市" province="江苏省" +320683 county="通州市" prefecture="南通市" province="江苏省" 320684 county="海门市" prefecture="南通市" province="江苏省" 320701 county="市辖区" prefecture="连云港市" province="江苏省" 320703 county="连云区" prefecture="连云港市" province="江苏省" +320705 county="新浦区" prefecture="连云港市" province="江苏省" 320706 county="海州区" prefecture="连云港市" province="江苏省" 320707 county="赣榆区" prefecture="连云港市" province="江苏省" +320721 county="赣榆县" prefecture="连云港市" province="江苏省" 320722 county="东海县" prefecture="连云港市" province="江苏省" 320723 county="灌云县" prefecture="连云港市" province="江苏省" 320724 county="灌南县" prefecture="连云港市" province="江苏省" @@ -878,15 +950,18 @@ 320923 county="阜宁县" prefecture="盐城市" province="江苏省" 320924 county="射阳县" prefecture="盐城市" province="江苏省" 320925 county="建湖县" prefecture="盐城市" province="江苏省" +320928 county="盐都县" prefecture="盐城市" province="江苏省" 320981 county="东台市" prefecture="盐城市" province="江苏省" 320982 county="大丰市" prefecture="盐城市" province="江苏省" 321001 county="市辖区" prefecture="扬州市" province="江苏省" 321002 county="广陵区" prefecture="扬州市" province="江苏省" 321003 county="邗江区" prefecture="扬州市" province="江苏省" +321011 county="维扬区" prefecture="扬州市" province="江苏省" 321012 county="江都区" prefecture="扬州市" province="江苏省" 321023 county="宝应县" prefecture="扬州市" province="江苏省" 321081 county="仪征市" prefecture="扬州市" province="江苏省" 321084 county="高邮市" prefecture="扬州市" province="江苏省" +321088 county="江都市" prefecture="扬州市" province="江苏省" 321101 county="市辖区" prefecture="镇江市" province="江苏省" 321102 county="京口区" prefecture="镇江市" province="江苏省" 321111 county="润州区" prefecture="镇江市" province="江苏省" @@ -901,9 +976,11 @@ 321281 county="兴化市" prefecture="泰州市" province="江苏省" 321282 county="靖江市" prefecture="泰州市" province="江苏省" 321283 county="泰兴市" prefecture="泰州市" province="江苏省" +321284 county="姜堰市" prefecture="泰州市" province="江苏省" 321301 county="市辖区" prefecture="宿迁市" province="江苏省" 321302 county="宿城区" prefecture="宿迁市" province="江苏省" 321311 county="宿豫区" prefecture="宿迁市" province="江苏省" +321321 county="宿豫县" prefecture="宿迁市" province="江苏省" 321322 county="沭阳县" prefecture="宿迁市" province="江苏省" 321323 county="泗阳县" prefecture="宿迁市" province="江苏省" 321324 county="泗洪县" prefecture="宿迁市" province="江苏省" @@ -963,8 +1040,10 @@ 330602 county="越城区" prefecture="绍兴市" province="浙江省" 330603 county="柯桥区" prefecture="绍兴市" province="浙江省" 330604 county="上虞区" prefecture="绍兴市" province="浙江省" +330621 county="绍兴县" prefecture="绍兴市" province="浙江省" 330624 county="新昌县" prefecture="绍兴市" province="浙江省" 330681 county="诸暨市" prefecture="绍兴市" province="浙江省" +330682 county="上虞市" prefecture="绍兴市" province="浙江省" 330683 county="嵊州市" prefecture="绍兴市" province="浙江省" 330701 county="市辖区" prefecture="金华市" province="浙江省" 330702 county="婺城区" prefecture="金华市" province="浙江省" @@ -1021,6 +1100,7 @@ 340201 county="市辖区" prefecture="芜湖市" province="安徽省" 340202 county="镜湖区" prefecture="芜湖市" province="安徽省" 340203 county="弋江区" prefecture="芜湖市" province="安徽省" +340204 county="新芜区" prefecture="芜湖市" province="安徽省" 340207 county="鸠江区" prefecture="芜湖市" province="安徽省" 340208 county="三山区" prefecture="芜湖市" province="安徽省" 340221 county="芜湖县" prefecture="芜湖市" province="安徽省" @@ -1043,6 +1123,7 @@ 340406 county="潘集区" prefecture="淮南市" province="安徽省" 340421 county="凤台县" prefecture="淮南市" province="安徽省" 340501 county="市辖区" prefecture="马鞍山市" province="安徽省" +340502 county="金家庄区" prefecture="马鞍山市" province="安徽省" 340503 county="花山区" prefecture="马鞍山市" province="安徽省" 340504 county="雨山区" prefecture="马鞍山市" province="安徽省" 340506 county="博望区" prefecture="马鞍山市" province="安徽省" @@ -1103,6 +1184,12 @@ 341322 county="萧县" prefecture="宿州市" province="安徽省" 341323 county="灵璧县" prefecture="宿州市" province="安徽省" 341324 county="泗县" prefecture="宿州市" province="安徽省" +341401 county="市辖区" prefecture="巢湖市" province="安徽省" +341402 county="居巢区" prefecture="巢湖市" province="安徽省" +341421 county="庐江县" prefecture="巢湖市" province="安徽省" +341422 county="无为县" prefecture="巢湖市" province="安徽省" +341423 county="含山县" prefecture="巢湖市" province="安徽省" +341424 county="和县" prefecture="巢湖市" province="安徽省" 341501 county="市辖区" prefecture="六安市" province="安徽省" 341502 county="金安区" prefecture="六安市" province="安徽省" 341503 county="裕安区" prefecture="六安市" province="安徽省" @@ -1144,7 +1231,9 @@ 350181 county="福清市" prefecture="福州市" province="福建省" 350182 county="长乐市" prefecture="福州市" province="福建省" 350201 county="市辖区" prefecture="厦门市" province="福建省" +350202 county="鼓浪屿区" prefecture="厦门市" province="福建省" 350203 county="思明区" prefecture="厦门市" province="福建省" +350204 county="开元区" prefecture="厦门市" province="福建省" 350205 county="海沧区" prefecture="厦门市" province="福建省" 350206 county="湖里区" prefecture="厦门市" province="福建省" 350211 county="集美区" prefecture="厦门市" province="福建省" @@ -1284,6 +1373,7 @@ 360734 county="寻乌县" prefecture="赣州市" province="江西省" 360735 county="石城县" prefecture="赣州市" province="江西省" 360781 county="瑞金市" prefecture="赣州市" province="江西省" +360782 county="南康市" prefecture="赣州市" province="江西省" 360801 county="市辖区" prefecture="吉安市" province="江西省" 360802 county="吉州区" prefecture="吉安市" province="江西省" 360803 county="青原区" prefecture="吉安市" province="江西省" @@ -1348,6 +1438,7 @@ 370201 county="市辖区" prefecture="青岛市" province="山东省" 370202 county="市南区" prefecture="青岛市" province="山东省" 370203 county="市北区" prefecture="青岛市" province="山东省" +370205 county="四方区" prefecture="青岛市" province="山东省" 370211 county="黄岛区" prefecture="青岛市" province="山东省" 370212 county="崂山区" prefecture="青岛市" province="山东省" 370213 county="李沧区" prefecture="青岛市" province="山东省" @@ -1355,6 +1446,7 @@ 370281 county="胶州市" prefecture="青岛市" province="山东省" 370282 county="即墨市" prefecture="青岛市" province="山东省" 370283 county="平度市" prefecture="青岛市" province="山东省" +370284 county="胶南市" prefecture="青岛市" province="山东省" 370285 county="莱西市" prefecture="青岛市" province="山东省" 370301 county="市辖区" prefecture="淄博市" province="山东省" 370302 county="淄川区" prefecture="淄博市" province="山东省" @@ -1405,6 +1497,7 @@ 370785 county="高密市" prefecture="潍坊市" province="山东省" 370786 county="昌邑市" prefecture="潍坊市" province="山东省" 370801 county="市辖区" prefecture="济宁市" province="山东省" +370802 county="市中区" prefecture="济宁市" province="山东省" 370811 county="任城区" prefecture="济宁市" province="山东省" 370812 county="兖州区" prefecture="济宁市" province="山东省" 370826 county="微山县" prefecture="济宁市" province="山东省" @@ -1415,9 +1508,11 @@ 370831 county="泗水县" prefecture="济宁市" province="山东省" 370832 county="梁山县" prefecture="济宁市" province="山东省" 370881 county="曲阜市" prefecture="济宁市" province="山东省" +370882 county="兖州市" prefecture="济宁市" province="山东省" 370883 county="邹城市" prefecture="济宁市" province="山东省" 370901 county="市辖区" prefecture="泰安市" province="山东省" 370902 county="泰山区" prefecture="泰安市" province="山东省" +370903 county="岱岳区" prefecture="泰安市" province="山东省" 370911 county="岱岳区" prefecture="泰安市" province="山东省" 370921 county="宁阳县" prefecture="泰安市" province="山东省" 370923 county="东平县" prefecture="泰安市" province="山东省" @@ -1426,6 +1521,7 @@ 371001 county="市辖区" prefecture="威海市" province="山东省" 371002 county="环翠区" prefecture="威海市" province="山东省" 371003 county="文登区" prefecture="威海市" province="山东省" +371081 county="文登市" prefecture="威海市" province="山东省" 371082 county="荣成市" prefecture="威海市" province="山东省" 371083 county="乳山市" prefecture="威海市" province="山东省" 371101 county="市辖区" prefecture="日照市" province="山东省" @@ -1452,6 +1548,7 @@ 371401 county="市辖区" prefecture="德州市" province="山东省" 371402 county="德城区" prefecture="德州市" province="山东省" 371403 county="陵城区" prefecture="德州市" province="山东省" +371421 county="陵县" prefecture="德州市" province="山东省" 371422 county="宁津县" prefecture="德州市" province="山东省" 371423 county="庆云县" prefecture="德州市" province="山东省" 371424 county="临邑县" prefecture="德州市" province="山东省" @@ -1476,6 +1573,7 @@ 371621 county="惠民县" prefecture="滨州市" province="山东省" 371622 county="阳信县" prefecture="滨州市" province="山东省" 371623 county="无棣县" prefecture="滨州市" province="山东省" +371624 county="沾化县" prefecture="滨州市" province="山东省" 371625 county="博兴县" prefecture="滨州市" province="山东省" 371626 county="邹平县" prefecture="滨州市" province="山东省" 371701 county="市辖区" prefecture="菏泽市" province="山东省" @@ -1518,6 +1616,7 @@ 410304 county="瀍河回族区" prefecture="洛阳市" province="河南省" 410305 county="涧西区" prefecture="洛阳市" province="河南省" 410306 county="吉利区" prefecture="洛阳市" province="河南省" +410307 county="洛龙区" prefecture="洛阳市" province="河南省" 410311 county="洛龙区" prefecture="洛阳市" province="河南省" 410322 county="孟津县" prefecture="洛阳市" province="河南省" 410323 county="新安县" prefecture="洛阳市" province="河南省" @@ -1577,6 +1676,7 @@ 410822 county="博爱县" prefecture="焦作市" province="河南省" 410823 county="武陟县" prefecture="焦作市" province="河南省" 410825 county="温县" prefecture="焦作市" province="河南省" +410881 county="济源市" prefecture="焦作市" province="河南省" 410882 county="沁阳市" prefecture="焦作市" province="河南省" 410883 county="孟州市" prefecture="焦作市" province="河南省" 410901 county="市辖区" prefecture="濮阳市" province="河南省" @@ -1599,6 +1699,7 @@ 411104 county="召陵区" prefecture="漯河市" province="河南省" 411121 county="舞阳县" prefecture="漯河市" province="河南省" 411122 county="临颍县" prefecture="漯河市" province="河南省" +411123 county="郾城县" prefecture="漯河市" province="河南省" 411201 county="市辖区" prefecture="三门峡市" province="河南省" 411202 county="湖滨区" prefecture="三门峡市" province="河南省" 411221 county="渑池县" prefecture="三门峡市" province="河南省" @@ -1689,6 +1790,7 @@ 420302 county="茅箭区" prefecture="十堰市" province="湖北省" 420303 county="张湾区" prefecture="十堰市" province="湖北省" 420304 county="郧阳区" prefecture="十堰市" province="湖北省" +420321 county="郧县" prefecture="十堰市" province="湖北省" 420322 county="郧西县" prefecture="十堰市" province="湖北省" 420323 county="竹山县" prefecture="十堰市" province="湖北省" 420324 county="竹溪县" prefecture="十堰市" province="湖北省" @@ -1764,6 +1866,7 @@ 421224 county="通山县" prefecture="咸宁市" province="湖北省" 421281 county="赤壁市" prefecture="咸宁市" province="湖北省" 421301 county="市辖区" prefecture="随州市" province="湖北省" +421302 county="曾都区" prefecture="随州市" province="湖北省" 421303 county="曾都区" prefecture="随州市" province="湖北省" 421321 county="随县" prefecture="随州市" province="湖北省" 421381 county="广水市" prefecture="随州市" province="湖北省" @@ -1787,6 +1890,7 @@ 430111 county="雨花区" prefecture="长沙市" province="湖南省" 430112 county="望城区" prefecture="长沙市" province="湖南省" 430121 county="长沙县" prefecture="长沙市" province="湖南省" +430122 county="望城县" prefecture="长沙市" province="湖南省" 430124 county="宁乡县" prefecture="长沙市" province="湖南省" 430181 county="浏阳市" prefecture="长沙市" province="湖南省" 430201 county="市辖区" prefecture="株洲市" province="湖南省" @@ -1915,10 +2019,12 @@ 433127 county="永顺县" prefecture="湘西土家族苗族自治州" province="湖南省" 433130 county="龙山县" prefecture="湘西土家族苗族自治州" province="湖南省" 440101 county="市辖区" prefecture="广州市" province="广东省" +440102 county="东山区" prefecture="广州市" province="广东省" 440103 county="荔湾区" prefecture="广州市" province="广东省" 440104 county="越秀区" prefecture="广州市" province="广东省" 440105 county="海珠区" prefecture="广州市" province="广东省" 440106 county="天河区" prefecture="广州市" province="广东省" +440107 county="芳村区" prefecture="广州市" province="广东省" 440111 county="白云区" prefecture="广州市" province="广东省" 440112 county="黄埔区" prefecture="广州市" province="广东省" 440113 county="番禺区" prefecture="广州市" province="广东省" @@ -1927,10 +2033,14 @@ 440116 county="萝岗区" prefecture="广州市" province="广东省" 440117 county="从化区" prefecture="广州市" province="广东省" 440118 county="增城区" prefecture="广州市" province="广东省" +440183 county="增城市" prefecture="广州市" province="广东省" +440184 county="从化市" prefecture="广州市" province="广东省" 440201 county="市辖区" prefecture="韶关市" province="广东省" +440202 county="北江区" prefecture="韶关市" province="广东省" 440203 county="武江区" prefecture="韶关市" province="广东省" 440204 county="浈江区" prefecture="韶关市" province="广东省" 440205 county="曲江区" prefecture="韶关市" province="广东省" +440221 county="曲江县" prefecture="韶关市" province="广东省" 440222 county="始兴县" prefecture="韶关市" province="广东省" 440224 county="仁化县" prefecture="韶关市" province="广东省" 440229 county="翁源县" prefecture="韶关市" province="广东省" @@ -1950,13 +2060,19 @@ 440403 county="斗门区" prefecture="珠海市" province="广东省" 440404 county="金湾区" prefecture="珠海市" province="广东省" 440501 county="市辖区" prefecture="汕头市" province="广东省" +440506 county="达濠区" prefecture="汕头市" province="广东省" 440507 county="龙湖区" prefecture="汕头市" province="广东省" +440508 county="金园区" prefecture="汕头市" province="广东省" +440509 county="升平区" prefecture="汕头市" province="广东省" +440510 county="河浦区" prefecture="汕头市" province="广东省" 440511 county="金平区" prefecture="汕头市" province="广东省" 440512 county="濠江区" prefecture="汕头市" province="广东省" 440513 county="潮阳区" prefecture="汕头市" province="广东省" 440514 county="潮南区" prefecture="汕头市" province="广东省" 440515 county="澄海区" prefecture="汕头市" province="广东省" 440523 county="南澳县" prefecture="汕头市" province="广东省" +440582 county="潮阳市" prefecture="汕头市" province="广东省" +440583 county="澄海市" prefecture="汕头市" province="广东省" 440601 county="市辖区" prefecture="佛山市" province="广东省" 440604 county="禅城区" prefecture="佛山市" province="广东省" 440605 county="南海区" prefecture="佛山市" province="广东省" @@ -1983,7 +2099,9 @@ 440883 county="吴川市" prefecture="湛江市" province="广东省" 440901 county="市辖区" prefecture="茂名市" province="广东省" 440902 county="茂南区" prefecture="茂名市" province="广东省" +440903 county="茂港区" prefecture="茂名市" province="广东省" 440904 county="电白区" prefecture="茂名市" province="广东省" +440923 county="电白县" prefecture="茂名市" province="广东省" 440981 county="高州市" prefecture="茂名市" province="广东省" 440982 county="化州市" prefecture="茂名市" province="广东省" 440983 county="信宜市" prefecture="茂名市" province="广东省" @@ -2002,9 +2120,11 @@ 441322 county="博罗县" prefecture="惠州市" province="广东省" 441323 county="惠东县" prefecture="惠州市" province="广东省" 441324 county="龙门县" prefecture="惠州市" province="广东省" +441381 county="惠阳市" prefecture="惠州市" province="广东省" 441401 county="市辖区" prefecture="梅州市" province="广东省" 441402 county="梅江区" prefecture="梅州市" province="广东省" 441403 county="梅县区" prefecture="梅州市" province="广东省" +441421 county="梅县" prefecture="梅州市" province="广东省" 441422 county="大埔县" prefecture="梅州市" province="广东省" 441423 county="丰顺县" prefecture="梅州市" province="广东省" 441424 county="五华县" prefecture="梅州市" province="广东省" @@ -2035,15 +2155,18 @@ 441823 county="阳山县" prefecture="清远市" province="广东省" 441825 county="连山壮族瑶族自治县" prefecture="清远市" province="广东省" 441826 county="连南瑶族自治县" prefecture="清远市" province="广东省" +441827 county="清新县" prefecture="清远市" province="广东省" 441881 county="英德市" prefecture="清远市" province="广东省" 441882 county="连州市" prefecture="清远市" province="广东省" 445101 county="市辖区" prefecture="潮州市" province="广东省" 445102 county="湘桥区" prefecture="潮州市" province="广东省" 445103 county="潮安区" prefecture="潮州市" province="广东省" +445121 county="潮安县" prefecture="潮州市" province="广东省" 445122 county="饶平县" prefecture="潮州市" province="广东省" 445201 county="市辖区" prefecture="揭阳市" province="广东省" 445202 county="榕城区" prefecture="揭阳市" province="广东省" 445203 county="揭东区" prefecture="揭阳市" province="广东省" +445221 county="揭东县" prefecture="揭阳市" province="广东省" 445222 county="揭西县" prefecture="揭阳市" province="广东省" 445224 county="惠来县" prefecture="揭阳市" province="广东省" 445281 county="普宁市" prefecture="揭阳市" province="广东省" @@ -2052,14 +2175,18 @@ 445303 county="云安区" prefecture="云浮市" province="广东省" 445321 county="新兴县" prefecture="云浮市" province="广东省" 445322 county="郁南县" prefecture="云浮市" province="广东省" +445323 county="云安县" prefecture="云浮市" province="广东省" 445381 county="罗定市" prefecture="云浮市" province="广东省" 450101 county="市辖区" prefecture="南宁市" province="广西壮族自治区" 450102 county="兴宁区" prefecture="南宁市" province="广西壮族自治区" 450103 county="青秀区" prefecture="南宁市" province="广西壮族自治区" +450104 county="城北区" prefecture="南宁市" province="广西壮族自治区" 450105 county="江南区" prefecture="南宁市" province="广西壮族自治区" +450106 county="永新区" prefecture="南宁市" province="广西壮族自治区" 450107 county="西乡塘区" prefecture="南宁市" province="广西壮族自治区" 450108 county="良庆区" prefecture="南宁市" province="广西壮族自治区" 450109 county="邕宁区" prefecture="南宁市" province="广西壮族自治区" +450121 county="邕宁县" prefecture="南宁市" province="广西壮族自治区" 450122 county="武鸣县" prefecture="南宁市" province="广西壮族自治区" 450123 county="隆安县" prefecture="南宁市" province="广西壮族自治区" 450124 county="马山县" prefecture="南宁市" province="广西壮族自治区" @@ -2085,6 +2212,7 @@ 450311 county="雁山区" prefecture="桂林市" province="广西壮族自治区" 450312 county="临桂区" prefecture="桂林市" province="广西壮族自治区" 450321 county="阳朔县" prefecture="桂林市" province="广西壮族自治区" +450322 county="临桂县" prefecture="桂林市" province="广西壮族自治区" 450323 county="灵川县" prefecture="桂林市" province="广西壮族自治区" 450324 county="全州县" prefecture="桂林市" province="广西壮族自治区" 450325 county="兴安县" prefecture="桂林市" province="广西壮族自治区" @@ -2097,8 +2225,10 @@ 450332 county="恭城瑶族自治县" prefecture="桂林市" province="广西壮族自治区" 450401 county="市辖区" prefecture="梧州市" province="广西壮族自治区" 450403 county="万秀区" prefecture="梧州市" province="广西壮族自治区" +450404 county="蝶山区" prefecture="梧州市" province="广西壮族自治区" 450405 county="长洲区" prefecture="梧州市" province="广西壮族自治区" 450406 county="龙圩区" prefecture="梧州市" province="广西壮族自治区" +450411 county="市郊区" prefecture="梧州市" province="广西壮族自治区" 450421 county="苍梧县" prefecture="梧州市" province="广西壮族自治区" 450422 county="藤县" prefecture="梧州市" province="广西壮族自治区" 450423 county="蒙山县" prefecture="梧州市" province="广西壮族自治区" @@ -2187,6 +2317,9 @@ 460203 county="吉阳区" prefecture="三亚市" province="海南省" 460204 county="天涯区" prefecture="三亚市" province="海南省" 460205 county="崖州区" prefecture="三亚市" province="海南省" +460321 county="西沙群岛" prefecture="三沙市" province="海南省" +460322 county="南沙群岛" prefecture="三沙市" province="海南省" +460323 county="中沙群岛的岛礁及其海域" prefecture="三沙市" province="海南省" 469001 county="五指山市" prefecture="省直辖县级行政区划" province="海南省" 469002 county="琼海市" prefecture="省直辖县级行政区划" province="海南省" 469003 county="儋州市" prefecture="省直辖县级行政区划" province="海南省" @@ -2203,6 +2336,15 @@ 469028 county="陵水黎族自治县" prefecture="省直辖县级行政区划" province="海南省" 469029 county="保亭黎族苗族自治县" prefecture="省直辖县级行政区划" province="海南省" 469030 county="琼中黎族苗族自治县" prefecture="省直辖县级行政区划" province="海南省" +469031 county="西沙群岛" prefecture="省直辖县级行政区划" province="海南省" +469032 county="南沙群岛" prefecture="省直辖县级行政区划" province="海南省" +469033 county="中沙群岛的岛礁及其海域" prefecture="省直辖县级行政区划" province="海南省" +469034 county="陵水黎族自治县" prefecture="省直辖县级行政区划" province="海南省" +469035 county="保亭黎族苗族自治县" prefecture="省直辖县级行政区划" province="海南省" +469036 county="琼中黎族苗族自治县" prefecture="省直辖县级行政区划" province="海南省" +469037 county="西沙群岛" prefecture="省直辖县级行政区划" province="海南省" +469038 county="南沙群岛" prefecture="省直辖县级行政区划" province="海南省" +469039 county="中沙群岛的岛礁及其海域" prefecture="省直辖县级行政区划" province="海南省" 500101 county="万州区" prefecture="市辖区" province="重庆市" 500102 county="涪陵区" prefecture="市辖区" province="重庆市" 500103 county="渝中区" prefecture="市辖区" province="重庆市" @@ -2224,8 +2366,12 @@ 500119 county="南川区" prefecture="市辖区" province="重庆市" 500120 county="璧山区" prefecture="市辖区" province="重庆市" 500151 county="铜梁区" prefecture="市辖区" province="重庆市" +500222 county="綦江县" prefecture="县" province="重庆市" 500223 county="潼南县" prefecture="县" province="重庆市" +500224 county="铜梁县" prefecture="县" province="重庆市" +500225 county="大足县" prefecture="县" province="重庆市" 500226 county="荣昌县" prefecture="县" province="重庆市" +500227 county="璧山县" prefecture="县" province="重庆市" 500228 county="梁平县" prefecture="县" province="重庆市" 500229 county="城口县" prefecture="县" province="重庆市" 500230 county="丰都县" prefecture="县" province="重庆市" @@ -2241,6 +2387,10 @@ 500241 county="秀山土家族苗族自治县" prefecture="县" province="重庆市" 500242 county="酉阳土家族苗族自治县" prefecture="县" province="重庆市" 500243 county="彭水苗族土家族自治县" prefecture="县" province="重庆市" +500381 county="江津市" prefecture="市" province="重庆市" +500382 county="合川市" prefecture="市" province="重庆市" +500383 county="永川市" prefecture="市" province="重庆市" +500384 county="南川市" prefecture="市" province="重庆市" 510101 county="市辖区" prefecture="成都市" province="四川省" 510104 county="锦江区" prefecture="成都市" province="四川省" 510105 county="青羊区" prefecture="成都市" province="四川省" @@ -2253,6 +2403,7 @@ 510115 county="温江区" prefecture="成都市" province="四川省" 510121 county="金堂县" prefecture="成都市" province="四川省" 510122 county="双流县" prefecture="成都市" province="四川省" +510123 county="温江县" prefecture="成都市" province="四川省" 510124 county="郫县" prefecture="成都市" province="四川省" 510129 county="大邑县" prefecture="成都市" province="四川省" 510131 county="蒲江县" prefecture="成都市" province="四川省" @@ -2308,6 +2459,7 @@ 510823 county="剑阁县" prefecture="广元市" province="四川省" 510824 county="苍溪县" prefecture="广元市" province="四川省" 510901 county="市辖区" prefecture="遂宁市" province="四川省" +510902 county="市中区" prefecture="遂宁市" province="四川省" 510903 county="船山区" prefecture="遂宁市" province="四川省" 510904 county="安居区" prefecture="遂宁市" province="四川省" 510921 county="蓬溪县" prefecture="遂宁市" province="四川省" @@ -2352,6 +2504,7 @@ 511502 county="翠屏区" prefecture="宜宾市" province="四川省" 511503 county="南溪区" prefecture="宜宾市" province="四川省" 511521 county="宜宾县" prefecture="宜宾市" province="四川省" +511522 county="南溪县" prefecture="宜宾市" province="四川省" 511523 county="江安县" prefecture="宜宾市" province="四川省" 511524 county="长宁县" prefecture="宜宾市" province="四川省" 511525 county="高县" prefecture="宜宾市" province="四川省" @@ -2369,6 +2522,7 @@ 511701 county="市辖区" prefecture="达州市" province="四川省" 511702 county="通川区" prefecture="达州市" province="四川省" 511703 county="达川区" prefecture="达州市" province="四川省" +511721 county="达县" prefecture="达州市" province="四川省" 511722 county="宣汉县" prefecture="达州市" province="四川省" 511723 county="开江县" prefecture="达州市" province="四川省" 511724 county="大竹县" prefecture="达州市" province="四川省" @@ -2377,6 +2531,7 @@ 511801 county="市辖区" prefecture="雅安市" province="四川省" 511802 county="雨城区" prefecture="雅安市" province="四川省" 511803 county="名山区" prefecture="雅安市" province="四川省" +511821 county="名山县" prefecture="雅安市" province="四川省" 511822 county="荥经县" prefecture="雅安市" province="四川省" 511823 county="汉源县" prefecture="雅安市" province="四川省" 511824 county="石棉县" prefecture="雅安市" province="四川省" @@ -2448,6 +2603,7 @@ 520111 county="花溪区" prefecture="贵阳市" province="贵州省" 520112 county="乌当区" prefecture="贵阳市" province="贵州省" 520113 county="白云区" prefecture="贵阳市" province="贵州省" +520114 county="小河区" prefecture="贵阳市" province="贵州省" 520115 county="观山湖区" prefecture="贵阳市" province="贵州省" 520121 county="开阳县" prefecture="贵阳市" province="贵州省" 520122 county="息烽县" prefecture="贵阳市" province="贵州省" @@ -2499,6 +2655,16 @@ 520626 county="德江县" prefecture="铜仁市" province="贵州省" 520627 county="沿河土家族自治县" prefecture="铜仁市" province="贵州省" 520628 county="松桃苗族自治县" prefecture="铜仁市" province="贵州省" +522201 county="铜仁市" prefecture="铜仁地区" province="贵州省" +522222 county="江口县" prefecture="铜仁地区" province="贵州省" +522223 county="玉屏侗族自治县" prefecture="铜仁地区" province="贵州省" +522224 county="石阡县" prefecture="铜仁地区" province="贵州省" +522225 county="思南县" prefecture="铜仁地区" province="贵州省" +522226 county="印江土家族苗族自治县" prefecture="铜仁地区" province="贵州省" +522227 county="德江县" prefecture="铜仁地区" province="贵州省" +522228 county="沿河土家族自治县" prefecture="铜仁地区" province="贵州省" +522229 county="松桃苗族自治县" prefecture="铜仁地区" province="贵州省" +522230 county="万山特区" prefecture="铜仁地区" province="贵州省" 522301 county="兴义市" prefecture="黔西南布依族苗族自治州" province="贵州省" 522322 county="兴仁县" prefecture="黔西南布依族苗族自治州" province="贵州省" 522323 county="普安县" prefecture="黔西南布依族苗族自治州" province="贵州省" @@ -2507,6 +2673,14 @@ 522326 county="望谟县" prefecture="黔西南布依族苗族自治州" province="贵州省" 522327 county="册亨县" prefecture="黔西南布依族苗族自治州" province="贵州省" 522328 county="安龙县" prefecture="黔西南布依族苗族自治州" province="贵州省" +522401 county="毕节市" prefecture="毕节地区" province="贵州省" +522422 county="大方县" prefecture="毕节地区" province="贵州省" +522423 county="黔西县" prefecture="毕节地区" province="贵州省" +522424 county="金沙县" prefecture="毕节地区" province="贵州省" +522425 county="织金县" prefecture="毕节地区" province="贵州省" +522426 county="纳雍县" prefecture="毕节地区" province="贵州省" +522427 county="威宁彝族回族苗族自治县" prefecture="毕节地区" province="贵州省" +522428 county="赫章县" prefecture="毕节地区" province="贵州省" 522601 county="凯里市" prefecture="黔东南苗族侗族自治州" province="贵州省" 522622 county="黄平县" prefecture="黔东南苗族侗族自治州" province="贵州省" 522623 county="施秉县" prefecture="黔东南苗族侗族自治州" province="贵州省" @@ -2542,6 +2716,7 @@ 530112 county="西山区" prefecture="昆明市" province="云南省" 530113 county="东川区" prefecture="昆明市" province="云南省" 530114 county="呈贡区" prefecture="昆明市" province="云南省" +530121 county="呈贡县" prefecture="昆明市" province="云南省" 530122 county="晋宁县" prefecture="昆明市" province="云南省" 530124 county="富民县" prefecture="昆明市" province="云南省" 530125 county="宜良县" prefecture="昆明市" province="云南省" @@ -2628,9 +2803,11 @@ 532502 county="开远市" prefecture="红河哈尼族彝族自治州" province="云南省" 532503 county="蒙自市" prefecture="红河哈尼族彝族自治州" province="云南省" 532504 county="弥勒市" prefecture="红河哈尼族彝族自治州" province="云南省" +532522 county="蒙自县" prefecture="红河哈尼族彝族自治州" province="云南省" 532523 county="屏边苗族自治县" prefecture="红河哈尼族彝族自治州" province="云南省" 532524 county="建水县" prefecture="红河哈尼族彝族自治州" province="云南省" 532525 county="石屏县" prefecture="红河哈尼族彝族自治州" province="云南省" +532526 county="弥勒县" prefecture="红河哈尼族彝族自治州" province="云南省" 532527 county="泸西县" prefecture="红河哈尼族彝族自治州" province="云南省" 532528 county="元阳县" prefecture="红河哈尼族彝族自治州" province="云南省" 532529 county="红河县" prefecture="红河哈尼族彝族自治州" province="云南省" @@ -2638,6 +2815,7 @@ 532531 county="绿春县" prefecture="红河哈尼族彝族自治州" province="云南省" 532532 county="河口瑶族自治县" prefecture="红河哈尼族彝族自治州" province="云南省" 532601 county="文山市" prefecture="文山壮族苗族自治州" province="云南省" +532621 county="文山县" prefecture="文山壮族苗族自治州" province="云南省" 532622 county="砚山县" prefecture="文山壮族苗族自治州" province="云南省" 532623 county="西畴县" prefecture="文山壮族苗族自治州" province="云南省" 532624 county="麻栗坡县" prefecture="文山壮族苗族自治州" province="云南省" @@ -2645,6 +2823,16 @@ 532626 county="丘北县" prefecture="文山壮族苗族自治州" province="云南省" 532627 county="广南县" prefecture="文山壮族苗族自治州" province="云南省" 532628 county="富宁县" prefecture="文山壮族苗族自治州" province="云南省" +532701 county="思茅市" prefecture="思茅地区" province="云南省" +532722 county="普洱哈尼族彝族自治县" prefecture="思茅地区" province="云南省" +532723 county="墨江哈尼族自治县" prefecture="思茅地区" province="云南省" +532724 county="景东彝族自治县" prefecture="思茅地区" province="云南省" +532725 county="景谷傣族彝族自治县" prefecture="思茅地区" province="云南省" +532726 county="镇沅彝族哈尼族拉祜族自治县" prefecture="思茅地区" province="云南省" +532727 county="江城哈尼族彝族自治县" prefecture="思茅地区" province="云南省" +532728 county="孟连傣族拉祜族佤族自治县" prefecture="思茅地区" province="云南省" +532729 county="澜沧拉祜族自治县" prefecture="思茅地区" province="云南省" +532730 county="西盟佤族自治县" prefecture="思茅地区" province="云南省" 532801 county="景洪市" prefecture="西双版纳傣族自治州" province="云南省" 532822 county="勐海县" prefecture="西双版纳傣族自治州" province="云南省" 532823 county="勐腊县" prefecture="西双版纳傣族自治州" province="云南省" @@ -2672,6 +2860,14 @@ 533421 county="香格里拉县" prefecture="迪庆藏族自治州" province="云南省" 533422 county="德钦县" prefecture="迪庆藏族自治州" province="云南省" 533423 county="维西傈僳族自治县" prefecture="迪庆藏族自治州" province="云南省" +533521 county="临沧县" prefecture="临沧地区" province="云南省" +533522 county="凤庆县" prefecture="临沧地区" province="云南省" +533523 county="云县" prefecture="临沧地区" province="云南省" +533524 county="永德县" prefecture="临沧地区" province="云南省" +533525 county="镇康县" prefecture="临沧地区" province="云南省" +533526 county="双江拉祜族佤族布朗族傣族自治县" prefecture="临沧地区" province="云南省" +533527 county="耿马傣族佤族自治县" prefecture="临沧地区" province="云南省" +533528 county="沧源佤族自治县" prefecture="临沧地区" province="云南省" 540101 county="市辖区" prefecture="拉萨市" province="西藏自治区" 540102 county="城关区" prefecture="拉萨市" province="西藏自治区" 540121 county="林周县" prefecture="拉萨市" province="西藏自治区" @@ -2722,6 +2918,24 @@ 542231 county="隆子县" prefecture="山南地区" province="西藏自治区" 542232 county="错那县" prefecture="山南地区" province="西藏自治区" 542233 county="浪卡子县" prefecture="山南地区" province="西藏自治区" +542301 county="日喀则市" prefecture="日喀则地区" province="西藏自治区" +542322 county="南木林县" prefecture="日喀则地区" province="西藏自治区" +542323 county="江孜县" prefecture="日喀则地区" province="西藏自治区" +542324 county="定日县" prefecture="日喀则地区" province="西藏自治区" +542325 county="萨迦县" prefecture="日喀则地区" province="西藏自治区" +542326 county="拉孜县" prefecture="日喀则地区" province="西藏自治区" +542327 county="昂仁县" prefecture="日喀则地区" province="西藏自治区" +542328 county="谢通门县" prefecture="日喀则地区" province="西藏自治区" +542329 county="白朗县" prefecture="日喀则地区" province="西藏自治区" +542330 county="仁布县" prefecture="日喀则地区" province="西藏自治区" +542331 county="康马县" prefecture="日喀则地区" province="西藏自治区" +542332 county="定结县" prefecture="日喀则地区" province="西藏自治区" +542333 county="仲巴县" prefecture="日喀则地区" province="西藏自治区" +542334 county="亚东县" prefecture="日喀则地区" province="西藏自治区" +542335 county="吉隆县" prefecture="日喀则地区" province="西藏自治区" +542336 county="聂拉木县" prefecture="日喀则地区" province="西藏自治区" +542337 county="萨嘎县" prefecture="日喀则地区" province="西藏自治区" +542338 county="岗巴县" prefecture="日喀则地区" province="西藏自治区" 542421 county="那曲县" prefecture="那曲地区" province="西藏自治区" 542422 county="嘉黎县" prefecture="那曲地区" province="西藏自治区" 542423 county="比如县" prefecture="那曲地区" province="西藏自治区" @@ -2770,6 +2984,7 @@ 610302 county="渭滨区" prefecture="宝鸡市" province="陕西省" 610303 county="金台区" prefecture="宝鸡市" province="陕西省" 610304 county="陈仓区" prefecture="宝鸡市" province="陕西省" +610321 county="宝鸡县" prefecture="宝鸡市" province="陕西省" 610322 county="凤翔县" prefecture="宝鸡市" province="陕西省" 610323 county="岐山县" prefecture="宝鸡市" province="陕西省" 610324 county="扶风县" prefecture="宝鸡市" province="陕西省" @@ -2946,6 +3161,22 @@ 621226 county="礼县" prefecture="陇南市" province="甘肃省" 621227 county="徽县" prefecture="陇南市" province="甘肃省" 621228 county="两当县" prefecture="陇南市" province="甘肃省" +622421 county="定西县" prefecture="定西地区" province="甘肃省" +622424 county="通渭县" prefecture="定西地区" province="甘肃省" +622425 county="陇西县" prefecture="定西地区" province="甘肃省" +622426 county="渭源县" prefecture="定西地区" province="甘肃省" +622427 county="临洮县" prefecture="定西地区" province="甘肃省" +622428 county="漳县" prefecture="定西地区" province="甘肃省" +622429 county="岷县" prefecture="定西地区" province="甘肃省" +622621 county="武都县" prefecture="陇南地区" province="甘肃省" +622623 county="宕昌县" prefecture="陇南地区" province="甘肃省" +622624 county="成县" prefecture="陇南地区" province="甘肃省" +622625 county="康县" prefecture="陇南地区" province="甘肃省" +622626 county="文县" prefecture="陇南地区" province="甘肃省" +622627 county="西和县" prefecture="陇南地区" province="甘肃省" +622628 county="礼县" prefecture="陇南地区" province="甘肃省" +622629 county="两当县" prefecture="陇南地区" province="甘肃省" +622630 county="徽县" prefecture="陇南地区" province="甘肃省" 622901 county="临夏市" prefecture="临夏回族自治州" province="甘肃省" 622921 county="临夏县" prefecture="临夏回族自治州" province="甘肃省" 622922 county="康乐县" prefecture="临夏回族自治州" province="甘肃省" @@ -2976,6 +3207,12 @@ 630223 county="互助土族自治县" prefecture="海东市" province="青海省" 630224 county="化隆回族自治县" prefecture="海东市" province="青海省" 630225 county="循化撒拉族自治县" prefecture="海东市" province="青海省" +632121 county="平安县" prefecture="海东地区" province="青海省" +632122 county="民和回族土族自治县" prefecture="海东地区" province="青海省" +632123 county="乐都县" prefecture="海东地区" province="青海省" +632126 county="互助土族自治县" prefecture="海东地区" province="青海省" +632127 county="化隆回族自治县" prefecture="海东地区" province="青海省" +632128 county="循化撒拉族自治县" prefecture="海东地区" province="青海省" 632221 county="门源回族自治县" prefecture="海北藏族自治州" province="青海省" 632222 county="祁连县" prefecture="海北藏族自治州" province="青海省" 632223 county="海晏县" prefecture="海北藏族自治州" province="青海省" @@ -2996,6 +3233,7 @@ 632625 county="久治县" prefecture="果洛藏族自治州" province="青海省" 632626 county="玛多县" prefecture="果洛藏族自治州" province="青海省" 632701 county="玉树市" prefecture="玉树藏族自治州" province="青海省" +632721 county="玉树县" prefecture="玉树藏族自治州" province="青海省" 632722 county="杂多县" prefecture="玉树藏族自治州" province="青海省" 632723 county="称多县" prefecture="玉树藏族自治州" province="青海省" 632724 county="治多县" prefecture="玉树藏族自治州" province="青海省" @@ -3015,16 +3253,22 @@ 640181 county="灵武市" prefecture="银川市" province="宁夏回族自治区" 640201 county="市辖区" prefecture="石嘴山市" province="宁夏回族自治区" 640202 county="大武口区" prefecture="石嘴山市" province="宁夏回族自治区" +640203 county="石嘴山区" prefecture="石嘴山市" province="宁夏回族自治区" 640205 county="惠农区" prefecture="石嘴山市" province="宁夏回族自治区" 640221 county="平罗县" prefecture="石嘴山市" province="宁夏回族自治区" +640222 county="陶乐县" prefecture="石嘴山市" province="宁夏回族自治区" +640223 county="惠农县" prefecture="石嘴山市" province="宁夏回族自治区" 640301 county="市辖区" prefecture="吴忠市" province="宁夏回族自治区" 640302 county="利通区" prefecture="吴忠市" province="宁夏回族自治区" 640303 county="红寺堡区" prefecture="吴忠市" province="宁夏回族自治区" +640321 county="中卫县" prefecture="吴忠市" province="宁夏回族自治区" +640322 county="中宁县" prefecture="吴忠市" province="宁夏回族自治区" 640323 county="盐池县" prefecture="吴忠市" province="宁夏回族自治区" 640324 county="同心县" prefecture="吴忠市" province="宁夏回族自治区" 640381 county="青铜峡市" prefecture="吴忠市" province="宁夏回族自治区" 640401 county="市辖区" prefecture="固原市" province="宁夏回族自治区" 640402 county="原州区" prefecture="固原市" province="宁夏回族自治区" +640421 county="海原县" prefecture="固原市" province="宁夏回族自治区" 640422 county="西吉县" prefecture="固原市" province="宁夏回族自治区" 640423 county="隆德县" prefecture="固原市" province="宁夏回族自治区" 640424 county="泾源县" prefecture="固原市" province="宁夏回族自治区" @@ -3040,6 +3284,7 @@ 650105 county="水磨沟区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" 650106 county="头屯河区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" 650107 county="达坂城区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" +650108 county="东山区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" 650109 county="米东区" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" 650121 county="乌鲁木齐县" prefecture="乌鲁木齐市" province="新疆维吾尔自治区" 650201 county="市辖区" prefecture="克拉玛依市" province="新疆维吾尔自治区" @@ -3055,6 +3300,7 @@ 652223 county="伊吾县" prefecture="哈密地区" province="新疆维吾尔自治区" 652301 county="昌吉市" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" 652302 county="阜康市" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" +652303 county="米泉市" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" 652323 county="呼图壁县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" 652324 county="玛纳斯县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" 652325 county="奇台县" prefecture="昌吉回族自治州" province="新疆维吾尔自治区" From 8fe44f98a0d8709912ddf7fc383c14d72472d819 Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Tue, 28 Apr 2015 15:44:16 +0200 Subject: [PATCH 046/654] Implement alternate VIES check Add a function to stdnum.eu.vat so that when one does a VIES VAT number check, one gets a proof (certificate) that one did the check, as defence against the VAT administration later putting this in doubt. This certificate is provided by the VIES service, if one provides one's own VAT number. --- stdnum/eu/vat.py | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index 30a13c35..a0ff0b93 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -1,7 +1,8 @@ # vat.py - functions for handling European VAT numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong +# Copyright (C) 2015 Lionel Elie Mamane # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -44,8 +45,8 @@ country_codes = set([ 'at', 'be', 'bg', 'cy', 'cz', 'de', 'dk', 'ee', 'es', 'fi', 'fr', 'gb', - 'gr', 'hr', 'hu', 'ie', 'it', 'lt', 'lu', 'lv', 'mt', 'nl', 'pl', 'pt', 'ro', - 'se', 'si', 'sk' + 'gr', 'hr', 'hu', 'ie', 'it', 'lt', 'lu', 'lv', 'mt', 'nl', 'pl', 'pt', + 'ro', 'se', 'si', 'sk', ]) """The collection of country codes that are queried. Greece is listed with a country code of gr while for VAT purposes el is used instead.""" @@ -114,14 +115,10 @@ def guess_country(number): if _get_cc_module(cc).is_valid(number)] -def check_vies(number): # pragma: no cover (no tests for this function) - """Queries the online European Commission VAT Information Exchange - System (VIES) for validity of the provided number. Note that the - service has usage limitations (see the VIES website for details). - This returns a dict-like object.""" - # this function isn't automatically tested because it would require - # network access for the tests and unnecessarily load the VIES website - number = compact(number) +def _get_client(): # pragma: no cover (no tests for this function) + """Get a SOAP client for performing VIES requests.""" + # this function isn't automatically tested because the functions using + # it are not automatically tested global _vies_client if not _vies_client: from suds.client import Client @@ -130,4 +127,30 @@ def check_vies(number): # pragma: no cover (no tests for this function) except ImportError: from urllib.request import getproxies _vies_client = Client(vies_wsdl, proxy=getproxies()) - return _vies_client.service.checkVat(number[:2], number[2:]) + return _vies_client + + +def check_vies(number): # pragma: no cover (no tests for this function) + """Queries the online European Commission VAT Information Exchange + System (VIES) for validity of the provided number. Note that the + service has usage limitations (see the VIES website for details). + This returns a dict-like object.""" + # this function isn't automatically tested because it would require + # network access for the tests and unnecessarily load the VIES website + number = compact(number) + return _get_client().service.checkVat(number[:2], number[2:]) + + +def check_vies_approx(number, requester): # pragma: no cover + """Queries the online European Commission VAT Information Exchange System + (VIES) for validity of the provided number, providing a validity + certificate as proof. You will need to give your own VAT number for this + to work. Note that the service has usage limitations (see the VIES + website for details). This returns a dict-like object.""" + # this function isn't automatically tested because it would require + # network access for the tests and unnecessarily load the VIES website + number = compact(number) + requester = compact(requester) + return _get_client.service.checkVatApprox( + countryCode=number[:2], vatNumber=number[2:], + requesterCountryCode=requester[:2], requesterVatNumber=requester[2:]) From a1a134e91b0ca3ccdff69929c4555c62e10c8714 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 12 Jul 2015 13:14:22 +0200 Subject: [PATCH 047/654] Fall back to pysimplesoap if suds is unavailable Initial testing seems to suggest that proxy-support is not complete with pysimplesoap (at least httplib2 and PySocks seem to be required). --- stdnum/eu/vat.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index a0ff0b93..d867e3bd 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -121,12 +121,18 @@ def _get_client(): # pragma: no cover (no tests for this function) # it are not automatically tested global _vies_client if not _vies_client: - from suds.client import Client try: from urllib import getproxies except ImportError: from urllib.request import getproxies - _vies_client = Client(vies_wsdl, proxy=getproxies()) + # try suds first + try: + from suds.client import Client + _vies_client = Client(vies_wsdl, proxy=getproxies()).service + except ImportError: + # fall back to using pysimplesoap + from pysimplesoap.client import SoapClient + _vies_client = SoapClient(wsdl=vies_wsdl, proxy=getproxies()) return _vies_client @@ -138,7 +144,7 @@ def check_vies(number): # pragma: no cover (no tests for this function) # this function isn't automatically tested because it would require # network access for the tests and unnecessarily load the VIES website number = compact(number) - return _get_client().service.checkVat(number[:2], number[2:]) + return _get_client().checkVat(number[:2], number[2:]) def check_vies_approx(number, requester): # pragma: no cover @@ -151,6 +157,6 @@ def check_vies_approx(number, requester): # pragma: no cover # network access for the tests and unnecessarily load the VIES website number = compact(number) requester = compact(requester) - return _get_client.service.checkVatApprox( + return _get_client.checkVatApprox( countryCode=number[:2], vatNumber=number[2:], requesterCountryCode=requester[:2], requesterVatNumber=requester[2:]) From 8d309929fb4e198472e74dd4849795c265293b28 Mon Sep 17 00:00:00 2001 From: Lari Haataja Date: Tue, 16 Jun 2015 16:18:56 +0300 Subject: [PATCH 048/654] Validation for Finnish association identifier --- stdnum/fi/associationid.py | 76 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 stdnum/fi/associationid.py diff --git a/stdnum/fi/associationid.py b/stdnum/fi/associationid.py new file mode 100644 index 00000000..7796d702 --- /dev/null +++ b/stdnum/fi/associationid.py @@ -0,0 +1,76 @@ +# associationid.py - functions for handling Finnish association registry id +# coding: utf-8 +# +# Copyright (C) 2015 Holvi Payment Services Oy +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +""" Finnish Association Identifier + +The number consists of 1 to 6 digits that are normally separated with a dot +in groups of 0-3 and 0-3 numbers. E.g. 123.123, 12.123, 1.123, 123 or 1 + +>>> businessid.validate('123.123') +u'123.123' + +>>> businessid.validate('1123') +u'1.123' + +>>> businessid.validate('123123123') +Traceback (most recent call last): + ... +stdnum.exceptions.InvalidLength: The number has an invalid length. + +>>> businessid.validate('12df') +Traceback (most recent call last): + ... +stdnum.exceptions.InvalidFormat: The number has an invalid format. + +""" + +import re +from stdnum.exceptions import * +from stdnum.util import clean + + +def validate(number): + """ + Validate the format of a Finnish association register number. + + First strip all separators and spaces from the number and then checks + that it has a correct length and is only numeric. + """ + number = clean(number, ' -._+').strip() + + if not number.isdigit(): + raise InvalidFormat() + + if len(number) < 1 or len(number) > 6: + raise InvalidLength() + + if len(number) < 4: + return number + else: + return "%s.%s" % (number[:-3], number[-3:]) + + +def is_valid(number): + """Checks to see if the number provided is a valid association register number. + This checks that the format is correct.""" + try: + return bool(validate(number)) + except ValidationError: + return False From db2474654d20f331585b60074ec0a87b755010d0 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 12 Jul 2015 15:31:43 +0200 Subject: [PATCH 049/654] Add a whitelist for short numbers and fix API This implements separate functions compact() and format() and fixes the doctests. This also implements a whitelist of registered short numbers to avoid accidentally validating just any number. --- stdnum/fi/associationid.py | 64 ++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/stdnum/fi/associationid.py b/stdnum/fi/associationid.py index 7796d702..7af46c95 100644 --- a/stdnum/fi/associationid.py +++ b/stdnum/fi/associationid.py @@ -2,6 +2,7 @@ # coding: utf-8 # # Copyright (C) 2015 Holvi Payment Services Oy +# Copyright (C) 2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -18,34 +19,46 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA -""" Finnish Association Identifier +"""Finnish Association Identifier. The number consists of 1 to 6 digits that are normally separated with a dot -in groups of 0-3 and 0-3 numbers. E.g. 123.123, 12.123, 1.123, 123 or 1 +in groups of 0-3 and 0-3 numbers. E.g. 123.123, 12.123, 1.123, 123 or 1. ->>> businessid.validate('123.123') -u'123.123' - ->>> businessid.validate('1123') -u'1.123' - ->>> businessid.validate('123123123') +>>> validate('123.123') +'123123' +>>> validate('1123') +'1123' +>>> validate('123123123') Traceback (most recent call last): ... stdnum.exceptions.InvalidLength: The number has an invalid length. - ->>> businessid.validate('12df') +>>> validate('12df') Traceback (most recent call last): ... stdnum.exceptions.InvalidFormat: The number has an invalid format. - +>>> format('123') +'123' +>>> format('1234') +'1.234' """ -import re from stdnum.exceptions import * from stdnum.util import clean +# a collection of all registered numbers with 2 or less digits +_lownumbers = set(( + 1, 6, 7, 9, 12, 14, 15, 16, 18, 22, 23, 24, 27, 28, 29, 35, 36, 38, 40, + 41, 42, 43, 45, 46, 50, 52, 55, 58, 60, 64, 65, 68, 72, 75, 76, 77, 78, + 83, 84, 85, 89, 92)) + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -._+').strip() + + def validate(number): """ Validate the format of a Finnish association register number. @@ -53,24 +66,29 @@ def validate(number): First strip all separators and spaces from the number and then checks that it has a correct length and is only numeric. """ - number = clean(number, ' -._+').strip() - + number = compact(number) if not number.isdigit(): raise InvalidFormat() - if len(number) < 1 or len(number) > 6: raise InvalidLength() - - if len(number) < 4: - return number - else: - return "%s.%s" % (number[:-3], number[-3:]) + if len(number) < 3 and int(number) not in _lownumbers: + raise InvalidComponent() + return number def is_valid(number): - """Checks to see if the number provided is a valid association register number. - This checks that the format is correct.""" + """Checks to see if the number provided is a valid association register + number. This checks that the format is correct.""" try: return bool(validate(number)) except ValidationError: return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + if len(number) <= 3: + return number + else: + return number[:-3] + '.' + number[-3:] From 37f7fa632ed2d80c0d30af78d17a85ce6c526316 Mon Sep 17 00:00:00 2001 From: Lari Haataja Date: Tue, 23 Jun 2015 11:29:08 +0200 Subject: [PATCH 050/654] Add validation for Finnish y-tunnus (business identifier) --- stdnum/fi/__init__.py | 1 + stdnum/fi/ytunnus.py | 60 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 stdnum/fi/ytunnus.py diff --git a/stdnum/fi/__init__.py b/stdnum/fi/__init__.py index 3bcd5210..54f89b95 100644 --- a/stdnum/fi/__init__.py +++ b/stdnum/fi/__init__.py @@ -22,3 +22,4 @@ # provide vat as an alias from stdnum.fi import alv as vat +from stdnum.fi import ytunnus as businessid diff --git a/stdnum/fi/ytunnus.py b/stdnum/fi/ytunnus.py new file mode 100644 index 00000000..13acd29b --- /dev/null +++ b/stdnum/fi/ytunnus.py @@ -0,0 +1,60 @@ +# ytunnus.py - functions for handling Finnish business identifiers (y-tunnus) +# coding: utf-8 +# +# Copyright (C) 2015 Holvi Payment Services Oy +# Copyright (C) 2012, 2013 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Y-tunnus (Finnish business identifier) + +The number is an 8-digit code with a weighted checksum. + +>>> validate('2077474-0') +'2077474-0' +>>> validate('2077474-1') # invalid check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean +from stdnum.fi import alv + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + number = clean(number, ' -').upper().strip() + return number + + +def validate(number): + """Checks to see if the number provided is a valid business identifier. This + checks the length, formatting and check digit.""" + number = compact(number) + number = alv.validate(number) + return "%s-%s" % (number[:7], number[7:]) + + +def is_valid(number): + """Checks to see if the number provided is a valid business identifier. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 320326e473da582a4e1e76db279a654f2cf384ad Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 12 Jul 2015 15:52:05 +0200 Subject: [PATCH 051/654] Split out format() function This uses the stdnum.fi.alv module more extensively and ensures that validate() returns a compact representation and a separate format() function is available. --- stdnum/fi/ytunnus.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/stdnum/fi/ytunnus.py b/stdnum/fi/ytunnus.py index 13acd29b..10114eb3 100644 --- a/stdnum/fi/ytunnus.py +++ b/stdnum/fi/ytunnus.py @@ -2,7 +2,7 @@ # coding: utf-8 # # Copyright (C) 2015 Holvi Payment Services Oy -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,42 +19,46 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA -"""Y-tunnus (Finnish business identifier) +"""Y-tunnus (Finnish business identifier). The number is an 8-digit code with a weighted checksum. >>> validate('2077474-0') -'2077474-0' +'20774740' >>> validate('2077474-1') # invalid check digit Traceback (most recent call last): ... InvalidChecksum: ... +>>> format('2077474-0') +'2077474-0' """ from stdnum.exceptions import * -from stdnum.util import clean from stdnum.fi import alv def compact(number): """Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.""" - number = clean(number, ' -').upper().strip() - return number + return alv.compact(number) def validate(number): - """Checks to see if the number provided is a valid business identifier. This - checks the length, formatting and check digit.""" - number = compact(number) - number = alv.validate(number) - return "%s-%s" % (number[:7], number[7:]) + """Checks to see if the number provided is a valid business identifier. + This checks the length, formatting and check digit.""" + return alv.validate(number) def is_valid(number): - """Checks to see if the number provided is a valid business identifier. This - checks the length, formatting and check digit.""" + """Checks to see if the number provided is a valid business identifier. + This checks the length, formatting and check digit.""" try: return bool(validate(number)) except ValidationError: return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return number[:7] + '-' + number[7:] From 7f9c94f99dcaed8c97d6288d9fbbc483a963c2d7 Mon Sep 17 00:00:00 2001 From: Lari Haataja Date: Fri, 12 Jun 2015 14:53:59 +0300 Subject: [PATCH 052/654] Add company register number validation for Austria --- stdnum/at/businessid.py | 70 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 stdnum/at/businessid.py diff --git a/stdnum/at/businessid.py b/stdnum/at/businessid.py new file mode 100644 index 00000000..8ce5ab76 --- /dev/null +++ b/stdnum/at/businessid.py @@ -0,0 +1,70 @@ +# businessid.py - functions for handling Austrian company register numbers +# +# Copyright (C) 2015 Holvi Payment Services Oy +# Copyright (C) 2012, 2013 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Austrian Company Register Numbers. + +The Austrian company register number consist of digits followed by a single +letter, e.g. "122119m". Sometimes it is presented with preceding "FN", e.g. +"FN 122119m". + +>>> validate('FN 122119m') +'122119m' +>>> validate('122119m') +'122119m' +>>> validate('m123123') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('abc') +Traceback (most recent call last): + ... +InvalidFormat: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace. + Preceding "FN" is also removed.""" + number = clean(number, ' -./').strip() + if number.upper().startswith('FN'): + number = number[2:] + return number + + +def validate(number): + """Checks to see if the number provided is a valid company register + number. This only checks the formatting.""" + number = compact(number) + if not number[-1:].isalpha() or not number[:-1].isdigit(): + raise InvalidFormat() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid company register + number. This only checks the formatting.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 243e50f063f3216392c237bcf1807b76315fbf31 Mon Sep 17 00:00:00 2001 From: Tomas Karasek Date: Mon, 3 Aug 2015 15:32:25 +0300 Subject: [PATCH 053/654] Add validation of Estonian personal ID --- stdnum/ee/ik.py | 113 +++++++++++++++++++++++++++++++++++ tests/test_ee_ik.doctest | 125 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 stdnum/ee/ik.py create mode 100644 tests/test_ee_ik.doctest diff --git a/stdnum/ee/ik.py b/stdnum/ee/ik.py new file mode 100644 index 00000000..a22c7a24 --- /dev/null +++ b/stdnum/ee/ik.py @@ -0,0 +1,113 @@ +# ik.py - functions for handling Estonian Personal ID numbers (IK) +# coding: utf-8 +# +# Copyright (C) 2015 Tomas Karasek +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Isikukood (Estonian Personcal ID number). + +The number consists of 11 digits: the first indicates the gender and century +the person was born in, the following 6 digits the birth date, followed by a +3 digit serial and a check digit. + +>>> validate('36805280109') +'36805280109' +>>> validate('36805280108') # incorrect check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> get_birth_date('36805280109') +datetime.date(1968, 5, 28) +""" + +import datetime + +from stdnum.util import clean +from stdnum.exceptions import * + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def get_birth_date(number): + """Split the date parts from the number and return the birth date.""" + number = compact(number) + if number[0] in '12': + century = 1800 + elif number[0] in '34': + century = 1900 + elif number[0] in '56': + century = 2000 + elif number[0] in '78': + century = 2100 + else: + raise InvalidComponent() + year = century + int(number[1:3]) + month = int(number[3:5]) + day = int(number[5:7]) + try: + return datetime.date(year, month, day) + except ValueError: + raise InvalidComponent() + + +def get_gender(number): + """Get the person's birth gender ('M' or 'F').""" + number = compact(number) + if number[0] in '1357': + return 'M' + elif number[0] in '2468': + return 'F' + else: + raise InvalidComponent() + + +def calc_check_digit(number): + """Calculate the check digit.""" + check = sum(((i % 9) + 1) * int(n) + for i, n in enumerate(number[:-1])) % 11 + if check == 10: + check = sum((((i + 2) % 9) + 1) * int(n) + for i, n in enumerate(number[:-1])) % 11 + return str(check % 10) + + +def validate(number): + """Checks if the number provided is valid. This checks the length, + formatting, embedded date and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 11: + raise InvalidLength() + get_birth_date(number) + if number[-1] != calc_check_digit(number): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks if the number provided is valid. This checks the length, + formatting, embedded date and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_ee_ik.doctest b/tests/test_ee_ik.doctest new file mode 100644 index 00000000..b5e14534 --- /dev/null +++ b/tests/test_ee_ik.doctest @@ -0,0 +1,125 @@ +test_ee_ik.doctest - test for estonian personal id + +Copyright (C) 2015 Tomas Karasek +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +>>> from stdnum.ee import ik +>>> import stdnum.exceptions + +>>> ik.validate('36805280109') +'36805280109' +>>> ik.is_valid('36805280109') +True +>>> ik.calc_check_digit('36805280109') +'9' +>>> ik.validate('06805280106') # invalid first digit +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ik.validate('36805280108') # invalid check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> ik.validate('368052801099') +Traceback (most recent call last): + ... +InvalidLength: ... + + +>>> ik.get_birth_date('36805280109') +datetime.date(1968, 5, 28) +>>> ik.get_birth_date('16805280107') +datetime.date(1868, 5, 28) +>>> ik.get_birth_date('51205280105') +datetime.date(2012, 5, 28) +>>> ik.get_birth_date('81205280108') +datetime.date(2112, 5, 28) +>>> ik.get_birth_date('06805280106') # invalid first digit +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> ik.get_birth_date('38102290106') # non-existing date +Traceback (most recent call last): + ... +InvalidComponent: ... + + +>>> ik.get_gender('36805280109') +'M' +>>> ik.get_gender('46805280103') +'F' +>>> ik.get_gender('98102290101') # invalid first digit +Traceback (most recent call last): + ... +InvalidComponent: ... + + +>>> numbers = """ +... 36205030034 +... 36606130166 +... 38002090113 +... 36703010079 +... 36412140053 +... 37105250048 +... 35806110178 +... 38411280151 +... 38004160054 +... 37406220030 +... 37207010076 +... 46104090101 +... 47306160017 +... 35712020095 +... 35512240278 +... 37111070056 +... 36003050128 +... 34508136020 +... 37112300117 +... 37205120111 +... 36708120106 +... 36204130100 +... 36805280109 +... 36404240119 +... 37609300174 +... 38407170099 +... 35903140121 +... 36912050058 +... 36706060097 +... 37909180161 +... 37210220129 +... 35803140053 +... 37709190107 +... 36306200109 +... 36208130099 +... 37611280079 +... 35806190146 +... 44909210102 +... 37104020141 +... 35907150159 +... 36412100145 +... 49105080018 +... 37406110083 +... 36304020091 +... 37106220087 +... 34706045216 +... 37503240119 +... 38310150127 +... 46708270050 +... """ +>>> [x for x in numbers.splitlines() if x and not ik.is_valid(x)] +[] From e88ba0b7cb372e2d9bf56bb291ea5ed2f53de840 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 16 Aug 2015 11:20:58 +0200 Subject: [PATCH 054/654] Small typo and code style fixes --- stdnum/dk/cpr.py | 4 ++-- stdnum/is_/kennitala.py | 2 +- stdnum/it/codicefiscale.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/stdnum/dk/cpr.py b/stdnum/dk/cpr.py index 9be2cec8..456be21f 100644 --- a/stdnum/dk/cpr.py +++ b/stdnum/dk/cpr.py @@ -81,7 +81,7 @@ def get_birth_date(number): def validate(number): """Checks to see if the number provided is a valid CPR number. This - checks the length, formatting, embedded date and check digit.""" + checks the length, formatting, embedded date and check digit.""" number = compact(number) if not number.isdigit(): raise InvalidFormat() @@ -95,7 +95,7 @@ def validate(number): def is_valid(number): """Checks to see if the number provided is a valid CPR number. This - checks the length, formatting, embedded date and check digit.""" + checks the length, formatting, embedded date and check digit.""" try: return bool(validate(number)) except ValidationError: diff --git a/stdnum/is_/kennitala.py b/stdnum/is_/kennitala.py index 39aaf6e2..5ffb73f0 100644 --- a/stdnum/is_/kennitala.py +++ b/stdnum/is_/kennitala.py @@ -89,7 +89,7 @@ def validate(number): # check if birth date or registration data is valid try: if day >= 40: # organisation - datetime.date(year, month, day-40) + datetime.date(year, month, day - 40) else: # individual datetime.date(year, month, day) except ValueError: diff --git a/stdnum/it/codicefiscale.py b/stdnum/it/codicefiscale.py index 63b7f6ec..25569aa7 100644 --- a/stdnum/it/codicefiscale.py +++ b/stdnum/it/codicefiscale.py @@ -92,7 +92,7 @@ def calc_check_digit(number): def get_birth_date(number, minyear=1920): - """Get the birth date from the person's whose fiscal code. + """Get the birth date from the person's fiscal code. Only the last two digits of the year are stured in the number. The dates will be returned in the range from minyear to minyear + 100. @@ -117,7 +117,7 @@ def get_birth_date(number, minyear=1920): def get_gender(number): - """Get the gender of the person's provided fiscal code. + """Get the gender of the person's fiscal code. >>> get_gender('RCCMNL83S18D969H') 'M' From 6afa8757386fa4c4c8e0d369679c7e4b771458c6 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 16 Aug 2015 13:26:39 +0200 Subject: [PATCH 055/654] Turn on and improve branch coverage --- setup.cfg | 1 + stdnum/imei.py | 2 +- stdnum/isbn.py | 2 +- stdnum/isil.py | 2 ++ stdnum/ismn.py | 2 +- stdnum/meid.py | 2 ++ stdnum/us/atin.py | 2 ++ stdnum/us/ein.py | 2 ++ stdnum/us/itin.py | 2 ++ 9 files changed, 14 insertions(+), 3 deletions(-) diff --git a/setup.cfg b/setup.cfg index abf5bb25..106690cc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,6 +7,7 @@ with-doctest=true doctest-extension=doctest doctest-options=+IGNORE_EXCEPTION_DETAIL with-coverage=true +cover-branches=true cover-package=stdnum cover-erase=true cover-html=true diff --git a/stdnum/imei.py b/stdnum/imei.py index 1fad6c38..f4b9e909 100644 --- a/stdnum/imei.py +++ b/stdnum/imei.py @@ -76,7 +76,7 @@ def imei_type(number): return None if len(number) in (14, 15): return 'IMEI' - elif len(number) == 16: + else: # len(number) == 16: return 'IMEISV' diff --git a/stdnum/isbn.py b/stdnum/isbn.py index 9b6c7228..2bc2b6e7 100644 --- a/stdnum/isbn.py +++ b/stdnum/isbn.py @@ -100,7 +100,7 @@ def isbn_type(number): return None if len(number) == 10: return 'ISBN10' - elif len(number) == 13: + else: # len(number) == 13: return 'ISBN13' diff --git a/stdnum/isil.py b/stdnum/isil.py index b7024a94..b0ee905b 100644 --- a/stdnum/isil.py +++ b/stdnum/isil.py @@ -37,6 +37,8 @@ InvalidLength: ... >>> format('it-RM0267') 'IT-RM0267' +>>> format('zz-RM0267') # unknown agencies are left alone +'zz-RM0267' """ from stdnum.exceptions import * diff --git a/stdnum/ismn.py b/stdnum/ismn.py index a26d123c..3de83f1c 100644 --- a/stdnum/ismn.py +++ b/stdnum/ismn.py @@ -76,7 +76,7 @@ def ismn_type(number): return None if len(number) == 10: return 'ISMN10' - elif len(number) == 13: + else: # len(number) == 13: return 'ISMN13' diff --git a/stdnum/meid.py b/stdnum/meid.py index 5d386085..418a929c 100644 --- a/stdnum/meid.py +++ b/stdnum/meid.py @@ -26,6 +26,8 @@ 'AF0123450ABCDE' >>> validate('29360 87365 0070 3710 0') 'AF0123450ABCDE' +>>> validate('29360 87365 0070 3710 0', strip_check_digit=False) +'AF0123450ABCDEC' >>> validate('29360 87365 0070 3710 1') Traceback (most recent call last): ... diff --git a/stdnum/us/atin.py b/stdnum/us/atin.py index b3218dbc..7068bb80 100644 --- a/stdnum/us/atin.py +++ b/stdnum/us/atin.py @@ -31,6 +31,8 @@ InvalidFormat: ... >>> format('123456789') '123-45-6789' +>>> format('123') # unknown formatting is left alone +'123' """ import re diff --git a/stdnum/us/ein.py b/stdnum/us/ein.py index ea63b9a2..e40e7c66 100644 --- a/stdnum/us/ein.py +++ b/stdnum/us/ein.py @@ -38,6 +38,8 @@ InvalidComponent: ... >>> format('042103594') '04-2103594' +>>> format('123') # unknown formatting is left alone +'123' """ import re diff --git a/stdnum/us/itin.py b/stdnum/us/itin.py index bde97b71..6233e89c 100644 --- a/stdnum/us/itin.py +++ b/stdnum/us/itin.py @@ -45,6 +45,8 @@ '123456789' >>> format('111223333') '111-22-3333' +>>> format('123') # unknown formatting is left alone +'123' """ import re From 7714db78b7e3b3d1f733dec455078bbd62a7cbb8 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 16 Aug 2015 13:36:51 +0200 Subject: [PATCH 056/654] Make uppercase in compact() This changes the compact() function of the ISO 9362 module to make all the letters uppercase. --- stdnum/iso9362.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/stdnum/iso9362.py b/stdnum/iso9362.py index e58ae522..7844617c 100644 --- a/stdnum/iso9362.py +++ b/stdnum/iso9362.py @@ -49,14 +49,13 @@ from stdnum.exceptions import * from stdnum.util import clean -_bic_re = re.compile(r'^[a-z]{6}[0-9a-z]{2}([0-9a-z]{3})?$', re.IGNORECASE) +_bic_re = re.compile(r'^[A-Z]{6}[0-9A-Z]{2}([0-9A-Z]{3})?$') def compact(number): """Convert the number to the minimal representation. This strips the number of any surrounding whitespace.""" - number = clean(number).strip() - return number + return clean(number).strip().upper() def validate(number): @@ -82,5 +81,4 @@ def is_valid(number): def format(number): """Reformat the passed number to the standard format.""" - number = compact(number) - return number.upper() + return compact(number) From b93909974b29edb375523d9790068a5e364f3285 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 16 Aug 2015 14:56:32 +0200 Subject: [PATCH 057/654] Update IBAN tests This updates the iban.dat file from the IBAN registry, includes a fix for handling spaces in the BBAN and adds some more IBAN examples from the IBAN registry. --- getiban.py | 4 +- stdnum/iban.dat | 3 +- tests/test_iban.doctest | 155 ++++++++++++++++++++++------------------ 3 files changed, 90 insertions(+), 72 deletions(-) diff --git a/getiban.py b/getiban.py index 2b9bf988..e026293e 100755 --- a/getiban.py +++ b/getiban.py @@ -2,7 +2,7 @@ # getiban.py - script to donwload and parse data from the IBAN registry # -# Copyright (C) 2011, 2013 Arthur de Jong +# Copyright (C) 2011-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -62,7 +62,7 @@ def parse(f): bban = bban[5:] # print country line print '%s country="%s" bban="%s"' % ( - cc, row['name of country'], bban) + cc, row['name of country'], bban.replace(' ', '')) # TODO: some countries have a fixed check digit value # TODO: some countries have extra check digits # TODO: use "Bank identifier position within the BBAN" field diff --git a/stdnum/iban.dat b/stdnum/iban.dat index 95ba5c43..1b873ff0 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -53,6 +53,7 @@ PS country="Palestine, State of" bban="4!a21!c" PL country="Poland" bban="8!n16!n" PT country="Portugal" bban="4!n4!n11!n2!n" QA country="Qatar" bban="4!a21!c" +LC country="Saint Lucia" bban="4!a24n" RO country="Romania" bban="4!a16!c" SM country="San Marino" bban="1!a5!n5!n12!c" SA country="Saudi Arabia" bban="2!n18!c" @@ -62,7 +63,7 @@ SI country="Slovenia" bban="5!n8!n2!n" ES country="Spain" bban="4!n4!n1!n1!n10!n" SE country="Sweden" bban="3!n16!n1!n" CH country="Switzerland" bban="5!n12!c" -TL country="Timor-Leste" bban="3!n 14!n 2!n" +TL country="Timor-Leste" bban="3!n14!n2!n" TN country="Tunisia" bban="2!n3!n13!n2!n" TR country="Turkey" bban="5!n1!n16!c" AE country="United Arab Emirates" bban="3!n16!n" diff --git a/tests/test_iban.doctest b/tests/test_iban.doctest index 7847ec38..b2d91b8f 100644 --- a/tests/test_iban.doctest +++ b/tests/test_iban.doctest @@ -1,6 +1,6 @@ test_iban.doctest - more detailed doctests for the stdnum.iban module -Copyright (C) 2011 Arthur de Jong +Copyright (C) 2011-2015 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -29,111 +29,128 @@ These should all be valid numbers and are from the IBAN REGISTRY as sample numbers: >>> numbers = ''' -... AL47212110090000000235698741 +... AD12 0001 2030 2003 5910 0100 ... AD1200012030200359100100 +... AE070331234567890123456 +... AL47 2121 1009 0000 0002 3569 8741 +... AL47212110090000000235698741 +... AT61 1904 3002 3457 3201 ... AT611904300234573201 -... BE68539007547034 +... AZ21NABZ00000000137010001944 +... BA39 1290 0794 0102 8494 ... BA391290079401028494 +... BE68 5390 0754 7034 +... BE68539007547034 +... BG80 BNBG 9661 1020 3456 78 ... BG80BNBG96611020345678 -... HR1210010051863000160 +... BH67BMAG00001299123456 +... BR1800000000141455123924100C2 +... BR9700360305000010009795493P1 +... CH93 0076 2011 6238 5295 7 +... CH9300762011623852957 +... CR0515202001026284066 +... CY17 0020 0128 0000 0012 0052 7600 ... CY17002001280000001200527600 +... CZ65 0800 0000 1920 0014 5399 ... CZ6508000000192000145399 +... CZ94 5500 0000 0010 1103 8930 ... CZ9455000000001011038930 +... DE89 3704 0044 0532 0130 00 +... DE89370400440532013000 +... DK50 0040 0440 1162 43 ... DK5000400440116243 -... FO6264600001631634 -... GL8964710001000206 +... DO28BAGR00000001212453611324 +... EE38 2200 2210 2014 5685 ... EE382200221020145685 +... ES91 2100 0418 4502 0005 1332 +... ES9121000418450200051332 +... FI21 1234 5600 0007 85 ... FI2112345600000785 ... FI5542345670000081 +... FO62 6460 0001 6316 34 +... FO6264600001631634 +... FR14 2004 1010 0505 0001 3M02 606 ... FR1420041010050500013M02606 -... DE89370400440532013000 +... GB29 NWBK 6016 1331 9268 19 +... GB29NWBK60161331926819 +... GE29 NB00 0000 0101 9049 17 ... GE29NB0000000101904917 +... GI75 NWBK 0000 0000 7099 453 ... GI75NWBK000000007099453 +... GL89 6471 0001 0002 06 +... GL8964710001000206 +... GR16 0110 1250 0000 0001 2300 695 ... GR1601101250000000012300695 +... GT82TRAJ01020000001210029690 +... HR12 1001 0051 8630 0016 0 +... HR1210010051863000160 +... HU42 1177 3016 1111 1018 0000 0000 ... HU42117730161111101800000000 -... IS140159260076545510730339 +... IE29 AIBK 9311 5212 3456 78 ... IE29AIBK93115212345678 +... IL62 0108 0000 0009 9999 999 ... IL620108000000099999999 +... IS14 0159 2600 7654 5510 7303 39 +... IS140159260076545510730339 +... IT60 X054 2811 1010 0000 0123 456 ... IT60X0542811101000000123456 -... LV80BANK0000435195001 +... JO94CBJO0010000000000131000302 +... KZ86125KZT5004100100 +... LB62 0999 0000 0001 0019 0122 9114 ... LB62099900000001001901229114 +... LI21 0881 0000 2324 013A A ... LI21088100002324013AA +... LT12 1000 0111 0100 1000 ... LT121000011101001000 +... LU28 0019 4006 4475 0000 ... LU280019400644750000 -... MK07250120000058984 -... MT84MALT011000012345MTLCAST001S -... MR1300020001010000123456753 -... MU17 BOMM0101101030300200000MUR +... LV80 BANK 0000 4351 9500 1 +... LV80BANK0000435195001 +... MC11 1273 9000 7000 1111 1000 h79 ... MC1112739000700011111000h79 +... MD24AG000225100013104168 +... ME25 5050 0001 2345 6789 51 ... ME25505000012345678951 -... NL91ABNA0417164300 -... NO9386011117947 -... PL61109010140000071219812874 -... PT50000201231234567890154 -... RO49AAAA1B31007593840000 -... SM86U0322509800000000270100 -... SA0380000000608010167519 -... RS35260005601001611379 -... SK3112000000198742637541 -... SI56191000000123438 -... ES9121000418450200051332 -... SE4550000000058398257466 -... CH9300762011623852957 -... TN5910006035183598478831 -... TR330006100519786457841326 -... GB29NWBK60161331926819 -... AL47 2121 1009 0000 0002 3569 8741 -... AD12 0001 2030 2003 5910 0100 -... AT61 1904 3002 3457 3201 -... BE68 5390 0754 7034 -... BA39 1290 0794 0102 8494 -... BG80 BNBG 9661 1020 3456 78 -... HR12 1001 0051 8630 0016 0 -... CY17 0020 0128 0000 0012 0052 7600 -... CZ65 0800 0000 1920 0014 5399 -... CZ94 5500 0000 0010 1103 8930 -... DK50 0040 0440 1162 43 -... FO62 6460 0001 6316 34 -... GL89 6471 0001 0002 06 -... EE38 2200 2210 2014 5685 -... FI21 1234 5600 0007 85 -... FR14 2004 1010 0505 0001 3M02 606 -... DE89 3704 0044 0532 0130 00 -... GE29 NB00 0000 0101 9049 17 -... GI75 NWBK 0000 0000 7099 453 -... GR16 0110 1250 0000 0001 2300 695 -... HU42 1177 3016 1111 1018 0000 0000 -... IS14 0159 2600 7654 5510 7303 39 -... IE29 AIBK 9311 5212 3456 78 -... IL62 0108 0000 0009 9999 999 -... IT60 X054 2811 1010 0000 0123 456 -... LV80 BANK 0000 4351 9500 1 -... LB62 0999 0000 0001 0019 0122 9114 -... LI21 0881 0000 2324 013A A -... LT12 1000 0111 0100 1000 -... LU28 0019 4006 4475 0000 ... MK072 5012 0000 0589 84 -... MT84 MALT 0110 0001 2345 MTLC AST0 01S +... MK07250120000058984 ... MR13 0002 0001 0100 0012 3456 753 +... MR1300020001010000123456753 +... MT84 MALT 0110 0001 2345 MTLC AST0 01S +... MT84MALT011000012345MTLCAST001S ... MU17 BOMM 0101 1010 3030 0200 000M UR -... MC11 1273 9000 7000 1111 1000 h79 -... ME25 5050 0001 2345 6789 51 +... MU17 BOMM0101101030300200000MUR ... NL91 ABNA 0417 1643 00 +... NL91ABNA0417164300 ... NO93 8601 1117 947 +... NO9386011117947 +... PK36SCBL0000001123456702 ... PL61 1090 1014 0000 0712 1981 2874 +... PL61109010140000071219812874 +... PS92PALS000000000400123456702 ... PT50 0002 0123 1234 5678 9015 4 +... PT50000201231234567890154 +... QA58DOHB00001234567890ABCDEFG ... RO49 AAAA 1B31 0075 9384 0000 -... SM86 U032 2509 8000 0000 0270 100 -... SA03 8000 0000 6080 1016 7519 +... RO49AAAA1B31007593840000 ... RS35 2600 0560 1001 6113 79 -... SK31 1200 0000 1987 4263 7541 -... SI56 1910 0000 0123 438 -... ES91 2100 0418 4502 0005 1332 +... RS35260005601001611379 +... SA03 8000 0000 6080 1016 7519 +... SA0380000000608010167519 ... SE45 5000 0000 0583 9825 7466 -... CH93 0076 2011 6238 5295 7 +... SE4550000000058398257466 +... SI56 1910 0000 0123 438 +... SI56191000000123438 +... SK31 1200 0000 1987 4263 7541 +... SK3112000000198742637541 +... SM86 U032 2509 8000 0000 0270 100 +... SM86U0322509800000000270100 +... TL 38 008 00123456789101 57 ... TN59 1000 6035 1835 9847 8831 +... TN5910006035183598478831 ... TR33 0006 1005 1978 6457 8413 26 -... GB29 NWBK 6016 1331 9268 19 +... TR330006100519786457841326 +... VG96VPVG0000012345678901 +... XK051212012345678906 ... ''' >>> [ x for x in numbers.splitlines() if x and not iban.is_valid(x) ] [] From 714fa6091957742f7f59c121bb37573e5c280b4b Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 16 Aug 2015 21:18:33 +0200 Subject: [PATCH 058/654] Add Brazillian CNPJ business identifier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add module for Cadastro Nacional da Pessoa Jurídica, the Brazillian company identifier. --- stdnum/br/cnpj.py | 86 ++++++++++++++++++++++++++++++++++++++ tests/test_br_cnpj.doctest | 60 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 stdnum/br/cnpj.py create mode 100644 tests/test_br_cnpj.doctest diff --git a/stdnum/br/cnpj.py b/stdnum/br/cnpj.py new file mode 100644 index 00000000..3d34ed6b --- /dev/null +++ b/stdnum/br/cnpj.py @@ -0,0 +1,86 @@ +# cnpj.py - functions for handling CNPJ numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CNPJ (Cadastro Nacional da Pessoa Jurídica, Brazillian company identifier). + +Numbers from the national register of legal entities have 14 digits. The +first 8 digits identify the company, the following 4 digits identify a +business unit and the last 2 digits are check digits. + +>>> validate('16.727.230/0001-97') +'16727230000197' +>>> validate('16.727.230.0001-98') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('16.727.230/0001=97') # invalid delimiter +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> format('16727230000197') +'16.727.230/0001-97' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -./').strip() + + +def calc_check_digits(number): + """Calculate the check digits for the number.""" + d1 = (11 - sum(((3 - i) % 8 + 2) * int(n) + for i, n in enumerate(number[:12]))) % 11 % 10 + d2 = (11 - sum(((4 - i) % 8 + 2) * int(n) + for i, n in enumerate(number[:12])) - + 2 * d1) % 11 % 10 + return '%d%d' % (d1, d2) + + +def validate(number): + """Checks to see if the number provided is a valid CNPJ. This checks the + length and whether the check digits are correct.""" + number = compact(number) + if not number.isdigit() or int(number) <= 0: + raise InvalidFormat() + if len(number) != 14: + raise InvalidLength() + if calc_check_digits(number) != number[-2:]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid CNPJ. This checks the + length and whether the check digits are correct.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + number = compact(number) + return (number[0:2] + '.' + number[2:5] + '.' + number[5:8] + '/' + + number[8:12] + '-' + number[12:]) diff --git a/tests/test_br_cnpj.doctest b/tests/test_br_cnpj.doctest new file mode 100644 index 00000000..2a0d605b --- /dev/null +++ b/tests/test_br_cnpj.doctest @@ -0,0 +1,60 @@ +test_br_cnpj.doctest - more detailed doctests for the stdnum.br.cnpj module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.br.cnpj module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.br import cnpj +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 07.195.358/0001-66 +... 08.807.432/0001-10 +... 11.015.248/0001-42 +... 11.017.153/0001-68 +... 11.017.153/0002-49 +... 11.017.153/0003-20 +... 11.017.153/0005-91 +... 11.980.459/0001-15 +... 14.847.283/0001-16 +... 14.847.283/0002-05 +... 14.847.283/0003-88 +... 14.847.283/0004-69 +... 14.847.283/0005-40 +... 16.727.230.0001-97 +... 18.090.575/0001-08 +... 18.090.575/0002-99 +... 18.090.575/0003-70 +... 18.090.575/0004-50 +... 18.090.575/0005-31 +... 22.610.961/0001-50 +... 44.407.989/0001-28 +... 47.080.619/0001-17 +... 53.612.734/0001-98 +... 61882613000194 +... 69.435.154/0001-02 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not cnpj.is_valid(x)] +[] From 5ab8d24c44924de2a3d4e61469f2cefa98378cdf Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 16 Aug 2015 23:45:13 +0200 Subject: [PATCH 059/654] =?UTF-8?q?Add=20Russioan=20=D0=98=D0=9D=D0=9D=20(?= =?UTF-8?q?INN)=20tax=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a basic implementation of the Russian Идентификационный номер налогоплательщика (tax identification number). This currently only checks the format, length and check digits but not whether each of the parts of the number are valid (e.g. valid region specified). --- stdnum/ru/__init__.py | 0 stdnum/ru/inn.py | 93 +++++++++++++++++++++++++++++++++++++++ tests/test_ru_inn.doctest | 59 +++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 stdnum/ru/__init__.py create mode 100644 stdnum/ru/inn.py create mode 100644 tests/test_ru_inn.doctest diff --git a/stdnum/ru/__init__.py b/stdnum/ru/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/stdnum/ru/inn.py b/stdnum/ru/inn.py new file mode 100644 index 00000000..1f27bb0e --- /dev/null +++ b/stdnum/ru/inn.py @@ -0,0 +1,93 @@ +# inn.py - functions for handling Russian VAT numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""ИНН (Идентификационный номер налогоплательщика, Russian tax identifier). + +The Indentifikatzionny nomer nalogoplatel'shchika is a Russian tax +identification number that consists 10 digits for companies and 12 digits for +persons. + +>>> validate('123456789047') +'123456789047' +>>> validate('1234567894') +'1234567894' +>>> validate('123456789037') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('1234567895') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def calc_company_check_digit(number): + """Calculate the check digit for the 10-digit ИНН for organisations.""" + weights = (2, 4, 10, 3, 5, 9, 4, 6, 8) + return str(sum(weights[i] * int(n) + for i, n in enumerate(number[:9])) % 11 % 10) + + +def calc_personal_check_digits(number): + """Calculate the check digits for the 12-digit personal ИНН.""" + weights = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8) + d1 = str(sum(weights[i] * int(n) + for i, n in enumerate(number[:10])) % 11 % 10) + weights = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8) + d2 = str(sum(weights[i] * int(n) + for i, n in enumerate(number[:10] + d1)) % 11 % 10) + return d1 + d2 + + +def validate(number): + """Checks to see if the number provided is a valid ИНН. This checks the + length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) == 10: + if calc_company_check_digit(number) != number[-1]: + raise InvalidChecksum() + elif len(number) == 12: + # persons + if calc_personal_check_digits(number) != number[-2:]: + raise InvalidChecksum() + else: + raise InvalidLength() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid ИНН. This checks the + length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_ru_inn.doctest b/tests/test_ru_inn.doctest new file mode 100644 index 00000000..86ac88e7 --- /dev/null +++ b/tests/test_ru_inn.doctest @@ -0,0 +1,59 @@ +test_ru_inn.doctest - more detailed doctests for the stdnum.ru.inn module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ru.inn module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.ru import inn +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 005826107187 +... 0108003670 +... 0273074555 +... 0279111370 +... 0716007984 +... 5190187770 +... 6223002330 +... 6440019934 +... 6672238301 +... 6903022126 +... 6908012650 +... 6911001698 +... 7609000881 +... 7709442668 +... 7716450028 +... 7724051595 +... 7726485118 +... 7727705694 +... 7728127936 +... 7813045547 +... 7825498171 +... 8614008550 +... 8906008726 +... 8906008740 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not inn.is_valid(x)] +[] From a0cb61f7b1718b93e583e749c1483f0c6a5bdc3a Mon Sep 17 00:00:00 2001 From: Dariusz Choruzy Date: Sun, 6 Sep 2015 04:57:36 +0200 Subject: [PATCH 060/654] Add Polish PESEL number --- stdnum/pl/pesel.py | 121 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 stdnum/pl/pesel.py diff --git a/stdnum/pl/pesel.py b/stdnum/pl/pesel.py new file mode 100644 index 00000000..4fcb4908 --- /dev/null +++ b/stdnum/pl/pesel.py @@ -0,0 +1,121 @@ +# pesel.py - functions for handling Polish national identification numbers +# coding: utf-8 +# +# Copyright (C) 2015 Dariusz Choruzy +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""PESEL (Polish national identification number). + +The Powszechny Elektroniczny System Ewidencji Ludności (PESEL, Universal +Electronic System for Registration of the Population) is a 11-digit Polish +national identification number. The number consists of the date of birth, +a serial number, the person's gender and a check digit. + + +>>> validate('44051401359') +'44051401359' +>>> validate('44051401358') # incorrect check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('02381307589') # invalid birth date +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> get_birth_date('02122401358') +datetime.date(1902, 12, 24) +>>> get_gender('02122401358') +'M' +>>> get_birth_date('02211307589') +datetime.date(2002, 1, 13) +>>> get_gender('02211307589') +'F' +""" + +import datetime + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').upper().strip() + + +def get_birth_date(number): + """Split the date parts from the number and return the birth date.""" + number = compact(number) + year = int(number[0:2]) + month = int(number[2:4]) + day = int(number[4:6]) + year += { + 0: 1900, + 1: 2000, + 2: 2100, + 3: 2200, + 4: 1800, + }[month // 20] + month = month % 20 + try: + return datetime.date(year, month, day) + except ValueError: + raise InvalidComponent() + + +def get_gender(number): + """Get the person's birth gender ('M' or 'F').""" + number = compact(number) + if number[9] in '02468': # even + return 'F' + else: # odd: 13579 + return 'M' + + +def calc_check_digit(number): + """Calculate the check digit for organisations. The number passed + should not have the check digit included.""" + weights = (1, 3, 7, 9, 1, 3, 7, 9, 1, 3) + check = sum(weights[i] * int(n) for i, n in enumerate(number)) + return str((10 - check) % 10) + + +def validate(number): + """Checks to see if the number provided is a valid + national identification number. This checks the length, + formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 11: + raise InvalidLength() + if number[-1] != calc_check_digit(number[:-1]): + raise InvalidChecksum() + get_birth_date(number) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid + national identification number. This checks the length, + formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 36217ac8d09f0de594b1ba9b17b435329c16548c Mon Sep 17 00:00:00 2001 From: Dariusz Choruzy Date: Mon, 7 Sep 2015 00:53:57 +0200 Subject: [PATCH 061/654] Add Polish REGON number --- stdnum/pl/regon.py | 95 ++++++++++++++++++++++++++++++++ tests/test_pl_regon.doctest | 104 ++++++++++++++++++++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100644 stdnum/pl/regon.py create mode 100644 tests/test_pl_regon.doctest diff --git a/stdnum/pl/regon.py b/stdnum/pl/regon.py new file mode 100644 index 00000000..5099b55d --- /dev/null +++ b/stdnum/pl/regon.py @@ -0,0 +1,95 @@ +# pesel.py - functions for handling REGON numbers +# coding: utf-8 +# +# Copyright (C) 2015 Dariusz Choruzy +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""REGON (Rejestr Gospodarki Narodowej, Polish register of economic units). + +The REGON (Rejestr Gospodarki Narodowej) is a statistical identification +number for businesses. National entities are assigned a 9-digit number, while +local units append 5 digits to form a 14-digit number. + +More information can be found at: + http://bip.stat.gov.pl/en/regon/ + http://www.stat.gov.pl/bip/regon_ENG_HTML.htm + https://wyszukiwarkaregon.stat.gov.pl/appBIR/index.aspx + +>>> validate('192598184') +'192598184' +>>> validate('123456785') +'123456785' +>>> validate('192598183') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('12345678512347') +'12345678512347' +>>> validate('12345678612342') # first check digit invalid +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('12345678512348') # last check digit invalid +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').upper().strip() + + +def calc_check_digit(number): + """Calculate the check digit for organisations. The number passed + should not have the check digit included.""" + if len(number) == 8: + weights = (8, 9, 2, 3, 4, 5, 6, 7) + else: + weights = (2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8) + check = sum(weights[i] * int(n) for i, n in enumerate(number)) + return str(check % 11 % 10) + + +def validate(number): + """Checks to see if the number provided is a valid REGON number. This + checks the length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) not in (9, 14): + raise InvalidLength() + if number[-1] != calc_check_digit(number[:-1]): + raise InvalidChecksum() + if len(number) == 14 and number[8] != calc_check_digit(number[:8]): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid REGON number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_pl_regon.doctest b/tests/test_pl_regon.doctest new file mode 100644 index 00000000..ecd4f691 --- /dev/null +++ b/tests/test_pl_regon.doctest @@ -0,0 +1,104 @@ +test_pl_regon.doctest - more detailed doctests for the stdnum.pl.regon module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.pl.regon module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.pl import regon +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 000144992 +... 000262289 +... 000569734 +... 001123710 +... 001130740 +... 001130762 +... 001130785 +... 004611261 +... 010925233 +... 011370116 +... 015615046 +... 015831301 +... 017282442 +... 021425170 +... 021493503 +... 061245300 +... 080121017 +... 101286521 +... 101624716 +... 101702037 +... 120444729 +... 120812966 +... 122903064 +... 122989806 +... 140006787 +... 140124720 +... 140567178 +... 140906290 +... 141215688 +... 147244188 +... 160178314 +... 180405830 +... 180562050 +... 190248215 +... 190384415 +... 191305139 +... 192976380 +... 200197338 +... 220218697 +... 221997249 +... 241675487 +... 271747631 +... 276273209 +... 280002520 +... 292449593 +... 300613124 +... 302406613 +... 357126121 +... 360935507 +... 362392991 +... 362501144 +... 362509447 +... 362509460 +... 362509476 +... 362523660 +... 370418951 +... 370452988 +... 432740426 +... 570007868 +... 570135170 +... 570271370 +... 570860528 +... 572134252 +... 630679076 +... 632154969 +... 634389910 +... 670141210 +... 810033277 +... 812663628 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not regon.is_valid(x)] +[] From e045c710ae59d0c74c690c5bfe2111b43738aa45 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 27 Sep 2015 12:45:19 +0200 Subject: [PATCH 062/654] Add more numbers found online --- tests/test_eu_vat.doctest | 59 +++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/tests/test_eu_vat.doctest b/tests/test_eu_vat.doctest index 098dfd1d..ce10efd5 100644 --- a/tests/test_eu_vat.doctest +++ b/tests/test_eu_vat.doctest @@ -1,6 +1,6 @@ test_eu_vat.doctest - more detailed doctests for the stdnum.eu.vat module -Copyright (C) 2012, 2013 Arthur de Jong +Copyright (C) 2012-2015 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -47,6 +47,7 @@ These have been found online and should all be valid numbers. ... ATU 65033803 ... ATU 65034704 ... ATU 65480455 +... ATU13585627 ... ATU46080404 ... ATU61195628 ... @@ -66,6 +67,7 @@ These have been found online and should all be valid numbers. ... BE 444.503.092 ... BE 456.973.433 ... BE 464 401 356 +... BE0428759497 ... BE413562567 ... BE697449992 ... @@ -80,6 +82,11 @@ These have been found online and should all be valid numbers. ... BG 200182590 ... BG 200950556 ... BG130544585 +... BG175074752 +... BG7111042925 +... BG7523169263 +... BG7542011030 +... BG8032056031 ... Bg 200442771 ... ... CY 10246672X @@ -107,6 +114,10 @@ These have been found online and should all be valid numbers. ... CZ49620819 ... CZ6306150004 ... +... DE - 113866163 +... DE - 231969187 +... DE - 265265318 +... DE - 267297673 ... DE 118619592 ... DE 125014955 ... DE 129304291 @@ -122,10 +133,6 @@ These have been found online and should all be valid numbers. ... DE 811305931 ... DE 813 11 38 75 ... DE 813 184868 -... DE - 113866163 -... DE - 231969187 -... DE - 265265318 -... DE - 267297673 ... DE119263782 ... DE129390950 ... DE136308783 @@ -384,11 +391,11 @@ These have been found online and should all be valid numbers. ... IE 9741812E ... IE 9742129V ... IE-9696131F +... IE6433435IH +... IE6433435OA ... IE6599001W ... IE8D79739I ... IE9Y71814N -... IE6433435OA -... IE6433435IH ... ... IT - 01404480202 ... IT 0 0 6 1 8 2 8 0 4 9 9 @@ -541,18 +548,54 @@ These have been found online and should all be valid numbers. ... NL811705262B01 ... NL813411786B01 ... +... PL 5211355116 ... PL 5211754253 -... PL 5262987091 +... PL 5220205853 +... PL 5342152448 +... PL 5423074698 ... PL 584-030-44-72 ... PL 5840154038 ... PL 5840304472 ... PL 5860224115 ... PL 6330005110 +... PL 645-000-67-50 +... PL 6651344956 ... PL 6661913137 +... PL 6772320831 +... PL 6792831859 +... PL 6831810615 +... PL 6842599822 ... PL 687-16-26-585 +... PL 7010098470 +... PL 7271676569 +... PL 764-23-05-489 +... PL 764-23-05-495 +... PL 764-23-05-503 +... PL 764-23-05-526 +... PL 764-23-05-549 +... PL 764-23-05-555 +... PL 764-23-05-578 +... PL 767-000-06-78 +... PL 767-13-25-342 +... PL 767-14-25-718 +... PL 767-14-47-329 +... PL 768-000-24-66 +... PL 7711598811 ... PL 777 26 68 285 ... PL 7780104605 ... PL 7881154591 +... PL 7961373674 +... PL 8393173893 +... PL 851-020-66-96 +... PL 867-16-19-297 +... PL 8722342429 +... PL 8771130532 +... PL 8971772896 +... PL 8992708633 +... PL 9241826918 +... PL 9452174677 +... PL 9462485048 +... PL 9542705026 ... PL 9562197426 ... PL-7532365958 ... PL-951-157-77-68 From 222a87ef324f66baf8113020b41d336c459ab847 Mon Sep 17 00:00:00 2001 From: Sergio Isidoro Date: Thu, 1 Oct 2015 14:14:49 +0300 Subject: [PATCH 063/654] Add alias to hetu in for finnish personal id code --- stdnum/fi/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/stdnum/fi/__init__.py b/stdnum/fi/__init__.py index 54f89b95..eab8d0d1 100644 --- a/stdnum/fi/__init__.py +++ b/stdnum/fi/__init__.py @@ -23,3 +23,4 @@ # provide vat as an alias from stdnum.fi import alv as vat from stdnum.fi import ytunnus as businessid +from stdnum.fi import hetu as personalid From 3d1dbbb9c24e377374341e489e62edb1dfc5f360 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 2 Oct 2015 16:41:56 +0200 Subject: [PATCH 064/654] Use zip() instead of enumerate() Makes the code slightly simpler and more compact. --- stdnum/ar/cuit.py | 2 +- stdnum/bg/egn.py | 4 ++-- stdnum/bg/pnf.py | 4 ++-- stdnum/bg/vat.py | 4 ++-- stdnum/co/nit.py | 4 ++-- stdnum/dk/cpr.py | 4 ++-- stdnum/dk/cvr.py | 4 ++-- stdnum/do/rnc.py | 2 +- stdnum/ec/ruc.py | 4 ++-- stdnum/ee/kmkr.py | 4 ++-- stdnum/fi/alv.py | 4 ++-- stdnum/gb/vat.py | 4 ++-- stdnum/hu/anum.py | 4 ++-- stdnum/is_/kennitala.py | 2 +- stdnum/lv/pvn.py | 4 ++-- stdnum/mt/vat.py | 4 ++-- stdnum/no/orgnr.py | 2 +- stdnum/pl/nip.py | 4 ++-- stdnum/pl/pesel.py | 2 +- stdnum/pl/regon.py | 2 +- stdnum/ro/cf.py | 4 ++-- stdnum/ro/cnp.py | 4 ++-- 22 files changed, 38 insertions(+), 38 deletions(-) diff --git a/stdnum/ar/cuit.py b/stdnum/ar/cuit.py index 78e81aaf..fb6bf83e 100644 --- a/stdnum/ar/cuit.py +++ b/stdnum/ar/cuit.py @@ -56,7 +56,7 @@ def compact(number): def calc_check_digit(number): """Calculate the check digit.""" weights = (5, 4, 3, 2, 7, 6, 5, 4, 3, 2) - check = sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + check = sum(w * int(n) for w, n in zip(weights, number)) % 11 return '012345678990'[11 - check] diff --git a/stdnum/bg/egn.py b/stdnum/bg/egn.py index 7f94946e..5aa007be 100644 --- a/stdnum/bg/egn.py +++ b/stdnum/bg/egn.py @@ -1,7 +1,7 @@ # egn.py - functions for handling Bulgarian national identification numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -57,7 +57,7 @@ def calc_check_digit(number): """Calculate the check digit. The number passed should not have the check digit included.""" weights = (2, 4, 8, 5, 10, 9, 7, 3, 6) - return str(sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 % 10) + return str(sum(w * int(n) for w, n in zip(weights, number)) % 11 % 10) def get_birth_date(number): diff --git a/stdnum/bg/pnf.py b/stdnum/bg/pnf.py index bddfb2b7..0f2eb648 100644 --- a/stdnum/bg/pnf.py +++ b/stdnum/bg/pnf.py @@ -1,7 +1,7 @@ # pnf.py - functions for handling Bulgarian personal number of a foreigner # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -49,7 +49,7 @@ def calc_check_digit(number): """Calculate the check digit. The number passed should not have the check digit included.""" weights = (21, 19, 17, 13, 11, 9, 7, 3, 1) - return str(sum(weights[i] * int(n) for i, n in enumerate(number)) % 10) + return str(sum(w * int(n) for w, n in zip(weights, number)) % 10) def validate(number): diff --git a/stdnum/bg/vat.py b/stdnum/bg/vat.py index f00e0da4..757c48ae 100644 --- a/stdnum/bg/vat.py +++ b/stdnum/bg/vat.py @@ -1,7 +1,7 @@ # vat.py - functions for handling Bulgarian VAT numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -61,7 +61,7 @@ def calc_check_digit_other(number): """Calculate the check digit for others. The number passed should not have the check digit included.""" weights = (4, 3, 2, 7, 6, 5, 4, 3, 2) - return str((11 - sum(weights[i] * int(n) for i, n in enumerate(number))) % 11) + return str((11 - sum(w * int(n) for w, n in zip(weights, number))) % 11) def validate(number): diff --git a/stdnum/co/nit.py b/stdnum/co/nit.py index 3b4ec089..6884ce3f 100644 --- a/stdnum/co/nit.py +++ b/stdnum/co/nit.py @@ -59,8 +59,8 @@ def calc_check_digit(number): """Calculate the check digit. The number passed should not have the check digit included.""" weights = (3, 7, 13, 17, 19, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71) - s = sum(int(n) * weights[i] for i, n in enumerate(number[::-1])) - return '01987654321'[s % 11] + s = sum(w * int(n) for w, n in zip(weights, reversed(number))) % 11 + return '01987654321'[s] def validate(number): diff --git a/stdnum/dk/cpr.py b/stdnum/dk/cpr.py index 456be21f..4bf4a449 100644 --- a/stdnum/dk/cpr.py +++ b/stdnum/dk/cpr.py @@ -1,6 +1,6 @@ # cpr.py - functions for handling Danish CPR numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -59,7 +59,7 @@ def checksum(number): """Calculate the checksum. Note that the checksum isn't actually used any more. Valid numbers used to have a checksum of 0.""" weights = (4, 3, 2, 7, 6, 5, 4, 3, 2, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def get_birth_date(number): diff --git a/stdnum/dk/cvr.py b/stdnum/dk/cvr.py index 7ded1ac6..3088c40e 100644 --- a/stdnum/dk/cvr.py +++ b/stdnum/dk/cvr.py @@ -1,6 +1,6 @@ # cvr.py - functions for handling Danish CVR numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -46,7 +46,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (2, 7, 6, 5, 4, 3, 2, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def validate(number): diff --git a/stdnum/do/rnc.py b/stdnum/do/rnc.py index 4134ad50..dce10e61 100644 --- a/stdnum/do/rnc.py +++ b/stdnum/do/rnc.py @@ -49,7 +49,7 @@ def compact(number): def calc_check_digit(number): """Calculate the check digit.""" weights = (7, 9, 8, 6, 5, 4, 3, 2) - check = sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + check = sum(w * int(n) for w, n in zip(weights, number)) % 11 return str((10 - check) % 9 + 1) diff --git a/stdnum/ec/ruc.py b/stdnum/ec/ruc.py index 88874674..1312f77c 100644 --- a/stdnum/ec/ruc.py +++ b/stdnum/ec/ruc.py @@ -2,7 +2,7 @@ # coding: utf-8 # # Copyright (C) 2014 Jonathan Finlay -# Copyright (C) 2014 Arthur de Jong +# Copyright (C) 2014-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -49,7 +49,7 @@ def _checksum(number, weights): """Calculate a checksum over the number given the weights.""" - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def validate(number): diff --git a/stdnum/ee/kmkr.py b/stdnum/ee/kmkr.py index 7a8dd303..4b098c44 100644 --- a/stdnum/ee/kmkr.py +++ b/stdnum/ee/kmkr.py @@ -1,7 +1,7 @@ # kmkr.py - functions for handling Estonian VAT numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -46,7 +46,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (3, 7, 1, 3, 7, 1, 3, 7, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 10 + return sum(w * int(n) for w, n in zip(weights, number)) % 10 def validate(number): diff --git a/stdnum/fi/alv.py b/stdnum/fi/alv.py index ed9457c3..832742c4 100644 --- a/stdnum/fi/alv.py +++ b/stdnum/fi/alv.py @@ -1,7 +1,7 @@ # vat.py - functions for handling Finnish VAT numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -46,7 +46,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (7, 9, 10, 5, 8, 4, 2, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def validate(number): diff --git a/stdnum/gb/vat.py b/stdnum/gb/vat.py index 1e93cc91..a4f51743 100644 --- a/stdnum/gb/vat.py +++ b/stdnum/gb/vat.py @@ -1,6 +1,6 @@ # vat.py - functions for handling United Kingdom VAT numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -52,7 +52,7 @@ def checksum(number): """Calculate the checksum. The checksum is only used for the 9 digits of the number and the result can either be 0 or 42.""" weights = (8, 7, 6, 5, 4, 3, 2, 10, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 97 + return sum(w * int(n) for w, n in zip(weights, number)) % 97 def validate(number): diff --git a/stdnum/hu/anum.py b/stdnum/hu/anum.py index e6d93152..5504f46a 100644 --- a/stdnum/hu/anum.py +++ b/stdnum/hu/anum.py @@ -1,7 +1,7 @@ # anum.py - functions for handling Hungarian VAT numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -47,7 +47,7 @@ def compact(number): def checksum(number): """Calculate the checksum. Valid numbers should have a checksum of 0.""" weights = (9, 7, 3, 1, 9, 7, 3, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 10 + return sum(w * int(n) for w, n in zip(weights, number)) % 10 def validate(number): diff --git a/stdnum/is_/kennitala.py b/stdnum/is_/kennitala.py index 5ffb73f0..55647eb9 100644 --- a/stdnum/is_/kennitala.py +++ b/stdnum/is_/kennitala.py @@ -68,7 +68,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (3, 2, 7, 6, 5, 4, 3, 2, 1, 0) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def validate(number): diff --git a/stdnum/lv/pvn.py b/stdnum/lv/pvn.py index 595e0b8a..dbb3b007 100644 --- a/stdnum/lv/pvn.py +++ b/stdnum/lv/pvn.py @@ -1,7 +1,7 @@ # pvn.py - functions for handling Latvian PVN (VAT) numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -62,7 +62,7 @@ def compact(number): def checksum(number): """Calculate the checksum for legal entities.""" weights = (9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def calc_check_digit_pers(number): diff --git a/stdnum/mt/vat.py b/stdnum/mt/vat.py index 197c9cac..357c8f22 100644 --- a/stdnum/mt/vat.py +++ b/stdnum/mt/vat.py @@ -1,6 +1,6 @@ # vat.py - functions for handling Maltese VAT numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -46,7 +46,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (3, 4, 6, 7, 8, 9, 10, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 37 + return sum(w * int(n) for w, n in zip(weights, number)) % 37 def validate(number): diff --git a/stdnum/no/orgnr.py b/stdnum/no/orgnr.py index 64481861..993d9da3 100644 --- a/stdnum/no/orgnr.py +++ b/stdnum/no/orgnr.py @@ -48,7 +48,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (3, 2, 7, 6, 5, 4, 3, 2, 1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def validate(number): diff --git a/stdnum/pl/nip.py b/stdnum/pl/nip.py index 45e18da7..8f8bd0f9 100644 --- a/stdnum/pl/nip.py +++ b/stdnum/pl/nip.py @@ -1,6 +1,6 @@ # nip.py - functions for handling Polish VAT numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -48,7 +48,7 @@ def compact(number): def checksum(number): """Calculate the checksum.""" weights = (6, 5, 7, 2, 3, 4, 5, 6, 7, -1) - return sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + return sum(w * int(n) for w, n in zip(weights, number)) % 11 def validate(number): diff --git a/stdnum/pl/pesel.py b/stdnum/pl/pesel.py index 4fcb4908..0f5901d9 100644 --- a/stdnum/pl/pesel.py +++ b/stdnum/pl/pesel.py @@ -92,7 +92,7 @@ def calc_check_digit(number): """Calculate the check digit for organisations. The number passed should not have the check digit included.""" weights = (1, 3, 7, 9, 1, 3, 7, 9, 1, 3) - check = sum(weights[i] * int(n) for i, n in enumerate(number)) + check = sum(w * int(n) for w, n in zip(weights, number)) return str((10 - check) % 10) diff --git a/stdnum/pl/regon.py b/stdnum/pl/regon.py index 5099b55d..ac8cffbe 100644 --- a/stdnum/pl/regon.py +++ b/stdnum/pl/regon.py @@ -67,7 +67,7 @@ def calc_check_digit(number): weights = (8, 9, 2, 3, 4, 5, 6, 7) else: weights = (2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8) - check = sum(weights[i] * int(n) for i, n in enumerate(number)) + check = sum(w * int(n) for w, n in zip(weights, number)) return str(check % 11 % 10) diff --git a/stdnum/ro/cf.py b/stdnum/ro/cf.py index a27f9800..c953c251 100644 --- a/stdnum/ro/cf.py +++ b/stdnum/ro/cf.py @@ -1,7 +1,7 @@ # cf.py - functions for handling Romanian CF (VAT) numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -51,7 +51,7 @@ def calc_check_digit(number): should not have the check digit included.""" weights = (7, 5, 3, 2, 1, 7, 5, 3, 2) number = (9 - len(number)) * '0' + number - check = 10 * sum(weights[i] * int(n) for i, n in enumerate(number)) + check = 10 * sum(w * int(n) for w, n in zip(weights, number)) return str(check % 11 % 10) diff --git a/stdnum/ro/cnp.py b/stdnum/ro/cnp.py index bb571720..ad27149a 100644 --- a/stdnum/ro/cnp.py +++ b/stdnum/ro/cnp.py @@ -1,7 +1,7 @@ # cnp.py - functions for handling Romanian CNP numbers # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -56,7 +56,7 @@ def calc_check_digit(number): should not have the check digit included.""" # note that this algorithm has not been confirmed by an independent source weights = (2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9) - check = sum(weights[i] * int(n) for i, n in enumerate(number)) % 11 + check = sum(w * int(n) for w, n in zip(weights, number)) % 11 return '1' if check == 10 else str(check) From d413f953b848bd67e0f5267d3649d26e20d7c04b Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 2 Oct 2015 21:13:41 +0200 Subject: [PATCH 065/654] Fix comment --- stdnum/isbn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/isbn.py b/stdnum/isbn.py index 2bc2b6e7..a49d9d70 100644 --- a/stdnum/isbn.py +++ b/stdnum/isbn.py @@ -137,7 +137,7 @@ def to_isbn10(number): number = number.strip() min_number = compact(number, convert=False) if len(min_number) == 10: - return number # nothing to do, already ISBN-13 + return number # nothing to do, already ISBN-10 elif isbn_type(min_number) != 'ISBN13': raise InvalidFormat('Not a valid ISBN13.') elif not number.startswith('978'): From 38ed9c0beeed897e14c4bcd46ee15e29d81239ed Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 4 Oct 2015 16:13:13 +0200 Subject: [PATCH 066/654] Update Colombian NIT checks This adds a number of tests for numbers found online. The length check has also been revisited because both shorter numbers and longer number have been found. This also updates the format() function to handle arbitrary length numbers. --- stdnum/co/nit.py | 29 ++-- tests/test_co_nit.doctest | 298 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 308 insertions(+), 19 deletions(-) create mode 100644 tests/test_co_nit.doctest diff --git a/stdnum/co/nit.py b/stdnum/co/nit.py index 6884ce3f..dbc4f1ca 100644 --- a/stdnum/co/nit.py +++ b/stdnum/co/nit.py @@ -22,27 +22,17 @@ """NIT (Número De Identificación Tributaria, Colombian identity code). -This number, also referred to as RUT (Registro Unico Tributario) is a 10-digit -code that includes a check digit. +This number, also referred to as RUT (Registro Unico Tributario) is the +Colombian business tax number. >>> validate('213.123.432-1') '2131234321' ->>> validate('2131234351') -'2131234351' ->>> validate('2131234350') +>>> validate('2131234325') Traceback (most recent call last): ... InvalidChecksum: ... ->>> validate('213123435') -Traceback (most recent call last): - ... -InvalidLength: ... ->>> validate('213123435A') -Traceback (most recent call last): - ... -InvalidFormat: ... ->>> format('2131234351') -'213.123.435-1' +>>> format('2131234321') +'213.123.432-1' """ from stdnum.exceptions import * @@ -52,7 +42,7 @@ def compact(number): """Convert the number to the minimal representation. This strips surrounding whitespace and separation dash.""" - return clean(number, '.-').upper().strip() + return clean(number, '.,- ').upper().strip() def calc_check_digit(number): @@ -67,7 +57,7 @@ def validate(number): """Checks to see if the number provided is a valid number. This checks the length, formatting and check digit.""" number = compact(number) - if len(number) != 10: + if not 8 <= len(number) <= 16: raise InvalidLength() if not number.isdigit(): raise InvalidFormat() @@ -88,5 +78,6 @@ def is_valid(number): def format(number): """Reformat the passed number to the standard format.""" number = compact(number) - return (number[:-7] + '.' + number[-7:-4] + '.' + - number[-4:-1] + '-' + number[-1]) + return ('.'.join( + number[i - 3:i] for i in reversed(range(-1, -len(number), -3))) + + '-' + number[-1]) diff --git a/tests/test_co_nit.doctest b/tests/test_co_nit.doctest new file mode 100644 index 00000000..5999f9a3 --- /dev/null +++ b/tests/test_co_nit.doctest @@ -0,0 +1,298 @@ +test_co_nit.doctest - more detailed doctests for the stdnum.co.nit module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.co.nit module. + +>>> from stdnum.co import nit +>>> from stdnum.exceptions import * + + +Some more detailed checks. Some of these were previously in the module +docstring. + +>>> nit.validate('213.123.432-1') +'2131234321' +>>> nit.validate('2131234351') +'2131234351' +>>> nit.validate('2131234351') +'2131234351' +>>> nit.validate('2131234') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> nit.validate('213123435A') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> nit.validate('2131234350') +Traceback (most recent call last): + ... +InvalidChecksum: ... + + +Extra checks for format function to see that it works with all kinds of +lengths. + +>>> nit.format('123.456.789-0') +'123.456.789-0' +>>> nit.format('12.345.678.912-0') +'12.345.678.912-0' +>>> nit.format('1.234.567-0') +'1.234.567-0' + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 1118534248-0 +... 15.252.525-0 +... 17.343.020-1 +... 35324530-0 +... 37547837-0 +... 375478370 +... 51.922.998-7 +... 52.238.803-1 +... 6.386.949-2 +... 79.308.960-7 +... 79.896.529.6 +... 79626331-8 +... 79627373-1 +... 796273731 +... 800.003.122-6 +... 800.020.672-7 +... 800.026.452-0 +... 800.043.909-6 +... 800.100.532-8 +... 800.184.048-4 +... 800.219.488-4 +... 800.231.969-4 +... 800.242.106-2 +... 800.249.704-9 +... 800088702-2 +... 800112806-2 +... 800130907-4 +... 800140949-6 +... 800216278-0 +... 800224808-8 +... 800224827-8 +... 800226098 - 4 +... 800227940-6 +... 800228175 - 2 +... 800229739-0 +... 800231967-1 +... 800231969-4 +... 800240882-0 +... 800242272-7 +... 800250119-1 +... 800251440-6 +... 800253055-2 +... 800256161 - 9 +... 804001273-5 +... 805.014.583-3 +... 805000427-1 +... 805001157-2 +... 805021984-2 +... 811.014.798-1 +... 811019263-6 +... 812.007.765-3 +... 819.006.966-8 +... 830.015.428-5 +... 830.025.281-2 +... 830.035.734-1 +... 830.036-334-1 +... 830.042.619-1 +... 830.056.202-3 +... 830.061.111-1 +... 830.096.401-3 +... 830.136.779-4 +... 830003564-7 +... 830005997 - 1 +... 830005997-1 +... 830006404-0 +... 830008686-1 +... 830009783-0 +... 830074184-5 +... 830096513-1 +... 830097607-8 +... 830113831-0 +... 830125132-2 +... 830130800-4 +... 844.003.225-6 +... 844.003.392-8 +... 860 001 986-1 +... 860.001.986-1 +... 860.002.134-8 +... 860.002.184-6 +... 860.006.606-0 +... 860.007.331-5 +... 860.007.336-1 +... 860.013.433-2 +... 860.013.570-3 +... 860.013.798-5 +... 860.020.309-6 +... 860.033.941-8 +... 860.045.904-7 +... 860.051.784-4 +... 860.065.795-6 +... 860.066.942-7 +... 860.400.538-7 +... 860.400.602-0 +... 860.402.717-8 +... 860.511.071-6 +... 860.516.636-1 +... 860.527.857-8 +... 860001986-1 +... 8600019861 +... 860002183 - 9 +... 860002183-9 +... 860002503 - 2 +... 860002503-2 +... 860002527-9 +... 860002528 - 6 +... 860002964-4 +... 860006606-0 +... 860007331-5 +... 8600073361 +... 860007379-8 +... 860009174-4 +... 860011153 - 6 +... 860011153-6 +... 860013433-2 +... 860013816 - 1 +... 860013816-1 +... 860022137-5 +... 860027404 - 1 +... 860027404-1 +... 860028415 - 5 +... 860066942-7 +... 860503617 - 3 +... 860512237-6 +... 890 981 268 -— 4 +... 890 981 268 — 4 +... 890.000.062-6 +... 890.000.381-0 +... 890.101.994-9 +... 890.102.002-2 +... 890.102.044-1 +... 890.106.291-2 +... 890.201.213-4 +... 890.201.578-7 +... 890.270.275-5 +... 890.303.093-5 +... 890.304.033-8 +... 890.399.025-6 +... 890.480.023-7 +... 890.480.110-1 +... 890.500.516-3 +... 890.500.675-6 +... 890.680.023-5 +... 890.700.148-4 +... 890.700.679-3 +... 890.806.490-5 +... 890.900.840-1 +... 890.900.841-9 +... 890.907.106-5 +... 890000062-6 +... 890000381-0 +... 890102044-1 +... 890303093-5 +... 890480110-1 +... 890680023-5 +... 890704737-0 +... 890900840-1 +... 890900842-6 +... 8909009431 +... 890904996-1 +... 891.080.005-1 +... 891.180.008-2 +... 891.190.047-2 +... 891.190.346-1 +... 891.200.208-6 +... 891.200.337-8 +... 891.380.056-4 +... 891.400.726-8 +... 891.411.166-0 +... 891.480.000-1 +... 891.480.035-9 +... 891.500.182-0 +... 891.600.091-8 +... 891.780.093-3 +... 891.800.213-8 +... 891.856.077-3 +... 891.900.280-0 +... 891.900.452-0 +... 891280008-1 +... 891380003-4 +... 891480000-1 +... 891500182-0 +... 891900280-0 +... 891900452-0 +... 892.115.006-5 +... 892.200.015-5 +... 892.399.989-8 +... 892.400.320-5 +... 899.999.035-7 +... 899999001-7 +... 899999010-3 +... 899999026-0 +... 899999034-1 +... 899999054-7 +... 899999239-2 +... 899999734-7 +... 900 206 480 - 2 +... 900 206 480-2 +... 900 206 483-4 +... 900,206,480-2 +... 900,206,483-4 +... 900.006.334-7 +... 900.018.436-1 +... 900.086.865-8 +... 900.141.702-1 +... 900.187.401-8 +... 900.206,483-4 +... 900.206.480-2 +... 900.206.483-4 +... 900.274.326-6 +... 900.311.121-2 +... 900.320.056-1 +... 900.323.466—1 +... 900.343.302-6 +... 900.433.479-7 +... 900.465.924-0 +... 900.499.432-5 +... 900074992-3 +... 900112778-7 +... 900156264-2 +... 900206480-2 +... 900206483-4 +... 900219251-9 +... 900227140-3 +... 9002271403 +... 900264507-1 +... 900299795-5 +... 900336004-7 +... 900356846-7 +... 900462447-5 +... 900812264-7 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not nit.is_valid(x)] +[] From fd0cfd9f894c7f6750bc9e86700632591d70b0f3 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 4 Oct 2015 22:28:06 +0200 Subject: [PATCH 067/654] Move finding VAT module to util This moves the finding of a VAT module to the util module so that it can be more easily re-used for non-EU countries. --- stdnum/eu/vat.py | 7 ++----- stdnum/util.py | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index d867e3bd..94525d57 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -40,7 +40,7 @@ """ from stdnum.exceptions import * -from stdnum.util import clean +from stdnum.util import clean, get_vat_module country_codes = set([ @@ -69,10 +69,7 @@ def _get_cc_module(cc): if cc not in country_codes: return if cc not in _country_modules: - # do `from stdnum.CC import vat` instead of `import stdnum.CC.vat` - # to handle the case where vat is an alias - _country_modules[cc] = __import__( - 'stdnum.%s' % cc, globals(), locals(), ['vat']).vat + _country_modules[cc] = get_vat_module(cc) return _country_modules[cc] diff --git a/stdnum/util.py b/stdnum/util.py index 420d3637..74bd0958 100644 --- a/stdnum/util.py +++ b/stdnum/util.py @@ -1,7 +1,7 @@ # util.py - common utility functions # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012, 2013, 2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -23,6 +23,11 @@ This module is meant for internal use by stdnum modules and is not guaranteed to remain stable and as such not part of the public API of stdnum. + +>>> get_vat_module('nl').__name__ +'stdnum.nl.btw' +>>> get_vat_module('is').__name__ +'stdnum.is_.vsk' """ import pkgutil @@ -91,6 +96,13 @@ def _mk_char_map(mapping): })) +# mapping of country codes to internally used names +# used in the get_vat_module() function +_cc_translations = { + 'el': 'gr', 'is': 'is_', +} + + def _clean_chars(number): """Replace various Unicode characters with their ASCII counterpart.""" return ''.join(_char_map.get(x, x) for x in number) @@ -153,3 +165,10 @@ def get_module_list(): module.__name__.replace('stdnum.', ''), get_module_name(module), ) + + +def get_vat_module(cc): + """Find the VAT number module based on the country code.""" + cc = cc.lower() + cc = _cc_translations.get(cc, cc) + return __import__('stdnum.%s' % cc, globals(), locals(), ['vat']).vat From ec9bcb0f13971b70e40dff7a6de3d4744ee4ea61 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 5 Oct 2015 12:11:23 +0200 Subject: [PATCH 068/654] Add Mexican RFC number This adds support for the Mexican tax number RFC (Registro Federal de Contribuyentes). This module includes a number of checks on the number but the validation of the last check digit is disabled by default because a large number of numbers were found that were otherwise valid but had an invalid check digit. --- stdnum/mx/__init__.py | 24 ++ stdnum/mx/rfc.py | 150 +++++++++++ tests/test_mx_rfc.doctest | 531 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 705 insertions(+) create mode 100644 stdnum/mx/__init__.py create mode 100644 stdnum/mx/rfc.py create mode 100644 tests/test_mx_rfc.doctest diff --git a/stdnum/mx/__init__.py b/stdnum/mx/__init__.py new file mode 100644 index 00000000..6c8c1832 --- /dev/null +++ b/stdnum/mx/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Mexican numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Mexican numbers.""" + +# provide vat as an alias +from stdnum.mx import rfc as vat diff --git a/stdnum/mx/rfc.py b/stdnum/mx/rfc.py new file mode 100644 index 00000000..72084e6c --- /dev/null +++ b/stdnum/mx/rfc.py @@ -0,0 +1,150 @@ +# rfc.py - functions for handling Mexican tax numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""RFC (Registro Federal de Contribuyentes, Mexican tax number). + +This number is used to identify individuals and companies for tax purposes. + +The company number is 12 digits where the first 3 letters or digits are +derived from the name of the company, the following 6 contain the date of +incorporation, followed by 3 check digits. + +Personal numbers consist of 13 digits where the first 4 characters from the +person's name, followed by their birth date and 3 check digits. + +The first two check digits are calculated based on the person's or company's +full name. The last check digit is calculated over all the preceding digits +in the number. However, it seems a lot of numbers are in use with invalid +check digits so this test is disabled by default. + +More information can be found at: + http://www.sisi.org.mx/jspsi/documentos/2005/seguimiento/06101/0610100162005_065.doc + https://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico) + +>>> validate('GODE 561231 GR8') # personal number +'GODE561231GR8' +>>> validate('MAB-930714-8T4') # company number +'MAB9307148T4' +>>> validate('COMG-600703') # personal number without serial +'COMG600703' +>>> validate('VACE-460910-SX6') +'VACE460910SX6' +>>> validate('VACE-460910-SX6', validate_check_digits=True) +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('GODE561231GR8') +'GODE 561231 GR8' +""" + +import datetime +import re + +from stdnum.exceptions import * +from stdnum.util import clean + + +# regular expression for matching numbers +_rfc_re = re.compile(r'^[A-Z&Ñ]{3,4}[0-9]{6}[0-9A-Z]{0,5}$') + + +# regular expression for matching the last 3 check digits +_check_digits_re = re.compile(r'^[1-9A-V][1-9A-Z][0-9A]$') + + +# these values should not appear as first part of a personal number +_name_blacklist = set([ + 'BUEI', 'BUEY', 'CACA', 'CACO', 'CAGA', 'CAGO', 'CAKA', 'CAKO', 'COGE', + 'COJA', 'COJE', 'COJI', 'COJO', 'CULO', 'FETO', 'GUEY', 'JOTO', 'KACA', + 'KACO', 'KAGA', 'KAGO', 'KAKA', 'KOGE', 'KOJO', 'KULO', 'MAME', 'MAMO', + 'MEAR', 'MEAS', 'MEON', 'MION', 'MOCO', 'MULA', 'PEDA', 'PEDO', 'PENE', + 'PUTA', 'PUTO', 'QULO', 'RATA', 'RUIN', +]) + + +# characters used for checksum calculation, +_alphabet = '0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ Ñ' + + +def compact(number): + """Convert the number to the minimal representation. This strips + surrounding whitespace and separation dash.""" + return clean(number, '-_ ').upper().strip() + + +def _get_date(number): + """Convert the part of the number that represents a date into a + datetime. Note that the century may be incorrect.""" + year = int(number[0:2]) + month = int(number[2:4]) + day = int(number[4:6]) + try: + return datetime.date(year + 2000, month, day) + except ValueError: + raise InvalidComponent() + + +def calc_check_digit(number): + """Calculate the check digit. The number passed should not have the + check digit included.""" + number = (' ' + number)[-12:] + check = sum(_alphabet.index(n) * (13 - i) for i, n in enumerate(number)) + return _alphabet[(11 - check) % 11] + + +def validate(number, validate_check_digits=False): + """Checks to see if the number provided is a valid number.""" + number = compact(number) + if not _rfc_re.match(number): + raise InvalidFormat() + if len(number) in (10, 13): + # number assigned to person + if number[:4] in _name_blacklist: + raise InvalidComponent() + _get_date(number[4:10]) + elif len(number) == 12: + # number assigned to company + _get_date(number[3:9]) + else: + raise InvalidLength() + if validate_check_digits and len(number) >= 12: + if not _check_digits_re.match(number[-3:]): + raise InvalidComponent() + if number[-1] != calc_check_digit(number[:-1]): + raise InvalidChecksum() + return number + + +def is_valid(number, validate_check_digits=False): + """Checks to see if the number provided is a valid number.""" + try: + return bool(validate(number, validate_check_digits)) + except ValidationError: + return False + + +def format(number, separator=' '): + """Reformat the passed number to the standard format.""" + number = compact(number) + if len(number) == 12: + return separator.join(( + number[:3], number[3:9], number[9:])).strip(separator) + return separator.join(( + number[:4], number[4:10], number[10:])).strip(separator) diff --git a/tests/test_mx_rfc.doctest b/tests/test_mx_rfc.doctest new file mode 100644 index 00000000..57cb54b0 --- /dev/null +++ b/tests/test_mx_rfc.doctest @@ -0,0 +1,531 @@ +test_mx_rfc.doctest - more detailed doctests for the stdnum.mx.rfc module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.mx.rfc module. + +>>> from stdnum.mx import rfc +>>> from stdnum.exceptions import * + + +The six digits are supposed to form a valid date. + +>>> rfc.validate('ABCD 123456') +Traceback (most recent call last): + ... +InvalidComponent: ... + + +The last three digits are in a special alphabet and should only contain +1-9A-V, 1-9A-Z and 0-9A for the last digits. + +>>> rfc.validate('AABN 821103 8Ñ2') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +The first four digits of a personal number should not be one of the +blacklisted words. + +>>> rfc.validate('CACA 580710 NF7') +Traceback (most recent call last): + ... +InvalidComponent: ... + + +Only personal numbers are allowed to be missing the "homoclave" (check +digits) part. + +>>> rfc.validate('AKJ970902') +Traceback (most recent call last): + ... +InvalidLength: ... + + +A large number of numbers that are in use appear to have invalid check +digits. This has been found in about 1.5% of all numbers found. For this +reason, by default, validation of check digits has been disabled and can be +enabled explicitly. + +>>> rfc.validate('SIN 931116 9P8') +'SIN9311169P8' +>>> rfc.validate('SIN 931116 9P8', validate_check_digits=True) +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> rfc.validate('CCM 650122 I06') +'CCM650122I06' +>>> rfc.validate('CCM 650122 I06', validate_check_digits=True) +Traceback (most recent call last): + ... +InvalidComponent: ... + + +Some extra formatting checks: + +>>> rfc.format('VSM140430NQA') +'VSM 140430 NQA' +>>> rfc.format('ZUT A770215LK0') +'ZUTA 770215 LK0' + + +These have been found online and should all be valid numbers. Note that these +numbers all have valid check digits (also see the list below). + +>>> numbers = ''' +... +... &&&030828PX7 +... &JE040614N51 +... AA&0607148I0 +... AAA390128530 +... AAAA791128D63 +... AAAL730401TE0 +... AACA700913KZ0 +... AACC421231BH1 +... AADS251231CG0 +... AALC680929LH8 +... AAM090224BC2 +... AARR621113SN7 +... ABA130601BD3 +... ABH0507252D9 +... ACA120116TX5 +... ACO071219F51 +... AEAJ390701E82 +... AEL7407151YA +... AEM100930B11 +... AHO120203E8A +... ALD950921G27 +... ALE8401268K8 +... AMA990219PF8 +... AME040430UM8 +... AME110909530 +... AMM020222UT3 +... ANI0112176N8 +... AON0210014T5 +... AOX040831A59 +... AP&0305026J9 +... APA371201PQ7 +... AQU920317P4A +... ARO020221DQ4 +... ASE9112306M9 +... ATB081212MN5 +... AUD000704II1 +... AUHF891016KE4 +... AWI1206064H1 +... AYP110530D73 +... B&D9605298Y3 +... BADY7101185W6 +... BEE070927MH0 +... BER090921FJ6 +... BIHC5111253I7 +... BLN130425JU7 +... BMI880419PR5 +... BNE110914EY0 +... BSP0603203U3 +... BUGA701115I43 +... CAR910506BW8 +... CBC900829152 +... CCS8512024CA +... CDE110928FR0 +... CEG970917HY3 +... CEI111208UJ8 +... CET790711B43 +... CEX910718C75 +... CFE010608HC8 +... CGB000229SW0 +... CIG120628NQ1 +... CIN831107B41 +... CIT900525168 +... CLO070618EY6 +... CLO110607257 +... CLO850611371 +... CMA7708263Y7 +... CMA970306DZ8 +... CME990423373 +... CMI0507204U8 +... CMO101104D21 +... CNR100325T71 +... COI090127UY5 +... COML8103203QA +... COP891005HV6 +... CPR0611212K8 +... CSB021029689 +... CSI050527PE4 +... CSI900816E23 +... CSM130516IT5 +... CSU000912EH0 +... CTE870318ANA +... CTR0501281A7 +... CTS840406DB5 +... CTV080213S16 +... CUAF680927LM6 +... CVI961129D88 +... DAM121219GU4 +... DCA050617BJ7 +... DCF080331IP7 +... DCP1008179J4 +... DHO100211PP9 +... DIN130417NB8 +... DIP0405273R5 +... DIR070208V76 +... DIS9611059T1 +... DIV050625LE1 +... DMM120201G43 +... DMS121114BV6 +... DPU070904692 +... DVS120703FD1 +... ECM080228KF1 +... EDI000229CA3 +... EEM9110114W4 +... EGA060426LW6 +... EIA870112MW6 +... EIE080701SL6 +... EIM861215GH7 +... EIP971118EE0 +... EITM9103155L7 +... EMA001219M72 +... EME950412SS8 +... ENI731210FS2 +... ENP100804LU4 +... EPL031009LA3 +... EPM990712PX9 +... EPR920313DS8 +... ESI920217GY0 +... EUDC730505US6 +... EYA810212AB7 +... EYO121214DD5 +... FAM000229SB8 +... FCM0512093V7 +... FCR930924UP5 +... FDI060505DD8 +... FERL530506LL2 +... FLO9205187K8 +... FME780808PH2 +... FMP110620626 +... FPC960606SS7 +... FQU040210VB6 +... GABA930110DY7 +... GAD8509039E9 +... GAF091006GL7 +... GAGS8602119P9 +... GAI670926SX4 +... GBE910314CY9 +... GBM110523N11 +... GCT0205243T8 +... GEC091113R94 +... GEN060113JT9 +... GGS1306077E2 +... GIAI6703203N6 +... GIN130711BX1 +... GIN9806308G0 +... GLA1001272R3 +... GMA050607UA0 +... GMI920724CP5 +... GMO030628DI0 +... GMX0912018E6 +... GOAJ7101257MA +... GOBM630601RQ6 +... GOVB6202103B1 +... GTL101217DPA +... GUI990521N70 +... GURK651124IZ6 +... GYA010601HZ2 +... HAKC800506G89 +... HEA080829QE4 +... HEM881018M63 +... HIAD7004306I3 +... HIM950519AS3 +... HST051115KD6 +... HUM131108DJ7 +... IAG960627I24 +... ICR131219UR2 +... ICV111124GA3 +... ICW020809NG4 +... IEO861107K41 +... IET040122JP4 +... IET1402203U2 +... IJC090327V63 +... ILM130517SJ6 +... IME060217HN7 +... IPA090810Q33 +... ISD9609109M3 +... ITE040705LM7 +... ITM040310AX8 +... ITM7002044W3 +... ITM891121LZ9 +... ITO090804L92 +... IUS9207088R5 +... JET0811207A7 +... JINA4912084Z8 +... JJO021128CS9 +... JOFF550129TD7 +... KCO990630SQ4 +... KUC120227CP8 +... LBN120207CE8 +... LEAJ570610M32 +... LED070424K80 +... LIVR600908A58 +... LMX120112CH1 +... LRE050221F14 +... LTR101108SK5 +... LTS000117Q95 +... LUT0504217B1 +... MAC0501069H5 +... MAC050302QU4 +... MAE100225TF0 +... MALR850723RK4 +... MAOA800509SH5 +... MAPA600915DB4 +... MAR960628QU0 +... MAV890913NY0 +... MBU060512RE7 +... MCA851223JI9 +... MCP100710IH6 +... MCS830224156 +... MDM011001DD7 +... MECJ730513KC7 +... MELF7605095R6 +... MIR9812154E0 +... MIT110829255 +... MKE040510HW9 +... MLM020809894 +... MME120612IJ5 +... MME820427S6A +... MME9710313Z4 +... MOCC891114BA9 +... MOD9904275G7 +... MRG900406M6A +... MSI041208CR0 +... MSU121003LR3 +... MTR091125TJ8 +... MUÑ110218LJ6 +... MXS030318BP0 +... NAJ120705J5A +... NARF561006LT9 +... NFI000511G42 +... NIC120302LE4 +... NOCJ750806BJA +... OHA0204186H2 +... OIL080603P74 +... OIN970513LM7 +... OOM060208MC5 +... ORO040505KH3 +... ORS0011148U8 +... OVS041008711 +... PAP041025A11 +... PBC910219RI2 +... PCS091030DZA +... PDI630218N32 +... PEL910625UQ4 +... PGT110128I84 +... PII040123JR9 +... PIN8709103A4 +... PIT1207186S3 +... PLA020617B95 +... PME8308184S4 +... PMI0110161Q4 +... PPM970110676 +... PPT991115IR3 +... PRA071201A18 +... PRA850314FE5 +... PRO060904RR8 +... QVI850529SP8 +... RABT551122827 +... RAO821016K97 +... RCV060828NE3 +... RDI841003QJ4 +... REG070627EF9 +... REI120227C54 +... RIGL6608198W7 +... RME960329V67 +... ROZS700918HL9 +... RRE010202L83 +... RUAA751115C42 +... RUAJ8104018GA +... RZS9003238P5 +... SAGE661012E96 +... SALM760305JP4 +... SAVA810110EN5 +... SBR811009760 +... SCE000520HU0 +... SCI090109TZ2 +... SCO050124QL2 +... SDA8902091QA +... SEP051121DU8 +... SES0601271U0 +... SGY100210UL2 +... SIA0803073Z2 +... SIM080104CM6 +... SIN9904064B4 +... SME011012Q43 +... SME020208GXA +... SME060406U67 +... SME111212CA4 +... SOP0410217V5 +... SOP940502FF5 +... SOR9403107MA +... SOTG740115G1A +... SPL910701FD9 +... STP110106D88 +... TCS0104276P5 +... TEC0306066L6 +... TEE060928R87 +... TME930929DE1 +... TQI090928UR4 +... TSP931104UI0 +... UAI010212HW5 +... UEE110902V5A +... UFA1010116X3 +... VBF951020KT3 +... VCA0903116M7 +... VCO960628NZ0 +... VEFC6503094Q6 +... VEO100223D10 +... VMI820313C9A +... VMU930407NFA +... VSM040108TS6 +... VSO090204AF1 +... XCO111215IM0 +... YAT000229588 +... ZEJ060728K11 +... ZENP8101128Y0 +... ZGU920526T43 +... ZZE040708QJ9 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not rfc.is_valid(x, validate_check_digits=True)] +[] + + +The following numbers were also found online, and while they appear to be in +use and referencing existing persons or organisations, the check digit does +not validate. + +>>> numbers = ''' +... +... AAC0903183F6 +... AAMM450222AJ1 +... ALC920108P18 +... AMC020204AB7 +... AOM920820BEA +... ASA971202EB5 +... ASE0804046M8 +... AÑE9902224Z4 +... BABC300126Q66 +... BAÑ930616R66 +... BER060923LW4 +... BFI981221MG0 +... BLM890223FH1 +... BOJR890112DB9 +... BOR071120HE7 +... CAMG590407QSA +... CAMR620930HG5 +... CAVB360920196 +... CCB080911PV3 +... CCL020604CX0 +... CDO070410V77 +... CLA091217733 +... CLM9407017W4 +... CME030507A29 +... CME9809141L6 +... CME990816951 +... CMS071226LN2 +... COCA8007229UA +... CPC080624C48 +... CTA071106464 +... CUP820427ID9 +... DBE051005PT3 +... DEKR6305193Q2 +... DES8707223AA +... DJT031205MG4 +... DRA950811S25 +... EDG000413BF2 +... EME1006143T6 +... EQU810430193 +... FAE8509042W7 +... FIS0008226ZA +... FISL7809158A0 +... FME9305279N0 +... FSA080813655 +... FSI900505I74 +... GIR940318DF0 +... GJO891005N53 +... GMA080728MJ0 +... GME9606038V6 +... GOC841221BK0 +... GWS860313JA3 +... HHO900507844 +... HME020215QTA +... ICO990503PG4 +... IDE930601FJ4 +... IME0610197B2 +... ISM0403025G3 +... KAK030512QD7 +... KMN041126K5A +... KZY041011E20 +... LME9405237U7 +... LMI0811119C5 +... LOCB6410225K0 +... LOMM8110052J4 +... MAEE620525S14 +... MALC721019EV6 +... MDI931014D37 +... MFA840320DX0 +... MGR070820G78 +... MOJO6101239H7 +... MPT000824LH7 +... MSA850111TE1 +... NIÑ7409256U1 +... NSN000704SY3 +... NYL850506BJ8 +... OIC060523UW1 +... OMD100907CJ4 +... OPP010927SA5 +... OTM090818KS6 +... PAC8608084O8 +... PEJE480914ES9 +... PERL640914HY9 +... PPA100118E37 +... PTS091204M83 +... ROCS550714PC0 +... SIG060311PN2 +... SIT060329RA7 +... SME100414QY9 +... SME9502015F6 +... SMP060331P74 +... SMR011108KB9 +... SOMF730101689 +... SSB9512118M1 +... STM000215AG9 +... TFS011012M18 +... TLO020509RK3 +... TME940420LV5 +... TORE4007065V7 +... TPM06111759A +... TPT0202135S1 +... TPT890516JP5 +... VAME720111AA4 +... WME000218GK3 +... YLO031113IP4 +... YME9610251W6 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not rfc.is_valid(x)] +[] From 320ecea83701cf1a371e360542504414a6403249 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Thu, 8 Oct 2015 14:30:57 +0200 Subject: [PATCH 069/654] Add Swiss UID and VAT numbers The Swiss VAT number (MWST, TVA, IVA, TPV) is the UID (Unternehmens-Identifikationsnummer) followed by one of the VAT abbreviations. --- stdnum/ch/uid.py | 90 +++++++++++++++++++ stdnum/ch/vat.py | 79 ++++++++++++++++ tests/test_ch_uid.doctest | 183 ++++++++++++++++++++++++++++++++++++++ tests/test_ch_vat.doctest | 68 ++++++++++++++ 4 files changed, 420 insertions(+) create mode 100644 stdnum/ch/uid.py create mode 100644 stdnum/ch/vat.py create mode 100644 tests/test_ch_uid.doctest create mode 100644 tests/test_ch_vat.doctest diff --git a/stdnum/ch/uid.py b/stdnum/ch/uid.py new file mode 100644 index 00000000..6622f50b --- /dev/null +++ b/stdnum/ch/uid.py @@ -0,0 +1,90 @@ +# uid.py - functions for handling Swiss business identifiers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""UID (Unternehmens-Identifikationsnummer, Swiss business identifier). + +The Swiss UID is used to uniquely identify businesses for taxation purposes. +The number consists of a fixed "CHE" prefix, followed by 9 digits that are +protected with a simple checksum. + +This module only supports the "new" format that was introduced in 2011 which +completely replaced the "old" 6-digit format in 2014. + +More information is available at: + https://www.uid.admin.ch/ + https://de.wikipedia.org/wiki/Unternehmens-Identifikationsnummer + +>>> validate('CHE-100.155.212') +'CHE100155212' +>>> validate('CHE-100.155.213') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('CHE100155212') +'CHE-100.155.212' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips + surrounding whitespace and separators.""" + return clean(number, ' -.').strip().upper() + + +def calc_check_digit(number): + """Calculate the check digit for organisations. The number passed should + not have the check digit included.""" + weights = (5, 4, 3, 2, 7, 6, 5, 4) + s = sum(w * int(n) for w, n in zip(weights, number)) + return str((11 - s) % 11) + + +def validate(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + number = compact(number) + if len(number) != 12: + raise InvalidLength() + if not number.startswith('CHE'): + raise InvalidComponent() + if not number[3:].isdigit(): + raise InvalidFormat() + if number[-1] != calc_check_digit(number[3:-1]): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return number[:3] + '-' + '.'.join( + number[i:i + 3] for i in range(3, len(number), 3)) diff --git a/stdnum/ch/vat.py b/stdnum/ch/vat.py new file mode 100644 index 00000000..a61c49e2 --- /dev/null +++ b/stdnum/ch/vat.py @@ -0,0 +1,79 @@ +# vat.py - functions for handling Swiss VAT numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""VAT, MWST, TVA, IVA, TPV (Mehrwertsteuernummer, the Swiss VAT number). + +The Swiss VAT number is based on the UID but is followed by either "MWST" +(Mehrwertsteuer, the German abbreviation for VAT), "TVA" (Taxe sur la valeur +ajoutée in French), "IVA" (Imposta sul valore aggiunto in Italian) or "TPV" +(Taglia sin la plivalur in Romanian). + +This module only supports the "new" format that was introduced in 2011 which +completely replaced the "old" 6-digit format in 2014. + +More information is available at: + https://www.ch.ch/en/value-added-tax-number-und-business-identification-number/ + https://www.uid.admin.ch/ + +>>> validate('CHE-107.787.577 IVA') +'CHE107787577IVA' +>>> validate('CHE-107.787.578 IVA') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('CHE107787577IVA') +'CHE-107.787.577 IVA' +""" + +from stdnum.exceptions import * +from stdnum.ch import uid + + +def compact(number): + """Convert the number to the minimal representation. This strips + surrounding whitespace and separators.""" + return uid.compact(number) + + +def validate(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + number = compact(number) + if len(number) not in (15, 16): + raise InvalidLength() + uid.validate(number[:12]) + if number[12:] not in ('MWST', 'TVA', 'IVA', 'TPV'): + raise InvalidComponent() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return uid.format(number[:12]) + ' ' + number[12:] diff --git a/tests/test_ch_uid.doctest b/tests/test_ch_uid.doctest new file mode 100644 index 00000000..04cd2a9d --- /dev/null +++ b/tests/test_ch_uid.doctest @@ -0,0 +1,183 @@ +test_ch_uid.doctest - more detailed doctests for the stdnum.ch.uid module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ch.uid module. + +>>> from stdnum.ch import uid +>>> from stdnum.exceptions import * + + +Some more detailed tests. + +>>> uid.validate('ZZZ-107.787.577') +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> uid.validate('CHE-10A.787.577') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... CHE 113.042.942. +... CHE-101.415.551 +... CHE-105.067.880 +... CHE-105.616.108 +... CHE-105.838.471 +... CHE-106.222.918 +... CHE-108.902.220 +... CHE-112.786.448 +... CHE-113.606.230 +... CHE-113.606.253 +... CHE-113.614.519 +... CHE-113.617.417 +... CHE-113.638.690 +... CHE-113.690.319 +... CHE-113.706.877 +... CHE-113.840.903 +... CHE-114.165.895 +... CHE-114.332.288 +... CHE-114.365.477 +... CHE-114.557.166 +... CHE-114.587.210 +... CHE-114.764.713 +... CHE-114.921.562 +... CHE-115.117.491 +... CHE-115.188.717 +... CHE-115.257.146 +... CHE-115.401.147 +... CHE-115.681.283 +... CHE-115.702.784 +... CHE-115.901.131 +... CHE-116.018.087 +... CHE-116.022.172 +... CHE-116.024.389 +... CHE-116.066.413 +... CHE-116.066.436 +... CHE-116.066.459 +... CHE-116.066.465 +... CHE-116.066.471 +... CHE-116.066.488 +... CHE-116.068.168 +... CHE-116.068.180 +... CHE-116.068.257 +... CHE-116.068.369 +... CHE-116.068.375 +... CHE-116.068.398 +... CHE-116.068.435 +... CHE-116.068.470 +... CHE-116.068.524 +... CHE-116.068.582 +... CHE-131.608.474 +... CHE-132.071.565 +... CHE-133.192.355 +... CHE-145.202.776 +... CHE-146.680.598 +... CHE-154.748.703 +... CHE-154.936.162 +... CHE-157.957.462 +... CHE-164.589.300 +... CHE-165.355.615 +... CHE-170.094.053 +... CHE-172.763.936 +... CHE-187.271.257 +... CHE-188.858.471 +... CHE-190.214.202 +... CHE-193.052.812 +... CHE-199.027.184 +... CHE-199.213.611 +... CHE-200.143.304 +... CHE-200.474.557 +... CHE-201.091.609 +... CHE-208.913.684 +... CHE-211.403.691 +... CHE-221.032.573 +... CHE-221.432.665 +... CHE-222.251.936 +... CHE-222.259.895 +... CHE-226.253.064 +... CHE-226.598.037 +... CHE-247.670.953 +... CHE-254.168.819 +... CHE-255.108.719 +... CHE-255.286.924 +... CHE-261.860.174 +... CHE-263.297.189 +... CHE-264.708.255 +... CHE-265.476.805 +... CHE-268.880.226 +... CHE-276.015.555 +... CHE-276.258.224 +... CHE-279.426.498 +... CHE-288.910.965 +... CHE-304.459.014 +... CHE-313.282.453 +... CHE-316.510.171 +... CHE-317.089.412 +... CHE-319.639.393 +... CHE-320.640.339 +... CHE-322.193.357 +... CHE-325.352.422 +... CHE-327.285.558 +... CHE-335.670.007 +... CHE-360.001.499 +... CHE-363.192.993 +... CHE-367.908.992 +... CHE-378.338.277 +... CHE-379.051.878 +... CHE-383.713.530 +... CHE-392.445.860 +... CHE-397.984.845 +... CHE-400.352.783 +... CHE-402.703.876 +... CHE-403.244.345 +... CHE-404.107.716 +... CHE-405.509.388 +... CHE-415.481.515 +... CHE-420.485.329 +... CHE-422.892.792 +... CHE-424.195.422 +... CHE-430.271.592 +... CHE-433.064.977 +... CHE-443.047.638 +... CHE-444.796.174 +... CHE-444.901.873 +... CHE-445.737.990 +... CHE-446.609.550 +... CHE-447.518.447 +... CHE-447.564.660 +... CHE-449.312.098 +... CHE-450.220.178 +... CHE-460.147.005 +... CHE-467.023.568 +... CHE-468.593.911 +... CHE-475.427.548 +... CHE-478.406.525 +... CHE-488.502.886 +... CHE-488.972.766 +... CHE-489.713.641 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not uid.is_valid(x)] +[] diff --git a/tests/test_ch_vat.doctest b/tests/test_ch_vat.doctest new file mode 100644 index 00000000..c13f8df9 --- /dev/null +++ b/tests/test_ch_vat.doctest @@ -0,0 +1,68 @@ +test_ch_vat.doctest - more detailed doctests for the stdnum.ch.vat module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ch.vat module. + +>>> from stdnum.ch import vat +>>> from stdnum.exceptions import * + + +Some more detailed tests. + +>>> vat.validate('CHE-107.787.577 ZZZ') +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> vat.validate('ZZZ-107.787.577 MWST') +Traceback (most recent call last): + ... +InvalidComponent: ... + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... CHE-1 76.814.97 5 MWST +... CHE-100.155.212 MWST +... CHE-105.048.256 MWST +... CHE-105.838.471 MWST +... CHE-105.969.179 MWST +... CHE-106.222.918 MWST +... CHE-107.787.577 IVA +... CHE-108.113.335 MwST +... CHE-108.446.096 MWST +... CHE-108.703.181 MWST +... CHE-109.578.122 MWST +... CHE-110.576.236 IVA +... CHE-110.576.236 TVA +... CHE-112.142.015 TVA +... CHE-112.487.804 MWST +... CHE-113.330.424 MWST +... CHE-115.606.778 MWST +... CHE-116.046.681 TPV +... CHE-116.274.213 MWST +... CHE-116.320.362 MWST +... CHE-164.589.300 MWST +... CHE-400.352.783 MWST +... +... ''' +>>> [x for x in numbers.splitlines() if x and not vat.is_valid(x)] +[] From 522611c2ff966f063f9ee2c2087b984772a97b33 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 9 Oct 2015 21:48:00 +0200 Subject: [PATCH 070/654] Add CUSIP number --- stdnum/cusip.py | 80 +++++++++++++ tests/test_cusip.doctest | 249 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 329 insertions(+) create mode 100644 stdnum/cusip.py create mode 100644 tests/test_cusip.doctest diff --git a/stdnum/cusip.py b/stdnum/cusip.py new file mode 100644 index 00000000..4d54614c --- /dev/null +++ b/stdnum/cusip.py @@ -0,0 +1,80 @@ +# cusip.py - functions for handling CUSIP numbers +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CUSIP number (financial security identification number). + +CUSIP (Committee on Uniform Securities Identification Procedures) numbers are +used to identify financial securities. CUSIP numbers are a nine-character +alphanumeric code where the first six characters identify the issuer, +followed by two digits that identify and a check digit. + +More information: + https://en.wikipedia.org/wiki/CUSIP + https://www.cusip.com/ + +>>> validate('DUS0421C5') +'DUS0421C5' +>>> validate('DUS0421CN') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip().upper() + + +# O and I are not valid but are accounted for in the check digit calculation +_alphabet = '0123456789ABCDEFGH JKLMN PQRSTUVWXYZ*@#' + + +def calc_check_digit(number): + """Calculate the check digits for the number.""" + # convert to numeric first, then sum individual digits + number = ''.join( + str((i % 2 + 1) * _alphabet.index(n)) for i, n in enumerate(number)) + return str((10 - sum(int(n) for n in number)) % 10) + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not all(x in _alphabet for x in number): + raise InvalidFormat() + if len(number) != 9: + raise InvalidLength() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_cusip.doctest b/tests/test_cusip.doctest new file mode 100644 index 00000000..60e9c18e --- /dev/null +++ b/tests/test_cusip.doctest @@ -0,0 +1,249 @@ +test_cusip.doctest - more detailed doctests for the stdnum.cusip module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.cusip module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum import cusip +>>> from stdnum.exceptions import * + + +Number should not use O (captial o) or I (capital 1) to avoid confusion with +0 and 1: + +>>> cusip.validate('0O141T575') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cusip.validate('257I32103') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 00078H125 +... 00080Y348 +... 00141H409 +... 00141M572 +... 00141T577 +... 00141V267 +... 00142F832 +... 00142K500 +... 00170J862 +... 00170K109 +... 00170M873 +... 00758M261 +... 024524746 +... 024932808 +... 024934408 +... 025081704 +... 025081860 +... 02631C817 +... 068278704 +... 068278878 +... 06828M405 +... 101156602 +... 119804102 +... 12628J600 +... 140543828 +... 192476109 +... 19765J830 +... 19765N401 +... 19765Y852 +... 207267105 +... 23336W809 +... 23337G134 +... 23337R502 +... 23338F713 +... 245908660 +... 245917505 +... 24610B859 +... 25155T528 +... 25156A668 +... 25157M778 +... 25159K309 +... 25159L745 +... 25264S403 +... 254939424 +... 257132100 +... 258618701 +... 261967103 +... 261967822 +... 261986566 +... 265458513 +... 265458570 +... 269858817 +... 277902565 +... 277905436 +... 29372R208 +... 313923302 +... 314172743 +... 315792598 +... 315805325 +... 315807651 +... 315911875 +... 315920579 +... 316069103 +... 31607A208 +... 316146257 +... 316175850 +... 31638R204 +... 316390277 +... 316390335 +... 316390640 +... 316390681 +... 320600109 +... 320604606 +... 320917107 +... 353496854 +... 353535107 +... 354128704 +... 354723769 +... 36158T506 +... 409902624 +... 416649507 +... 416649606 +... 425888104 +... 42588P825 +... 42588P882 +... 44929K630 +... 461418691 +... 465898682 +... 469785109 +... 471023531 +... 47803M663 +... 4812A4427 +... 4812C0548 +... 52106N335 +... 52106N442 +... 52106N632 +... 52106N657 +... 543912604 +... 543913305 +... 552984601 +... 552986309 +... 552986853 +... 557492428 +... 56063J849 +... 56063U851 +... 56166Y438 +... 561709692 +... 561717661 +... 57056B ZW1 +... 575719109 +... 592905756 +... 61744J499 +... 640917209 +... 640917407 +... 64122M506 +... 643642200 +... 647108414 +... 648018828 +... 650914203 +... 66537Y165 +... 67065R408 +... 67065R812 +... 670678762 +... 670690767 +... 670700608 +... 670725738 +... 670729599 +... 670729730 +... 680029667 +... 68583W507 +... 704329101 +... 70472Q302 +... 70472Q880 +... 72200Q232 +... 72201F383 +... 72201F458 +... 72201M800 +... 72201T664 +... 72201U430 +... 741481105 +... 741486104 +... 74149P390 +... 74149P648 +... 74149P689 +... 74149P820 +... 742935521 +... 742935547 +... 74316P207 +... 743185373 +... 743185464 +... 74318Q864 +... 74683L508 +... 749255121 +... 74972H200 +... 74972H283 +... 74972H390 +... 74972H598 +... 74972K666 +... 76628T496 +... 77956H302 +... 783554470 +... 783554728 +... 784924458 +... 803431105 +... 803431410 +... 829334101 +... 82980D400 +... 884116872 +... 890085327 +... 890085871 +... 89354D874 +... 904504560 +... 904504586 +... 912810EQ7 +... 912828C24 +... 912828EG1 +... 912828HA1 +... 912828KD1 +... 912828UA6 +... 920461209 +... 92646A252 +... 92913K645 +... 92913K884 +... 92913L775 +... 92913R822 +... 92914A661 +... 93208V106 +... 936793306 +... 936793504 +... 94975P686 +... 94984B108 +... 94984B538 +... 949915177 +... 949915557 +... 957904584 +... 969251719 +... 969251834 +... 984281204 +... Y0488F100 +... Y27257149 +... Y44425117 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not cusip.is_valid(x)] +[] From 9f9d13cc1c1a25157494980cfc7c952411c1ea8c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Oct 2015 15:09:04 +0200 Subject: [PATCH 071/654] Add international securities id (ISIN) This adds support for handling ISINs (International Securities Identification Number). The can contain a CUSIP but performing this additional validation is currently not performed. --- stdnum/isin.py | 116 ++++++++++++++ tests/test_isin.doctest | 343 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 459 insertions(+) create mode 100644 stdnum/isin.py create mode 100644 tests/test_isin.doctest diff --git a/stdnum/isin.py b/stdnum/isin.py new file mode 100644 index 00000000..524640a4 --- /dev/null +++ b/stdnum/isin.py @@ -0,0 +1,116 @@ +# isin.py - functions for handling ISIN numbers +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""ISIN (International Securities Identification Number). + +The ISIN is a 12-character alpha-numerical code specified in ISO 6166 used to +identify exchange listed securities such as bonds, commercial paper, stocks +and warrants. The number is formed of a two-letter country code, a nine +character national security identifier and a single check digit. + +This module does not currently separately validate the embedded national +security identifier part (e.g. when it is a CUSIP). + +More information: + https://en.wikipedia.org/wiki/International_Securities_Identification_Number + +>>> validate('US0378331005') +'US0378331005' +>>> validate('US0378331003') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +# all valid ISO 3166-1 alpha-2 country codes +_iso_3116_1_country_codes = [ + 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', + 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', + 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', + 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', + 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', + 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', + 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', + 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', + 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', + 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', + 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', + 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', + 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', + 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', + 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', + 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', + 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', + 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', + 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', + 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', + 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'] + +# the special XS country code is for international securities +# substitute agencies can allocate an ISIN starting with XA (CUSIP Global +# Services), XB (NSD Russia), XC (WM Datenservice Germany) or XD (SIX +# Telekurs). +_country_codes = set(_iso_3116_1_country_codes + [ + 'XS', 'EU', 'XA', 'XB', 'XC', 'XD']) + +# the letters allowed in an ISIN +_alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip().upper() + + +def calc_check_digit(number): + """Calculate the check digits for the number.""" + # convert to numeric first, then double some, then sum individual digits + number = ''.join(str(_alphabet.index(n)) for n in number) + number = ''.join( + str(int(n) * (2 - i % 2)) for i, n in enumerate(reversed(number))) + return str((10 - sum(int(n) for n in number)) % 10) + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not all(x in _alphabet for x in number): + raise InvalidFormat() + if len(number) != 12: + raise InvalidLength() + if number[:2] not in _country_codes: + raise InvalidComponent() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_isin.doctest b/tests/test_isin.doctest new file mode 100644 index 00000000..84cb9fa1 --- /dev/null +++ b/tests/test_isin.doctest @@ -0,0 +1,343 @@ +test_isin.doctest - more detailed doctests for the stdnum.isin module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.isin module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum import isin +>>> from stdnum.exceptions import * + + +The number should start with a valid ISO 3166-1 alpha-2 country code: + +>>> isin.validate('ZZ0378331005') +Traceback (most recent call last): + ... +InvalidComponent: ... + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... AU000000AAI6 +... AU000000AAT3 +... AU000000CDD7 +... AU000000HYR2 +... AU000000IIN2 +... AU000000PMI9 +... AU000000QMN7 +... AU000000TAG0 +... AU000000TAN6 +... AU000000YRR1 +... AU00000GPHO9 +... AU00000HAVO0 +... AU00000IMFG2 +... AU00000LSRO2 +... AU00000MEUO4 +... AU00000MFFO2 +... AU00000NMGG0 +... AU00000TGGR6 +... AU00000TISN6 +... AU00000TYXN3 +... AU00000WXHG6 +... AU0000ARUAM8 +... AU0000AVIAL7 +... AU0000AYCAA7 +... AU0000BRKDC2 +... AU0000BWPAK0 +... AU0000CIMAK4 +... AU0000COOAQ5 +... AU0000CXMAK3 +... AU0000DM1AE9 +... AU0000DM1XX1 +... AU0000DNAAK7 +... AU0000ENRAK9 +... AU0000FXJAB1 +... AU0000INDAK0 +... AU0000JALAO0 +... AU0000JKLAN1 +... AU0000LCYAM9 +... AU0000MSCAK3 +... AU0000NANAI0 +... AU0000PGIAO0 +... AU0000RGSAO5 +... AU0000SHKAO8 +... AU0000SIRAW4 +... AU0000SWLAI7 +... AU0000TSMAQ4 +... AU0000UPGDA8 +... AU0000VICAK5 +... AU0000VMXDC4 +... AU0000WBCAB7 +... AU0000WBCPF6 +... AU0000WBCZZ3 +... AU0000YNBAE4 +... AU000AMPJOF0 +... AU000ANZSRX4 +... AU000ARGJOM4 +... AU000CBALOX0 +... AU000CBALOZ5 +... AU000DJXKOB1 +... AU000ETFBSK6 +... AU000ETPCOP1 +... AU000ETPNRG0 +... AU000FMGWOP0 +... AU000GEMJOG9 +... AU000HFRJOT6 +... AU000MMSKOA8 +... AU000ORIKOC0 +... AU000PRYKOU6 +... AU000QANSWH6 +... AU000SFRKOJ2 +... AU000SGPKOF2 +... AU000SHLSSA4 +... AU000SYDIOO7 +... AU000SYISRX9 +... AU000TLSSSN2 +... AU000WBCLOQ8 +... AU000WESSWC6 +... AU000WFDDSN2 +... AU000WORSSR3 +... AU000WPLIOZ6 +... AU000XINABL9 +... AU000XINAHO0 +... AU000XINAKD7 +... AU000XINANQ3 +... AU000XINAV76 +... AU300PUMC025 +... AU60WHT00394 +... BMG4209T1009 +... BMG9834K1505 +... CA4656761042 +... CH0004171952 +... CH0010543905 +... CH0011105639 +... CH0011443832 +... CH0019112892 +... CH0028465273 +... CH0031152017 +... CH0032973528 +... CH0032979764 +... CH0032979871 +... CH0033337277 +... CH0037485627 +... CH0037485734 +... CH0042345089 +... CH0049815712 +... CH0100461042 +... CH0237135386 +... CH0276194575 +... CH0276213797 +... CH0278112146 +... CH0284369565 +... CH0288210914 +... CH0292642904 +... CH0293194293 +... CNE100000114 +... CNE100001M79 +... CWN8141V6954 +... CWN8144F3826 +... DE0005994388 +... DE0005997316 +... DE0007200412 +... DE0007681454 +... DE0007681975 +... DE0007932220 +... DE000A0DMV42 +... DE000A0DMV83 +... DE000A0G9FM3 +... DE000A0Z2946 +... DE000A0Z29G3 +... DE000A0Z3WV9 +... DE000A0Z3Z46 +... DE000A1EW8B3 +... DK0002006113 +... DK0002021690 +... DK0004903424 +... DK0004903770 +... DK0004909033 +... DK0005602439 +... DK0006321633 +... DK0006707070 +... DK0006900741 +... DK0007300339 +... DK0007702054 +... DK0007703458 +... DK0008100290 +... DK0008703150 +... DK0009255002 +... DK0009281511 +... DK0009351900 +... DK0009360141 +... DK0009362519 +... DK0009363087 +... DK0009705063 +... DK0009770471 +... DK0009771529 +... DK0030074216 +... DK0030269220 +... FR0010655753 +... GB0002405495 +... GB0003375820 +... GB0005058408 +... GB0031192486 +... GB0032211095 +... GB00B0599712 +... GB00B0599P95 +... GB00B05CVL88 +... GB00B05DCP29 +... GB00B05DGB62 +... GB00B05DNW68 +... GB00B05DSX21 +... GB00B05F5F96 +... GB00B05F5Q02 +... GB00B05FQ671 +... GB00B05FVH32 +... GB00B05G0029 +... GB00B05G4005 +... GB00B05G5K71 +... GB00B05G9160 +... GB00B0SD8170 +... GB00B0SDJ810 +... GB00B0SDL857 +... GB00B0VMNC71 +... GB00B11DNW78 +... GB00B1893G22 +... GB00B1CQNL45 +... GB00B1CQTJ43 +... GB00B1CQVM10 +... GB00B1KW2C82 +... GB00B2NL0X68 +... GB00B2PVJ269 +... GB00B2PVKX41 +... GB00B2PY1T61 +... GB00B2PY4209 +... GB00B2RBNV18 +... GB00B3BR9475 +... GB00B3CFYP64 +... GB00B3CFZV99 +... GB00B3CG0P10 +... GB00B3CG1L47 +... GB00B3LBXL47 +... GB00B3LFND86 +... GB00B3NVXT01 +... GB00B3Q2HT84 +... GB00B4V4XS73 +... GB00B4ZQ7X29 +... GB00B51RP987 +... GB00B5VJC047 +... GB00B6RRK619 +... GB00B6VQMK23 +... GB00B6VW1G93 +... GB00B6ZXH376 +... GB00B7LDLC53 +... GB00B7MT2J68 +... GB00B80KHR13 +... GB00B8113P38 +... GB00B8B4R053 +... GB00B8J3Q414 +... GB00BJ36MF67 +... GB00BK1PTB77 +... GB00BRKXHJ51 +... GB00BV0MBK93 +... GB00BVVT7780 +... GB00BYZ3J264 +... HK0000096617 +... HK0000179686 +... HK0000227162 +... HK0000230331 +... HK0000244647 +... HK0000245925 +... HK0000246709 +... HK0000248267 +... HK0000248515 +... HK0000249794 +... HK0000250578 +... HK0000253002 +... HK0000258720 +... HK0000262441 +... HK0000263449 +... HK0000265345 +... HK0000267077 +... IE0004906560 +... IE00B4WPHX27 +... IE00BLSNMW37 +... IE00BRHZ0398 +... INE019A07282 +... INE115A07ED1 +... INE115A07GL9 +... INE321N07046 +... INE476M07081 +... INE476M07123 +... INE523E07BF9 +... INE523E07BT0 +... INE549F08434 +... INE651J07036 +... INE691I07AO9 +... INE823G07193 +... INE827N07109 +... INF209K01MJ3 +... JE00B1RJLF86 +... JE00B24DML30 +... JE00B2NFV571 +... KYG198891072 +... KYG4643G1029 +... KYG4708D1016 +... KYG607441022 +... KYG811511131 +... KYG886121097 +... LU0455009182 +... LU0460389678 +... LU0683010093 +... LU0688203917 +... LU0859479155 +... LU1048317298 +... NL0010524690 +... NL0010865176 +... NL0010882288 +... NL0010948949 +... NL0011221981 +... NL0011278445 +... NL0011327101 +... NL0011337290 +... US101137AA59 +... US12591DAC56 +... US17322R1059 +... US26067A1108 +... US26070W1099 +... US36962GXS82 +... US78387GAK94 +... US867363AF06 +... XC0006883695 +... XS0110106365 +... XS0137672381 +... XS0162732951 +... XS0324245116 +... XS0409318309 +... XS0458685913 +... XS0691593114 +... XS0758793342 +... XS0841191991 +... XS0861774635 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not isin.is_valid(x)] +[] From 111b4fd7c91b5d3c7bce921a1436bc7d21d7cdfa Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Oct 2015 15:25:48 +0200 Subject: [PATCH 072/654] Fix handling of strip_check_digits in ISAN This fixes the compact() function to honor the strip_check_digits argument and does not validate the check digits if they are passed to validate together with strip_check_digits. --- stdnum/isan.py | 10 ++++++---- tests/test_isan.doctest | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/stdnum/isan.py b/stdnum/isan.py index 24438f59..8edb091a 100644 --- a/stdnum/isan.py +++ b/stdnum/isan.py @@ -70,7 +70,8 @@ def compact(number, strip_check_digits=True): of any valid separators and removes surrounding whitespace. The check digits are removed by default.""" number = list(split(number)) - number[2] = number[4] = '' + if strip_check_digits: + number[2] = number[4] = '' return ''.join(number) @@ -89,14 +90,15 @@ def validate(number, strip_check_digits=False, add_check_digits=False): if len(root) != 12 or len(episode) != 4 or len(check1) not in (0, 1) or \ len(version) not in (0, 8) or len(check1) not in (0, 1): raise InvalidLength() + # allow removing check digits + if strip_check_digits: + check1 = check2 = '' # check check digits if check1: mod_37_36.validate(root + episode + check1) if check2: mod_37_36.validate(root + episode + version + check2) - # remove or add check digits - if strip_check_digits: - check1 = check2 = '' + # add check digits if add_check_digits and not check1: check1 = mod_37_36.calc_check_digit(root + episode) if add_check_digits and not check2 and version: diff --git a/tests/test_isan.doctest b/tests/test_isan.doctest index 7984e48a..32f0f1d0 100644 --- a/tests/test_isan.doctest +++ b/tests/test_isan.doctest @@ -45,10 +45,14 @@ Compacting should also work: '000000018947000000000000' >>> isan.compact('0000-0000-D07A-0090-Q-0000-0000-X') '00000000D07A009000000000' +>>> isan.compact('0000-0000-D07A-0090-Q-0000-0000-X', strip_check_digits=False) +'00000000D07A0090Q00000000X' >>> isan.compact('000000018947000000000000') '000000018947000000000000' >>> isan.compact('1881-66C7-3420-6541-Y') '188166C734206541' +>>> isan.compact('1881-66C7-3420-6541-Y', strip_check_digits=False) +'188166C734206541Y' >>> isan.compact('1881-66C7-3420-6541') '188166C734206541' @@ -89,12 +93,20 @@ or absence of a version number. '0000-0000-D07A-0090-Q' >>> isan.format('1881-66C734206541-9F3A-0245') '1881-66C7-3420-6541-Y-9F3A-0245-O' +>>> isan.format('1881-66C7-3420-6541-?-9F3A-0245-?', strip_check_digits=True, add_check_digits=False) +'1881-66C7-3420-6541-9F3A-0245' >>> isan.format('1881-66C7-3420-6541-?-9F3A-0245-?', strip_check_digits=True, add_check_digits=True) '1881-66C7-3420-6541-Y-9F3A-0245-O' + + +The validate() function also allows stripping and (re)adding check digits. + >>> isan.validate('1881-66C7-3420-6541-Y-9F3A-0245-O', strip_check_digits=True) '188166C7342065419F3A0245' >>> isan.validate('188166C7342065419F3A0245', add_check_digits=True) '188166C734206541Y9F3A0245O' +>>> isan.validate('1881-66C7-3420-6541-X-9F3A-0245-A', strip_check_digits=True, add_check_digits=True) +'188166C734206541Y9F3A0245O' A simple test for the to_binary() function. From fa8099ebbf06fc45e62d8b1ed6a12b5a2405476c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Oct 2015 16:54:45 +0200 Subject: [PATCH 073/654] Add int. maritime org. number (IMO) This adds checks for the International Maritime Organization number used to identify ships. However, there seem to be a lot of ships with an IMO number that does not follow these rules (different check digits or even length). --- stdnum/imo.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 stdnum/imo.py diff --git a/stdnum/imo.py b/stdnum/imo.py new file mode 100644 index 00000000..a423bf3a --- /dev/null +++ b/stdnum/imo.py @@ -0,0 +1,85 @@ +# imo.py - functions for handling IMO numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""IMO number (International Maritime Organization number). + +A number used to uniquely identify ships (the hull) for purposes of +registering owners and management companies. The ship identification number +consists of a six-digit sequentially assigned number and a check digit. The +number is usually prefixed with "IMO". + +Note that there seem to be a large number of ships with an IMO that does not +have a valid check digit or even have a different length. + +>>> validate('IMO 9319466') +'9319466' +>>> validate('IMO 8814275') +'8814275' +>>> validate('8814274') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('8814275') +'IMO 8814275' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + number = clean(number, ' ').upper().strip() + if number.startswith('IMO'): + number = number[3:] + return number + + +def calc_check_digit(number): + """Calculate the check digits for the number.""" + return str(sum(int(n) * (7 - i) for i, n in enumerate(number[:6])) % 10) + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 7: + raise InvalidLength() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + return 'IMO ' + compact(number) From ebb5c07b36b1595b3a5dee22c5c82e15b027dbf3 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Oct 2015 17:03:17 +0200 Subject: [PATCH 074/654] Move numdb test file This places the test database file in the tests directory. --- MANIFEST.in | 2 +- stdnum/numdb.py | 2 +- numdb-test.dat => tests/numdb-test.dat | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename numdb-test.dat => tests/numdb-test.dat (100%) diff --git a/MANIFEST.in b/MANIFEST.in index e544383b..320edf11 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ -include README NEWS ChangeLog COPYING numdb-test.dat *.py +include README NEWS ChangeLog COPYING *.py recursive-include tests *.doctest recursive-include docs *.rst *.py diff --git a/stdnum/numdb.py b/stdnum/numdb.py index a21e7e77..8a635fdf 100644 --- a/stdnum/numdb.py +++ b/stdnum/numdb.py @@ -25,7 +25,7 @@ To read a database from a file: ->>> dbfile = read(open('numdb-test.dat', 'r')) +>>> dbfile = read(open('tests/numdb-test.dat', 'r')) To split a number: diff --git a/numdb-test.dat b/tests/numdb-test.dat similarity index 100% rename from numdb-test.dat rename to tests/numdb-test.dat From fb91775be1cb5f047ced3173e894e2c81d7fd311 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Oct 2015 17:06:19 +0200 Subject: [PATCH 075/654] Add information to Russian package --- stdnum/ru/__init__.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/stdnum/ru/__init__.py b/stdnum/ru/__init__.py index e69de29b..fb586566 100644 --- a/stdnum/ru/__init__.py +++ b/stdnum/ru/__init__.py @@ -0,0 +1,21 @@ +# __init__.py - collection of Russian numbers +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Russian numbers.""" From 961815fa5868e8e3772f36370cf01d313721f39a Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Oct 2015 22:20:39 +0200 Subject: [PATCH 076/654] Add SEDOL number --- stdnum/gb/sedol.py | 78 +++++++++++ tests/test_gb_sedol.doctest | 255 ++++++++++++++++++++++++++++++++++++ 2 files changed, 333 insertions(+) create mode 100644 stdnum/gb/sedol.py create mode 100644 tests/test_gb_sedol.doctest diff --git a/stdnum/gb/sedol.py b/stdnum/gb/sedol.py new file mode 100644 index 00000000..d53712ee --- /dev/null +++ b/stdnum/gb/sedol.py @@ -0,0 +1,78 @@ +# sedol.py - functions for handling SEDOL numbers +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""SEDOL number (Stock Exchange Daily Official List number). + +The SEDOL number is a security identifier used in the United Kingdom and +Ireland assigned by the London Stock Exchange. A SEDOL is seven characters +in length consisting of six alphanumeric digits, followed by a check digit. + +>>> validate('B15KXQ8') +'B15KXQ8' +>>> validate('B15KXQ7') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +# the letters allowed in an SEDOL (vowels are never used) +_alphabet = '0123456789 BCD FGH JKLMN PQRST VWXYZ' + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip().upper() + + +def calc_check_digit(number): + """Calculate the check digits for the number.""" + weights = (1, 3, 1, 7, 3, 9) + s = sum(w * _alphabet.index(n) for w, n in zip(weights, number)) + return str((10 - s) % 10) + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not all(x in _alphabet for x in number): + raise InvalidFormat() + if len(number) != 7: + raise InvalidLength() + if number[0].isdigit() and not number.isdigit(): + # new style SEDOLs are supposed to start with a letter, old-style + # numbers should be fully numeric + raise InvalidFormat() + if calc_check_digit(number[:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_gb_sedol.doctest b/tests/test_gb_sedol.doctest new file mode 100644 index 00000000..407d2951 --- /dev/null +++ b/tests/test_gb_sedol.doctest @@ -0,0 +1,255 @@ +test_sedol.doctest - more detailed doctests for the stdnum.gb.sedol module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.gb.sedol module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.gb import sedol +>>> from stdnum.exceptions import * + + +Old-style number are fully numeric, new-style numbers start with a letter. + +>>> sedol.validate('0017505') +'0017505' +>>> sedol.validate('B07MXC1') +'B07MXC1' +>>> sedol.validate('107MXC1') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +No vowels are allowed: + +>>> sedol.validate('BO7MXC9') +Traceback (most recent call last): + ... +InvalidFormat: ... + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 0016308 +... 0059585 +... 0286941 +... 0371847 +... 0885865 +... 0937636 +... 2181334 +... 2342034 +... 2458113 +... 3111084 +... 3143838 +... 3395349 +... 4178419 +... 4913223 +... 5533976 +... 7142091 +... B012BV2 +... B059874 +... B05CW04 +... B05D467 +... B05D6X8 +... B05D724 +... B05D746 +... B05D7C4 +... B05D7G8 +... B05D9N9 +... B05DCY1 +... B05DKZ8 +... B05DS21 +... B05DSL0 +... B05F6M3 +... B05F7R5 +... B05F7Z3 +... B05FC47 +... B05FFN7 +... B05FFX7 +... B05FHZ3 +... B05FJ02 +... B05FKV0 +... B05FKX2 +... B05FPZ9 +... B05FRQ4 +... B05FXV1 +... B05FZQ0 +... B05FZS2 +... B05G198 +... B05G637 +... B05G7J0 +... B068074 +... B0M6373 +... B0R46X9 +... B0SDR09 +... B0VMH70 +... B0VMJM9 +... B0VMPT8 +... B0XWNB4 +... B0YVBC7 +... B10LNL1 +... B11S1X9 +... B1893V7 +... B18S7B2 +... B1CD9S4 +... B1CDK14 +... B1CQNK3 +... B1CQRH8 +... B1CQRN4 +... B1CQV98 +... B1CQWZ1 +... B1CQY00 +... B1CR0L6 +... B1CR0S3 +... B1KTQX8 +... B1KYVC7 +... B1KYVZ0 +... B1RMWL0 +... B1VCNQ8 +... B1XG8T6 +... B243G00 +... B29LZ80 +... B2N6X76 +... B2PRS50 +... B2PRWF8 +... B2PRWJ2 +... B2PS0H9 +... B2PV5Y0 +... B2PVGZ8 +... B2PVHM2 +... B2PVMB6 +... B2PVP84 +... B2PVRV1 +... B2PY1R4 +... B2PY390 +... B2PY3H8 +... B2PY572 +... B2PY5J4 +... B2Q1N90 +... B2QXZK1 +... B2RKQW0 +... B39DW15 +... B3CFXY8 +... B3CFYB2 +... B3CG1T2 +... B3F8162 +... B3KF8V2 +... B3LFLQ7 +... B3LT1Q9 +... B3LXSJ3 +... B3M3MB2 +... B3M5D48 +... B3M7ZH1 +... B3MPTK6 +... B3MVRM2 +... B3NSQZ8 +... B3NVM93 +... B3P2YG5 +... B3P9Y44 +... B3PHCS8 +... B3PL150 +... B3PQ1W2 +... B3Q3L88 +... B3SC0P3 +... B3VM3R3 +... B3VVG60 +... B3XK5J1 +... B42TM62 +... B45BZT9 +... B4JT339 +... B4MJF52 +... B4PRH35 +... B50HQ74 +... B52LK94 +... B545JR5 +... B5497R3 +... B54V1Z5 +... B599TV6 +... B59TPT6 +... B5BKK36 +... B5BKMR4 +... B5P8YX4 +... B5T42N4 +... B5V3ZY1 +... B5VR9Q3 +... B61BDZ9 +... B626RZ1 +... B6496D9 +... B64JSM2 +... B652H90 +... B657SR0 +... B66G553 +... B6734R8 +... B676F30 +... B67NKZ8 +... B6QDDF0 +... B76V7N7 +... B78DL95 +... B7K2811 +... B7RRJJ4 +... B7RRKB3 +... B7WNMF4 +... B7XCP73 +... B80QGD8 +... B83MH18 +... B8C0D37 +... B8KQFS6 +... B8N44W4 +... B8N45L0 +... B8N46J5 +... B8V9FZ1 +... B9BRCL7 +... B9DQ900 +... BB97138 +... BBGBF31 +... BC7GZX2 +... BCRY644 +... BCW3NW3 +... BCZSZF2 +... BGJZZG8 +... BK1PTB7 +... BKXH0G3 +... BRWQVY5 +... BSBNC63 +... BTF8JJ3 +... BTL1K93 +... BVC3VM2 +... BVXCDJ9 +... BVXLP67 +... BW38RQ9 +... BWWD0R7 +... BWXBQ27 +... BWXTNQ4 +... BX7RKZ9 +... BX7RPQ5 +... BYN8P69 +... BYT3LB5 +... BYTLC94 +... BYW6P64 +... BYXJKZ6 +... BYXX1Y4 +... BZ0S6X3 +... BZ21T08 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not sedol.is_valid(x)] +[] From c565517701cc44e1bbe68e126ab8048340ddbd09 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 11 Oct 2015 11:23:02 +0200 Subject: [PATCH 077/654] Add German Wertpapierkennnummer The format itself is pretty simple (no check digit) but this module is more for completeness sake. --- stdnum/de/wkn.py | 66 +++++++++++ tests/test_de_wkn.doctest | 233 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 299 insertions(+) create mode 100644 stdnum/de/wkn.py create mode 100644 tests/test_de_wkn.doctest diff --git a/stdnum/de/wkn.py b/stdnum/de/wkn.py new file mode 100644 index 00000000..9aa908b6 --- /dev/null +++ b/stdnum/de/wkn.py @@ -0,0 +1,66 @@ +# wkn.py - functions for handling Wertpapierkennnummer +# coding: utf-8 +# +# Copyright (C) 2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Wertpapierkennnummer (German securities identification code). + +The WKN, WPKN, WPK (Wertpapierkennnummer) is a German code to identify +securities. It is a 6-digit alphanumeric number without a check digit that no +longer has any structure. It is expected to be replaced by the ISIN. + +>>> validate('A0MNRK') +'A0MNRK' +>>> validate('AOMNRK') # no capital o allowed +Traceback (most recent call last): + ... +InvalidFormat: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip().upper() + + +# O and I are not valid but are accounted for in the check digit calculation +_alphabet = '0123456789ABCDEFGH JKLMN PQRSTUVWXYZ' + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not all(x in _alphabet for x in number): + raise InvalidFormat() + if len(number) != 6: + raise InvalidLength() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_de_wkn.doctest b/tests/test_de_wkn.doctest new file mode 100644 index 00000000..db47c49b --- /dev/null +++ b/tests/test_de_wkn.doctest @@ -0,0 +1,233 @@ +test_de_wkn.doctest - more detailed doctests for the stdnum.de.wkn module + +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.de.wkn module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.de import wkn +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 934056 +... A0Q2A9 +... 978273 +... 989756 +... A0D85Q +... A0MUD3 +... A0F67A +... 622925 +... A0ESSP +... A0M82M +... 200435 +... 895705 +... A0MMMK +... 989226 +... 977858 +... A0DNG5 +... A0LGM2 +... 701932 +... A0H0UT +... 989127 +... A0JM7H +... 516810 +... 977023 +... 971043 +... 865742 +... A0MYFQ +... A1EWXW +... 591961 +... 980276 +... A0RNQ5 +... A0BMA4 +... 531713 +... A0F6EB +... A0MUHB +... 975694 +... A1J0ZD +... A0M11P +... A0MNX5 +... A0F5T6 +... A0MR7J +... 974839 +... 972001 +... A0M16T +... 592895 +... 977974 +... A0HGWD +... A0LHCL +... 691298 +... DBX0HY +... 986732 +... 974956 +... 973275 +... ETFL29 +... 857534 +... A0MVL0 +... A0CBA2 +... A0NGX0 +... A0M92M +... A0MSAG +... A0NFHK +... A0Q35X +... 513010 +... 921418 +... 531435 +... A0BL1D +... A0MKA9 +... 976169 +... 779374 +... 847519 +... A0HG5F +... 986868 +... 847347 +... 971929 +... A0DJ6U +... 847910 +... A0JMLN +... 701276 +... 580515 +... 986881 +... A0M2BY +... A0M93X +... 989427 +... A0LE9R +... 848390 +... 980457 +... DWS0UR +... 977187 +... 850667 +... 930920 +... 987906 +... A0MY8N +... 970047 +... A0M1NX +... 933368 +... DBX0F1 +... 848186 +... A0J3GM +... DBX0HC +... A0Q09X +... 988890 +... 589684 +... A0KE7P +... A0EAD3 +... DBX1F1 +... A1JJTG +... A0EQ91 +... A0KD2Q +... 971117 +... 973210 +... A0F6WG +... A0MLJK +... A0M46B +... A0HNPN +... 848066 +... A0LGQN +... DBX0G7 +... LYX0AB +... A0LGWU +... A0RDGC +... 848639 +... 589006 +... A0LEEE +... 552538 +... 977025 +... 531416 +... A0DJ49 +... A0REJL +... A0YE2R +... 251119 +... 693287 +... A0MJP7 +... 577345 +... 973228 +... 866953 +... A0MWAL +... 113596 +... 847426 +... 722538 +... DK0EBQ +... 603005 +... A1H6H7 +... 593396 +... 987972 +... 541779 +... 750437 +... 588798 +... A0Q60E +... A0NC6Z +... A0LGCU +... 532018 +... 257575 +... 629236 +... A1J0BH +... 515231 +... 851143 +... LYX0MG +... 801536 +... 888323 +... 976956 +... 853836 +... 723890 +... A0BL78 +... 971915 +... A0YCYF +... A0J3WX +... 847661 +... A0X970 +... 976375 +... A0J3W3 +... 989844 +... A0B5LC +... 620440 +... LYX0CB +... 795322 +... 848534 +... 677496 +... 727516 +... 973806 +... 971872 +... 859123 +... 970578 +... 675179 +... 976999 +... A0HF4G +... 871970 +... 978945 +... 691660 +... A0DPBF +... 930424 +... 978047 +... 847665 +... 971534 +... A0BMAJ +... A0NC87 +... A1JJP8 +... A0M2EB +... A0EQYQ +... 263233 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not wkn.is_valid(x)] +[] From 3c7a302c5ad9364b69a2ac8df0e605177aa3525c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 11 Oct 2015 11:23:19 +0200 Subject: [PATCH 078/654] Convert security ids to ISIN Allow conversion from national securities identifiers to the international ISIN. --- stdnum/cusip.py | 8 ++++++++ stdnum/de/wkn.py | 8 ++++++++ stdnum/gb/sedol.py | 8 ++++++++ stdnum/isin.py | 9 +++++++++ 4 files changed, 33 insertions(+) diff --git a/stdnum/cusip.py b/stdnum/cusip.py index 4d54614c..acd27d1a 100644 --- a/stdnum/cusip.py +++ b/stdnum/cusip.py @@ -34,6 +34,8 @@ Traceback (most recent call last): ... InvalidChecksum: ... +>>> to_isin('91324PAE2') +'US91324PAE25' """ from stdnum.exceptions import * @@ -78,3 +80,9 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def to_isin(number): + """Convert the number to an ISIN.""" + from stdnum import isin + return isin.from_natid('US', number) diff --git a/stdnum/de/wkn.py b/stdnum/de/wkn.py index 9aa908b6..8cde237f 100644 --- a/stdnum/de/wkn.py +++ b/stdnum/de/wkn.py @@ -30,6 +30,8 @@ Traceback (most recent call last): ... InvalidFormat: ... +>>> to_isin('SKWM02') +'DE000SKWM021' """ from stdnum.exceptions import * @@ -64,3 +66,9 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def to_isin(number): + """Convert the number to an ISIN.""" + from stdnum import isin + return isin.from_natid('DE', number) diff --git a/stdnum/gb/sedol.py b/stdnum/gb/sedol.py index d53712ee..ad768ca4 100644 --- a/stdnum/gb/sedol.py +++ b/stdnum/gb/sedol.py @@ -29,6 +29,8 @@ Traceback (most recent call last): ... InvalidChecksum: ... +>>> to_isin('B15KXQ8') +'GB00B15KXQ89' """ from stdnum.exceptions import * @@ -76,3 +78,9 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def to_isin(number): + """Convert the number to an ISIN.""" + from stdnum import isin + return isin.from_natid('GB', number) diff --git a/stdnum/isin.py b/stdnum/isin.py index 524640a4..c6e93d53 100644 --- a/stdnum/isin.py +++ b/stdnum/isin.py @@ -36,6 +36,8 @@ Traceback (most recent call last): ... InvalidChecksum: ... +>>> from_natid('gb', 'BYXJL75') +'GB00BYXJL758' """ from stdnum.exceptions import * @@ -114,3 +116,10 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def from_natid(country_code, number): + """Generate an ISIN from a national security identifier.""" + number = compact(number) + number = country_code.upper() + (9 - len(number)) * '0' + number + return number + calc_check_digit(number) From a891c6060db7df4fdb4f982e3c201f2b008a03dd Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 11 Oct 2015 11:59:14 +0200 Subject: [PATCH 079/654] Code style improvements Ensure that regular expressions are r'' strings, avoid too long lines and fix line wrapping. Also avoid catching toplevel Exception when possible and use binascii for hex to binary conversion which is available in both Python 2 and 3. --- stdnum/al/nipt.py | 2 +- stdnum/co/nit.py | 6 +++--- stdnum/iban.py | 2 +- stdnum/ie/pps.py | 2 +- stdnum/imei.py | 2 +- stdnum/isan.py | 8 ++------ stdnum/iso6346.py | 2 +- stdnum/it/codicefiscale.py | 6 +++--- stdnum/meid.py | 8 ++------ stdnum/nl/postcode.py | 2 +- stdnum/numdb.py | 11 ++++++++--- stdnum/pt/nif.py | 3 ++- stdnum/us/atin.py | 2 +- stdnum/us/ein.py | 2 +- stdnum/us/itin.py | 2 +- stdnum/us/ptin.py | 2 +- stdnum/us/ssn.py | 3 ++- stdnum/util.py | 30 ++++++++++++++++++------------ 18 files changed, 50 insertions(+), 45 deletions(-) diff --git a/stdnum/al/nipt.py b/stdnum/al/nipt.py index 1bb00021..6c7214a5 100644 --- a/stdnum/al/nipt.py +++ b/stdnum/al/nipt.py @@ -46,7 +46,7 @@ # regular expression for matching number -_nipt_re = re.compile('^[JKL][0-9]{8}[A-Z]$') +_nipt_re = re.compile(r'^[JKL][0-9]{8}[A-Z]$') def compact(number): diff --git a/stdnum/co/nit.py b/stdnum/co/nit.py index dbc4f1ca..6cb2fc9a 100644 --- a/stdnum/co/nit.py +++ b/stdnum/co/nit.py @@ -78,6 +78,6 @@ def is_valid(number): def format(number): """Reformat the passed number to the standard format.""" number = compact(number) - return ('.'.join( - number[i - 3:i] for i in reversed(range(-1, -len(number), -3))) + - '-' + number[-1]) + return '.'.join( + number[i - 3:i] for i in reversed(range(-1, -len(number), -3)) + ) + '-' + number[-1] diff --git a/stdnum/iban.py b/stdnum/iban.py index 84c2b687..ee717862 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -52,7 +52,7 @@ _alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' # regular expression to check IBAN structure -_struct_re = re.compile('([1-9][0-9]*)!([nac])') +_struct_re = re.compile(r'([1-9][0-9]*)!([nac])') def compact(number): diff --git a/stdnum/ie/pps.py b/stdnum/ie/pps.py index baa27e89..6957381b 100644 --- a/stdnum/ie/pps.py +++ b/stdnum/ie/pps.py @@ -55,7 +55,7 @@ from stdnum.util import clean -pps_re = re.compile('^\d{7}[A-W][AHWTX]?$') +pps_re = re.compile(r'^\d{7}[A-W][AHWTX]?$') """Regular expression used to check syntax of PPS numbers.""" diff --git a/stdnum/imei.py b/stdnum/imei.py index f4b9e909..35f76e1e 100644 --- a/stdnum/imei.py +++ b/stdnum/imei.py @@ -72,7 +72,7 @@ def imei_type(number): invalid) for checking the type of number passed.""" try: number = validate(number) - except Exception: + except ValidationError: return None if len(number) in (14, 15): return 'IMEI' diff --git a/stdnum/isan.py b/stdnum/isan.py index 8edb091a..c0f47bd6 100644 --- a/stdnum/isan.py +++ b/stdnum/isan.py @@ -140,12 +140,8 @@ def format(number, separator='-', strip_check_digits=False, add_check_digits=Tru def to_binary(number): """Convert the number to its binary representation (without the check digits).""" - import sys - number = compact(number, strip_check_digits=True) - if sys.version > '3': # pragma: no cover (Python 2/3 specific code) - return bytes.fromhex(number) - else: # pragma: no cover (Python 2/3 specific code) - return number.decode('hex') + from binascii import a2b_hex + return a2b_hex(compact(number, strip_check_digits=True)) def to_xml(number): diff --git a/stdnum/iso6346.py b/stdnum/iso6346.py index 2a729d03..7958bffe 100644 --- a/stdnum/iso6346.py +++ b/stdnum/iso6346.py @@ -43,7 +43,7 @@ from stdnum.util import clean -_iso6346_re = re.compile('^\w{3}(U|J|Z|R)\d{7}$') +_iso6346_re = re.compile(r'^\w{3}(U|J|Z|R)\d{7}$') def compact(number): diff --git a/stdnum/it/codicefiscale.py b/stdnum/it/codicefiscale.py index 25569aa7..b7f27ea5 100644 --- a/stdnum/it/codicefiscale.py +++ b/stdnum/it/codicefiscale.py @@ -51,9 +51,9 @@ # regular expression for matching fiscal codes _code_re = re.compile( - '^[A-Z]{6}' - '[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST]{1}[0-9LMNPQRSTUV]{2}' - '[A-Z]{1}[0-9LMNPQRSTUV]{3}[A-Z]{1}$') + r'^[A-Z]{6}' + r'[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST]{1}[0-9LMNPQRSTUV]{2}' + r'[A-Z]{1}[0-9LMNPQRSTUV]{3}[A-Z]{1}$') # encoding of birth day and year values (usually numeric but some letters # may be substituted on clashes) diff --git a/stdnum/meid.py b/stdnum/meid.py index 418a929c..36b4445d 100644 --- a/stdnum/meid.py +++ b/stdnum/meid.py @@ -178,12 +178,8 @@ def format(number, separator=' ', format=None, add_check_digit=False): def to_binary(number): """Convert the number to its binary representation (without the check digit).""" - import sys - number = compact(number, strip_check_digit=True) - if sys.version > '3': # pragma: no cover (Python 2/3 specific code) - return bytes.fromhex(number) - else: # pragma: no cover (Python 2/3 specific code) - return number.decode('hex') + from binascii import a2b_hex + return a2b_hex(compact(number, strip_check_digit=True)) def to_pseudo_esn(number): diff --git a/stdnum/nl/postcode.py b/stdnum/nl/postcode.py index b154588d..90674d70 100644 --- a/stdnum/nl/postcode.py +++ b/stdnum/nl/postcode.py @@ -44,7 +44,7 @@ _postcode_re = re.compile(r'^(?P[1-9][0-9]{3})(?P[A-Z]{2})$') -_postcode_blacklist = ('SA', 'SD' ,'SS') +_postcode_blacklist = ('SA', 'SD', 'SS') def compact(number): diff --git a/stdnum/numdb.py b/stdnum/numdb.py index 8a635fdf..0a2e1550 100644 --- a/stdnum/numdb.py +++ b/stdnum/numdb.py @@ -85,8 +85,12 @@ import re from pkg_resources import resource_stream -_line_re = re.compile('^(?P *)(?P([^-,\s]+(-[^-,\s]+)?)(,[^-,\s]+(-[^-,\s]+)?)*)\s*(?P.*)$') -_prop_re = re.compile('(?P[0-9a-zA-Z-_]+)="(?P[^"]*)"') +_line_re = re.compile( + r'^(?P *)' + r'(?P([^-,\s]+(-[^-,\s]+)?)(,[^-,\s]+(-[^-,\s]+)?)*)\s*' + r'(?P.*)$') +_prop_re = re.compile( + r'(?P[0-9a-zA-Z-_]+)="(?P[^"]*)"') # this is a cache of open databases _open_databases = {} @@ -195,5 +199,6 @@ def get(name): if name not in _open_databases: import codecs reader = codecs.getreader('utf-8') - _open_databases[name] = read(reader(resource_stream(__name__, name + '.dat'))) + db = read(reader(resource_stream(__name__, name + '.dat'))) + _open_databases[name] = db return _open_databases[name] diff --git a/stdnum/pt/nif.py b/stdnum/pt/nif.py index f85df17f..60c2a9fb 100644 --- a/stdnum/pt/nif.py +++ b/stdnum/pt/nif.py @@ -48,7 +48,8 @@ def compact(number): def calc_check_digit(number): """Calculate the check digit. The number passed should not have the check digit included.""" - return str((11 - sum((9 - i) * int(n) for i, n in enumerate(number)) ) % 11 % 10) + s = sum((9 - i) * int(n) for i, n in enumerate(number)) + return str((11 - s) % 11 % 10) def validate(number): diff --git a/stdnum/us/atin.py b/stdnum/us/atin.py index 7068bb80..1a93a751 100644 --- a/stdnum/us/atin.py +++ b/stdnum/us/atin.py @@ -42,7 +42,7 @@ # regular expression for matching ATINs -_atin_re = re.compile('^[0-9]{3}-?[0-9]{2}-?[0-9]{4}$') +_atin_re = re.compile(r'^[0-9]{3}-?[0-9]{2}-?[0-9]{4}$') def compact(number): diff --git a/stdnum/us/ein.py b/stdnum/us/ein.py index e40e7c66..3a500221 100644 --- a/stdnum/us/ein.py +++ b/stdnum/us/ein.py @@ -49,7 +49,7 @@ # regular expression for matching EINs -_ein_re = re.compile('^(?P[0-9]{2})-?(?P[0-9]{7})$') +_ein_re = re.compile(r'^(?P[0-9]{2})-?(?P[0-9]{7})$') def compact(number): diff --git a/stdnum/us/itin.py b/stdnum/us/itin.py index 6233e89c..f8dc5441 100644 --- a/stdnum/us/itin.py +++ b/stdnum/us/itin.py @@ -56,7 +56,7 @@ # regular expression for matching ITINs -_itin_re = re.compile('^(?P[0-9]{3})-?(?P[0-9]{2})-?[0-9]{4}$') +_itin_re = re.compile(r'^(?P[0-9]{3})-?(?P[0-9]{2})-?[0-9]{4}$') # allowed group digits diff --git a/stdnum/us/ptin.py b/stdnum/us/ptin.py index 48ee2c48..c4a87fc6 100644 --- a/stdnum/us/ptin.py +++ b/stdnum/us/ptin.py @@ -40,7 +40,7 @@ # regular expression for matching PTINs -_ptin_re = re.compile('^P[0-9]{8}$') +_ptin_re = re.compile(r'^P[0-9]{8}$') def compact(number): diff --git a/stdnum/us/ssn.py b/stdnum/us/ssn.py index 81d43db3..d4df8348 100644 --- a/stdnum/us/ssn.py +++ b/stdnum/us/ssn.py @@ -49,7 +49,8 @@ # regular expression for matching SSN -_ssn_re = re.compile('^(?P[0-9]{3})-?(?P[0-9]{2})-?(?P[0-9]{4})$') +_ssn_re = re.compile( + r'^(?P[0-9]{3})-?(?P[0-9]{2})-?(?P[0-9]{4})$') # blacklist of SSNs _ssn_blacklist = set(('078-05-1120', '457-55-5462', '219-09-9999')) diff --git a/stdnum/util.py b/stdnum/util.py index 74bd0958..efaa5ca2 100644 --- a/stdnum/util.py +++ b/stdnum/util.py @@ -39,7 +39,7 @@ from stdnum.exceptions import * -_strip_doctest_re = re.compile('^>>> .*\Z', re.DOTALL | re.MULTILINE) +_strip_doctest_re = re.compile(r'^>>> .*\Z', re.DOTALL | re.MULTILINE) def _mk_char_map(mapping): @@ -61,7 +61,8 @@ def _mk_char_map(mapping): 'HYPHEN BULLET,MACRON,MODIFIER LETTER MINUS SIGN,FULLWIDTH MACRON,' 'OGHAM SPACE MARK,SUPERSCRIPT MINUS,SUBSCRIPT MINUS,MINUS SIGN,' 'HORIZONTAL LINE EXTENSION,HORIZONTAL SCAN LINE-1,HORIZONTAL SCAN LINE-3,' - 'HORIZONTAL SCAN LINE-7,HORIZONTAL SCAN LINE-9,STRAIGHTNESS': '-', + 'HORIZONTAL SCAN LINE-7,HORIZONTAL SCAN LINE-9,STRAIGHTNESS': + '-', 'ASTERISK,ARABIC FIVE POINTED STAR,SYRIAC HARKLEAN ASTERISCUS,' 'FLOWER PUNCTUATION MARK,VAI FULL STOP,SMALL ASTERISK,FULLWIDTH ASTERISK,' 'ASTERISK OPERATOR,STAR OPERATOR,HEAVY ASTERISK,LOW ASTERISK,' @@ -69,11 +70,13 @@ def _mk_char_map(mapping): 'TEARDROP-SPOKED ASTERISK,OPEN CENTRE TEARDROP-SPOKED ASTERISK,' 'HEAVY TEARDROP-SPOKED ASTERISK,EIGHT TEARDROP-SPOKED PROPELLER ASTERISK,' 'HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK,' - 'ARABIC FIVE POINTED STAR': '*', + 'ARABIC FIVE POINTED STAR': + '*', 'COMMA,ARABIC COMMA,SINGLE LOW-9 QUOTATION MARK,IDEOGRAPHIC COMMA,' 'ARABIC DECIMAL SEPARATOR,ARABIC THOUSANDS SEPARATOR,PRIME,RAISED COMMA,' 'PRESENTATION FORM FOR VERTICAL COMMA,SMALL COMMA,' - 'SMALL IDEOGRAPHIC COMMA,FULLWIDTH COMMA,CEDILLA': ',', + 'SMALL IDEOGRAPHIC COMMA,FULLWIDTH COMMA,CEDILLA': + ',', 'FULL STOP,MIDDLE DOT,GREEK ANO TELEIA,ARABIC FULL STOP,' 'IDEOGRAPHIC FULL STOP,SYRIAC SUPRALINEAR FULL STOP,' 'SYRIAC SUBLINEAR FULL STOP,SAMARITAN PUNCTUATION NEQUDAA,' @@ -83,17 +86,21 @@ def _mk_char_map(mapping): 'SMALL FULL STOP,FULLWIDTH FULL STOP,HALFWIDTH KATAKANA MIDDLE DOT,' 'AEGEAN WORD SEPARATOR DOT,PHOENICIAN WORD SEPARATOR,' 'KHAROSHTHI PUNCTUATION DOT,DOT ABOVE,ARABIC SYMBOL DOT ABOVE,' - 'ARABIC SYMBOL DOT BELOW,BULLET OPERATOR,DOT OPERATOR': '.', + 'ARABIC SYMBOL DOT BELOW,BULLET OPERATOR,DOT OPERATOR': + '.', 'SOLIDUS,SAMARITAN PUNCTUATION ARKAANU,FULLWIDTH SOLIDUS,DIVISION SLASH,' - 'MATHEMATICAL RISING DIAGONAL,BIG SOLIDUS,FRACTION SLASH': '/', + 'MATHEMATICAL RISING DIAGONAL,BIG SOLIDUS,FRACTION SLASH': + '/', 'COLON,ETHIOPIC WORDSPACE,RUNIC MULTIPLE PUNCTUATION,MONGOLIAN COLON,' 'PRESENTATION FORM FOR VERTICAL COLON,FULLWIDTH COLON,' - 'PRESENTATION FORM FOR VERTICAL TWO DOT LEADER,SMALL COLON': ':', + 'PRESENTATION FORM FOR VERTICAL TWO DOT LEADER,SMALL COLON': + ':', 'SPACE,NO-BREAK SPACE,EN QUAD,EM QUAD,EN SPACE,EM SPACE,' 'THREE-PER-EM SPACE,FOUR-PER-EM SPACE,SIX-PER-EM SPACE,FIGURE SPACE,' 'PUNCTUATION SPACE,THIN SPACE,HAIR SPACE,NARROW NO-BREAK SPACE,' - 'MEDIUM MATHEMATICAL SPACE,IDEOGRAPHIC SPACE': ' ', - })) + 'MEDIUM MATHEMATICAL SPACE,IDEOGRAPHIC SPACE': + ' ', +})) # mapping of country codes to internally used names @@ -138,9 +145,8 @@ def get_number_modules(base='stdnum'): __import__(base) module = sys.modules[base] for loader, name, is_pkg in pkgutil.walk_packages( - module.__path__, module.__name__ + '.', - onerror=lambda x: None - ): + module.__path__, module.__name__ + '.', + onerror=lambda x: None): __import__(name) module = sys.modules[name] if hasattr(module, 'validate'): From 13270457bd53c93ce5c085fdd7d7e343a089a97d Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 11 Oct 2015 12:03:37 +0200 Subject: [PATCH 080/654] Update database files This also updates the script to download updated Chinese location names. --- getcnloc.py | 3 +- stdnum/cn/loc.dat | 4 +- stdnum/iban.dat | 3 +- stdnum/imsi.dat | 815 +++++++++++++++++++++++++++------------------- stdnum/isbn.dat | 19 +- stdnum/isil.dat | 1 + 6 files changed, 488 insertions(+), 357 deletions(-) diff --git a/getcnloc.py b/getcnloc.py index 965e283c..136cbf25 100755 --- a/getcnloc.py +++ b/getcnloc.py @@ -48,10 +48,9 @@ 'GB2260-2011', 'GB2260-2012', 'GB2260-2013', - 'GB2260', + 'GB2260-2014', ] - def fetch_data(): data_collection = OrderedDict() for revision in data_revisions: diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat index b6cff7dc..1fcb87be 100644 --- a/stdnum/cn/loc.dat +++ b/stdnum/cn/loc.dat @@ -1,6 +1,6 @@ # generated from National Bureau of Statistics of the People's # Republic of China, downloaded from https://github.com/cn/GB2260 -# 2015-06-08 09:43:51.705262 +# 2015-10-11 10:02:20.899770 110101 county="东城区" prefecture="市辖区" province="北京市" 110102 county="西城区" prefecture="市辖区" province="北京市" 110103 county="崇文区" prefecture="市辖区" province="北京市" @@ -225,8 +225,6 @@ 131128 county="阜城县" prefecture="衡水市" province="河北省" 131181 county="冀州市" prefecture="衡水市" province="河北省" 131182 county="深州市" prefecture="衡水市" province="河北省" -139001 county="定州市" prefecture="省直辖县级行政区划" province="河北省" -139002 county="辛集市" prefecture="省直辖县级行政区划" province="河北省" 140101 county="市辖区" prefecture="太原市" province="山西省" 140105 county="小店区" prefecture="太原市" province="山西省" 140106 county="迎泽区" prefecture="太原市" province="山西省" diff --git a/stdnum/iban.dat b/stdnum/iban.dat index 1b873ff0..69710fa2 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -53,9 +53,10 @@ PS country="Palestine, State of" bban="4!a21!c" PL country="Poland" bban="8!n16!n" PT country="Portugal" bban="4!n4!n11!n2!n" QA country="Qatar" bban="4!a21!c" -LC country="Saint Lucia" bban="4!a24n" RO country="Romania" bban="4!a16!c" +LC country="Saint Lucia" bban="4!a24n" SM country="San Marino" bban="1!a5!n5!n12!c" +ST country="Sao Tome And Principe" bban="8!n11!n2!n" SA country="Saudi Arabia" bban="2!n18!c" RS country="Serbia" bban="3!n13!n2!n" SK country="Slovak Republic" bban="4!n6!n10!n" diff --git a/stdnum/imsi.dat b/stdnum/imsi.dat index 0f396f5f..fa0f5c30 100644 --- a/stdnum/imsi.dat +++ b/stdnum/imsi.dat @@ -13,6 +13,7 @@ 07 bands="" cc="gr" country="Greece" operator="AMD Telecom" status="" 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" + 14 bands="MVNO" brand="Cyta Hellas" cc="gr" country="Greece" operator="CYTA" status="Operational" 00-99 204 01 bands="" cc="nl" country="Netherlands" operator="RadioAccess Network Services BV" status="" @@ -45,16 +46,17 @@ 28 bands="" cc="nl" country="Netherlands" operator="Lancelot B.V." status="" 29 bands="" cc="nl" country="Netherlands" operator="Private Mobile Ltd" status="" 60 bands="" cc="nl" country="Netherlands" operator="Nextgen Mobile Ltd" status="" - 61 bands="" cc="nl" country="Netherlands" operator="BodyTrace Netherlands B.V." status="" + 61 bands="MVNO" cc="nl" country="Netherlands" operator="BodyTrace Netherlands B.V." status="Operational" 62 bands="MVNO" brand="Voxbone" cc="nl" country="Netherlands" operator="Voxbone mobile" status="Operational" 64 bands="" cc="nl" country="Netherlands" operator="Zetacom B.V." status="" 65 bands="" cc="nl" country="Netherlands" operator="AGMS Netherlands B.V." status="" - 66 bands="" cc="nl" country="Netherlands" operator="Utility Connect B.V." status="" + 66 bands="CDMA 450" cc="nl" country="Netherlands" operator="Utility Connect B.V." status="Operational" 67 bands="PrivateGSM 1800" cc="nl" country="Netherlands" operator="RadioAccess B.V." status="Operational" 68 bands="" cc="nl" country="Netherlands" operator="Roamware (Netherlands) B.V." status="" - 69 cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." + 69 cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="" 00-99 206 + 00 bands="" brand="Proximus" cc="be" country="Belgium" operator="Belgacom Mobile" status="" 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Proximus" cc="be" country="Belgium" operator="Belgacom Mobile" status="Operational" 02 bands="GSM-R" cc="be" country="Belgium" operator="N.M.B.S." status="Operational" 05 bands="MVNO" brand="Telenet" cc="be" country="Belgium" operator="Telenet" status="Operational" @@ -101,7 +103,7 @@ 89 bands="" cc="fr" country="France" operator="Omer Telecom Ltd" status="Not operational" 90 bands="" cc="fr" country="France" operator="Images & Réseaux" status="" 91 bands="" cc="fr" country="France" operator="Orange S.A." status="" - 92 bands="LTE-TDD 2300 / LTE 2600" brand="Com4Innov" cc="fr" country="France" operator="Association Plate-forme Télécom" status="Operational" + 92 bands="TD-LTE 2300 / LTE 2600" brand="Com4Innov" cc="fr" country="France" operator="Association Plate-forme Télécom" status="Operational" 93 bands="" cc="fr" country="France" operator="TDF" status="" 94 bands="" cc="fr" country="France" operator="Halys" status="" 00-99 @@ -112,11 +114,11 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" 00-99 214 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" 04 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Yoigo" cc="es" country="Spain" operator="Xfera Moviles SA" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TME" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" 08 bands="MVNO" brand="Euskaltel" cc="es" country="Spain" status="Operational" 09 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" @@ -133,16 +135,18 @@ 20 bands="MVNO" brand="Fonyou" cc="es" country="Spain" operator="Fonyou Telecom S.L." status="Operational" 21 bands="MVNO" brand="Jazztel" cc="es" country="Spain" operator="Jazz Telecom S.A.U." status="Operational" 22 bands="MVNO" brand="DigiMobil" cc="es" country="Spain" operator="Best Spain Telecom" status="Operational" - 23 bands="MVNO" brand="Barablu" cc="es" country="Spain" operator="Barablu Móvil España" + 23 bands="MVNO" brand="Barablu" cc="es" country="Spain" operator="Barablu Móvil España" status="" 24 bands="MVNO" brand="Eroski" cc="es" country="Spain" operator="Eroski Móvil España" status="Operational" 25 bands="MVNO" brand="Lycamobile" cc="es" country="Spain" operator="LycaMobile S.L." status="Operational" 26 bands="" cc="es" country="Spain" operator="Lleida Networks Serveis Telemátics, SL" status="" 27 bands="MVNO" brand="Truphone" cc="es" country="Spain" operator="SCN Truphone, S.L." status="Operational" - 28 bands="LTE-TDD 2600" brand="Murcia4G" cc="es" country="Spain" operator="Consorcio de Telecomunicaciones Avanzadas, S.A." status="Operational" - 29 bands="LTE-TDD 3500" cc="es" country="Spain" operator="NEO-SKY 2002, S.A." status="Operational" + 28 bands="TD-LTE 2600" brand="Murcia4G" cc="es" country="Spain" operator="Consorcio de Telecomunicaciones Avanzadas, S.A." status="Operational" + 29 bands="TD-LTE 3500" cc="es" country="Spain" operator="NEO-SKY 2002, S.A." status="Operational" 30 bands="" cc="es" country="Spain" operator="Compatel Limited" status="" 31 bands="" cc="es" country="Spain" operator="Red Digital De Telecomunicaciones de las Islas Baleares, S.L." status="" 32 bands="MVNO" brand="Tuenti" cc="es" country="Spain" operator="Tuenti Technologies S.L." status="Operational" + 33 bands="WiMAX" cc="es" country="Spain" operator="EURONA WIRELESS TELECOM, S.A." status="Operational" + 34 bands="LTE 2600" cc="es" country="Spain" operator="Aire Networks del Mediterráneo, S.L.U." status="Operational" 51 bands="GSM-R" brand="ADIF" cc="es" country="Spain" operator="Administrador de Infraestructuras Ferroviarias" status="Operational" 00-99 216 @@ -165,11 +169,11 @@ 12 bands="MVNO" cc="hr" country="Croatia" operator="TELE FOCUS d.o.o." status="" 00-99 220 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Serbia" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Serbia" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Montenegro" status="Not operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="mt:s" cc="rs" country="Serbia" operator="Telekom Srbija" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="mt:s" cc="rs" country="Serbia" operator="Telekom Srbija" status="Operational" 04 bands="GSM" brand="T-Mobile" cc="rs" country="Serbia" operator="T-Mobile Montenegro LLC" status="Not operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="VIP" cc="rs" country="Serbia" operator="VIP Mobile" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="VIP" cc="rs" country="Serbia" operator="VIP Mobile" status="Operational" 07 bands="CDMA 450" cc="rs" country="Serbia" operator="Orion Telekom" status="Operational" 00-99 222 @@ -177,14 +181,21 @@ 02 bands="Satellite (Globalstar)" brand="Elsacom" cc="it" country="Italy" status="Not operational" 04 bands="" brand="Intermatica" cc="it" country="Italy" status="" 05 bands="" brand="Telespazio" cc="it" country="Italy" status="" - 07 bands="MVNO" brand="Noverca" cc="it" country="Italy" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel N.V." status="Operational" + 06 bands="" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel B.V." status="" + 07 bands="MVNO" brand="Nòverca" cc="it" country="Italy" operator="Nòverca Italia" status="Not operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel B.V." status="Operational" 30 bands="GSM-R 900" brand="RFI" cc="it" country="Italy" operator="Rete Ferroviaria Italiana" status="Operational" - 33 bands="" cc="it" country="Italy" operator="Hi3G" status="Operational" + 33 bands="MVNO" brand="Poste Mobile" cc="it" country="Italy" operator="Poste Mobile SpA" status="Operational" 34 bands="MVNO" brand="BT Italia" cc="it" country="Italy" operator="British Telecom Italia" status="Reserved" 35 bands="MVNO" brand="Lyca Italy" cc="it" country="Italy" operator="Lycamobile" status="Operational" + 36 bands="" brand="Digi Mobil" cc="it" country="Italy" operator="Digi Italy S.r.l." status="" + 37 bands="" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="" + 38 bands="" brand="LINKEM" cc="it" country="Italy" operator="Linkem SpA" status="" + 39 bands="" brand="SMS Italia" cc="it" country="Italy" operator="SMS Italia S.r.l." status="" + 43 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="" + 48 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="" 77 bands="UMTS 2100" brand="IPSE 2000" cc="it" country="Italy" status="Not operational" - 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni SpA" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni SpA" status="Operational" 98 bands="GSM 900" brand="BLU s.p.a" cc="it" country="Italy" operator="BLU s.p.a" status="Not operational" 99 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="Operational" 00-99 @@ -193,18 +204,18 @@ 02 bands="CDMA 420" brand="Clicknet Mobile" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" 03 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 04 bands="CDMA 450" brand="Cosmote/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" - 05 bands="UMTS 900 / UMTS 2100" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" + 05 bands="UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" 06 bands="UMTS 2100" brand="Telekom/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="ro" country="Romania" operator="Orange România" status="Operational" 11 bands="MVNO" cc="ro" country="Romania" operator="Enigma-System" status="" - 15 bands="TD-LTE 2600" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Operational" + 15 bands="WiMAX" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Operational" 16 bands="MVNO" brand="Lycamobile" cc="ro" country="Romania" operator="Lycamobile Romania" status="Operational" 00-99 228 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="Operational" - 03 bands="GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="ch" country="Switzerland" operator="Orange Communications SA" status="Operational" - 05 bands="" cc="ch" country="Switzerland" operator="Togewanet AG (Comfone)" status="Reserved" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="Operational" + 03 bands="GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Salt" cc="ch" country="Switzerland" operator="Salt Mobile SA" status="Operational" + 05 bands="" cc="ch" country="Switzerland" operator="Comfone AG" status="Not operational" 06 bands="GSM-R 900" brand="SBB-CFF-FFS" cc="ch" country="Switzerland" operator="SBB AG" status="Operational" 07 bands="GSM 1800" brand="IN&Phone" cc="ch" country="Switzerland" operator="IN&Phone SA" status="Not operational" 08 bands="GSM 1800" brand="Tele4u" cc="ch" country="Switzerland" operator="TelCommunication Services AG" status="Operational" @@ -215,33 +226,36 @@ 52 brand="Barablu" cc="ch" country="Switzerland" operator="Barablu" status="Not operational" 53 bands="MVNO" cc="ch" country="Switzerland" operator="UPC Cablecom GmbH" status="Operational" 54 bands="MVNO" cc="ch" country="Switzerland" operator="Lycamobile AG" status="Operational" + 55 bands="" cc="ch" country="Switzerland" operator="WeMobile SA" status="" 56 bands="" cc="ch" country="Switzerland" operator="SMSRelay AG" status="" + 57 bands="" cc="ch" country="Switzerland" operator="Mitto AG" status="" 99 cc="ch" country="Switzerland" operator="Swisscom" status="" 00-99 230 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="cy" country="Cyprus" operator="T-Mobile Czech Republic" status="Operational" - 02 bands="CDMA 450 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="cy" country="Cyprus" operator="O2 Czech Republic" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2100" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" - 04 bands="CDMA2000 410 - 430" brand="U:fon" cc="cy" country="Cyprus" operator="Air Telecom a. s." status="Operational" - 05 bands="" cc="cy" country="Cyprus" operator="TRAVEL TELEKOMMUNIKATION, s.r.o." status="" - 06 bands="" cc="cy" country="Cyprus" operator="OSNO TELECOMUNICATION, s.r.o." status="" - 07 bands="MVNO" cc="cy" country="Cyprus" operator="ASTELNET, s.r.o." status="Operational" - 08 bands="" cc="cy" country="Cyprus" operator="Compatel s.r.o." status="" - 98 bands="GSM-R 900" cc="cy" country="Cyprus" operator="Správa železniční dopravní cesty, s.o." status="Operational" - 99 bands="GSM 1800" brand="Vodafone" cc="cy" country="Cyprus" operator="Vodafone Czech Republic" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="cz" country="Czech Republic" operator="T-Mobile Czech Republic" status="Operational" + 02 bands="CDMA 450 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="cz" country="Czech Republic" operator="O2 Czech Republic" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2100" brand="Vodafone" cc="cz" country="Czech Republic" operator="Vodafone Czech Republic" status="Operational" + 04 bands="CDMA2000 410 - 430" brand="U:fon" cc="cz" country="Czech Republic" operator="Air Telecom a. s." status="Operational" + 05 bands="" cc="cz" country="Czech Republic" operator="TRAVEL TELEKOMMUNIKATION, s.r.o." status="Not operational" + 06 bands="" cc="cz" country="Czech Republic" operator="OSNO TELECOMUNICATION, s.r.o." status="" + 07 bands="MVNO" cc="cz" country="Czech Republic" operator="ASTELNET, s.r.o." status="Operational" + 08 bands="" cc="cz" country="Czech Republic" operator="Compatel s.r.o." status="" + 09 bands="MVNO" cc="cz" country="Czech Republic" operator="Mundio Distribution Czech Republic s.r.o." status="" + 98 bands="GSM-R 900" cc="cz" country="Czech Republic" operator="Správa železniční dopravní cesty, s.o." status="Operational" + 99 bands="GSM 1800" brand="Vodafone" cc="cz" country="Czech Republic" operator="Vodafone Czech Republic" status="Operational" 00-99 231 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" 03 bands="LTE 1800" brand="Swan" cc="sk" country="Slovakia" operator="Unient Communications" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="O2" cc="sk" country="Slovakia" operator="Telefónica O2 Slovakia" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="sk" country="Slovakia" operator="Telefónica O2 Slovakia" status="Operational" 99 bands="GSM-R" brand="ŽSR" cc="sk" country="Slovakia" operator="Železnice Slovenskej Republiky" status="Operational" 00-99 232 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="A1.net" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" - 02 cc="at" country="Austria" operator="A1 Telekom Austria" status="reserved" + 02 cc="at" country="Austria" operator="A1 Telekom Austria" status="Reserved" 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria" status="Operational" 04 bands="" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria Gmbh" status="" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange AT" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" @@ -259,70 +273,72 @@ 17 bands="" cc="at" country="Austria" operator="MASS Response Service GmbH" status="" 18 bands="" cc="at" country="Austria" operator="smartspace GmbH" status="" 19 bands="" cc="at" country="Austria" operator="Tele2 Telecommunication GmbH" status="" + 20 bands="" cc="at" country="Austria" operator="MTEL Austrija GmbH" status="" 91 bands="GSM-R" brand="GSM-R A" cc="at" country="Austria" operator="ÖBB" status="Operational" + 92 bands="" cc="at" country="Austria" operator="ArgoNET GmbH" status="" 00-99 234 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" 01 bands="GSM 1800" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="gb" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="gb" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" - 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" - 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" + 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" status="" + 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" status="" 07 bands="GSM 1800" cc="gb" country="United Kingdom" operator="Cable & Wireless Worldwide" status="Operational" - 08 cc="gb" country="United Kingdom" operator="OnePhone (UK) Ltd" - 09 bands="GSM 900 / GSM 1800" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Tismi BV" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 11 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 08 cc="gb" country="United Kingdom" operator="OnePhone (UK) Ltd" status="" + 09 cc="gb" country="United Kingdom" operator="Tismi BV" status="" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" 12 bands="GSM-R" brand="Railtrack" cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" 13 bands="GSM-R" brand="Railtrack" cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Ltd" status="Operational" 14 bands="GSM 1800" brand="Hay Systems Ltd" cc="gb" country="United Kingdom" operator="Hay Systems Ltd" status="Operational" - 15 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vodafone UK" cc="gb" country="United Kingdom" operator="Vodafone" status="Operational" - 16 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Talk Talk" cc="gb" country="United Kingdom" operator="TalkTalk Communications Limited" status="Operational" - 17 cc="gb" country="United Kingdom" operator="FleXtel Limited" - 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cloud9" cc="gb" country="United Kingdom" operator="Cloud9" status="Operational" + 15 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="Vodafone UK" cc="gb" country="United Kingdom" operator="Vodafone" status="Operational" + 16 bands="MVNO" brand="Talk Talk" cc="gb" country="United Kingdom" operator="TalkTalk Communications Limited" status="Operational" + 17 cc="gb" country="United Kingdom" operator="FleXtel Limited" status="" + 18 bands="MVNO" brand="Cloud9" cc="gb" country="United Kingdom" operator="Cloud9" status="Operational" 19 bands="GSM 1800" brand="Private Mobile Networks PMN" cc="gb" country="United Kingdom" operator="Teleware plc" status="Operational" - 20 bands="UMTS 2100" brand="3" cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" + 20 bands="UMTS 2100 / LTE 1800" brand="3" cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" 21 bands="" cc="gb" country="United Kingdom" operator="LogicStar Ltd" status="Not operational" 22 bands="" cc="gb" country="United Kingdom" operator="Telesign Mobile Limited" status="" 23 bands="" cc="gb" country="United Kingdom" operator="Icron Network Limited" status="" 24 bands="" brand="Greenfone" cc="gb" country="United Kingdom" operator="Stour Marine Limited" status="Operational" 25 bands="MVNO" brand="Truphone" cc="gb" country="United Kingdom" operator="Truphone" status="Operational" 26 bands="MVNO" brand="Lycamobile" cc="gb" country="United Kingdom" operator="Lycamobile UK Limited" status="Operational" - 27 bands="GSM 900 / GSM 1800 / UMTS 2100" cc="gb" country="United Kingdom" operator="Teleena UK Limited" status="Operational" - 28 bands="" brand="Marathon Telecom Ltd" cc="gb" country="United Kingdom" operator="Marathon Telecom Limited" status="Operational" + 27 bands="MVNE" cc="gb" country="United Kingdom" operator="Teleena UK Limited" status="Operational" + 28 bands="MVNO" cc="gb" country="United Kingdom" operator="Marathon Telecom Limited" status="Operational" 29 bands="" brand="aql" cc="gb" country="United Kingdom" operator="(aq) Limited" status="" - 30 bands="GSM 1800 / UMTS 2100" brand="T-Mobile UK" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 31 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" - 32 bands="GSM 1800 / UMTS 2100" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" - 33 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 34 bands="GSM 1800 / UMTS 2100" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 30 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile UK" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 31 bands="MVNO" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" + 32 bands="MVNO" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" + 33 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 34 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" 35 bands="" cc="gb" country="United Kingdom" operator="JSC Ingenium (UK) Limited" status="Not operational" - 36 bands="" cc="gb" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="" + 36 bands="GSM 900 / GSM 1800 / LTE" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="Operational" 37 bands="" cc="gb" country="United Kingdom" operator="Synectiv Ltd" status="" 38 bands="" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="" 39 bands="" cc="gb" country="United Kingdom" operator="SSE Energy Supply Limited" status="" - 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" - 51 bands="TD-LTE" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" + 50 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" + 51 bands="TD-LTE 3500 / TD-LTE 3700" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" 52 bands="" cc="gb" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" 53 bands="" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="" 54 bands="" cc="gb" country="United Kingdom" operator="The Carphone Warehouse Limited" status="" - 55 bands="GSM 900 (Guernsey) / GSM 1800 (Jersey) / UMTS 2100" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Cable & Wireless Guernsey / Sure Mobile (Jersey)" status="Operational" - 58 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Pronto GSM" cc="gb" country="United Kingdom" operator="Manx Telecom" status="Operational" - 76 bands="GSM 900 / GSM 1800" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" + 55 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Sure (Guernsey) Limited" status="Operational" + 58 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Pronto GSM" cc="gb" country="United Kingdom" operator="Manx Telecom" status="Operational" + 76 bands="GSM 900 / GSM 1800" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" 78 bands="TETRA" brand="Airwave" cc="gb" country="United Kingdom" operator="Airwave Solutions Ltd" status="Operational" 86 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 00-99 235 - 00 cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" + 00 cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="" 01 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 02 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 03 bands="" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="" - 77 brand="BT" cc="gb" country="United Kingdom" operator="BT Group" - 91 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" - 92 cc="gb" country="United Kingdom" operator="Cable & Wireless UK" - 94 cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" - 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" + 77 brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="" + 91 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" status="" + 92 cc="gb" country="United Kingdom" operator="Cable & Wireless UK" status="" + 94 cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="" + 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" status="" 00-99 238 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" @@ -339,6 +355,8 @@ 12 bands="MVNO" brand="Lycamobile" cc="dk" country="Denmark" operator="Lycamobile Denmark Ltd" status="Operational" 13 bands="" cc="dk" country="Denmark" operator="Compatel Limited" status="" 15 bands="" cc="dk" country="Denmark" operator="Ice Danmark ApS" status="" + 16 bands="" cc="dk" country="Denmark" operator="Tismi B.V." status="" + 17 bands="MVNO" cc="dk" country="Denmark" operator="Naka AG" status="" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="dk" country="Denmark" operator="Telia" status="Operational" 23 bands="GSM-R" brand="GSM-R DK" cc="dk" country="Denmark" operator="Banedanmark" status="Operational" 28 bands="" cc="dk" country="Denmark" operator="CoolTEL ApS" status="" @@ -350,12 +368,12 @@ 00-99 240 01 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="se" country="Sweden" operator="TeliaSonera Sverige AB" status="Operational" - 02 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="3" cc="se" country="Sweden" operator="HI3G Access AB" status="Operational" + 02 bands="UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600 / TD-LTE 2600" brand="3" cc="se" country="Sweden" operator="HI3G Access AB" status="Operational" 03 bands="CDMA 450" brand="Net 1" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" 04 bands="UMTS 2100" brand="SWEDEN" cc="se" country="Sweden" operator="3G Infrastructure Services AB" status="Operational" 05 bands="UMTS 2100" brand="Sweden 3G" cc="se" country="Sweden" operator="Svenska UMTS-Nät AB" status="Operational" 06 bands="UMTS 2100" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" - 07 bands="GSM 900 / GSM 1800" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Not operational" + 07 bands="UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Operational" 08 bands="GSM 900 / GSM 1800" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Not operational" 09 bands="MVNO" brand="djuice" cc="se" country="Sweden" operator="Telenor Mobile Sweden AS" status="Not operational" 10 brand="Spring Mobil" cc="se" country="Sweden" operator="Spring Mobil AB" status="Operational" @@ -430,7 +448,7 @@ 15 bands="GSM 1800" brand="SAMK" cc="fi" country="Finland" operator="Satakunta University of Applied Sciences" status="Not operational" 16 bands="MVNO" brand="Tele2" cc="fi" country="Finland" operator="Oy Finland Tele2 AB" status="Not operational" 17 bands="GSM-R" brand="RHK" cc="fi" country="Finland" operator="Finnish Transport Agency" status="Operational" - 21 bands="MVNO" brand="Elisa-Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" + 21 bands="MVNO" brand="Elisa- Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" 25 bands="CDMA" brand="Datame" cc="fi" country="Finland" operator="Datame Oy" status="Not operational" 26 bands="MVNO" brand="Compatel" cc="fi" country="Finland" operator="Compatel Ltd" status="Operational" 27 bands="" cc="fi" country="Finland" operator="VTT Technical Research Centre of Finland" status="" @@ -475,10 +493,11 @@ 07 bands="" cc="ee" country="Estonia" operator="Televõrgu AS" status="" 08 bands="MVNO" brand="VIVEX" cc="ee" country="Estonia" operator="VIVEX OU" status="Operational" 09 bands="" cc="ee" country="Estonia" operator="Bravo Telecom" status="" + 10 bands="" cc="ee" country="Estonia" operator="Telcotrade OÜ" status="" 71 bands="" cc="ee" country="Estonia" operator="Siseministeerium (Ministry of Interior)" status="" 00-99 250 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications" status="Operational" 04 bands="GSM 900" brand="Sibchallenge" cc="ru" country="Russian Federation" operator="Sibchallenge" status="Not operational" @@ -490,36 +509,39 @@ 11 bands="LTE 2600" brand="Yota" cc="ru" country="Russian Federation" operator="Scartel" status="Operational" 12 bands="GSM 1800" brand="Akos" cc="ru" country="Russian Federation" operator="Baykal Westcom / New Telephone Company / Far Eastern Cellular" status="Operational" 13 bands="GSM 900 / GSM 1800" brand="KUGSM" cc="ru" country="Russian Federation" operator="Kuban GSM" status="Not operational" - 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100/ TD-LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC" status="Operational" + 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC" status="Operational" 15 bands="GSM 1800" brand="SMARTS" cc="ru" country="Russian Federation" operator="SMARTS Ufa, SMARTS Uljanovsk" status="Operational" 16 bands="GSM 900 / GSM 1800" brand="NTC" cc="ru" country="Russian Federation" operator="New Telephone Company" status="Operational" 17 bands="GSM 900 / GSM 1800" brand="Utel" cc="ru" country="Russian Federation" operator="JSC Uralsvyazinform" status="Operational" 18 bands="TD-LTE 2300" brand="Osnova Telecom" cc="ru" country="Russian Federation" status="Not operational" 19 bands="GSM 1800" brand="INDIGO" cc="ru" country="Russian Federation" operator="INDIGO" status="Not operational" 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tele2" cc="ru" country="Russian Federation" operator="Tele2" status="Operational" + 22 bands="TD-LTE 2300" cc="ru" country="Russian Federation" operator="Vainakh Telecom" status="Operational" 23 bands="GSM 900 / GSM 1800" brand="Mobicom - Novosibirsk" cc="ru" country="Russian Federation" operator="Mobicom - Novosibirsk" status="Not operational" 28 bands="GSM 900" brand="Beeline" cc="ru" country="Russian Federation" operator="Beeline" status="Not operational" 32 bands="GSM 900 / GSM 1800" brand="Win Mobile" cc="ru" country="Russian Federation" operator="K-Telecom" status="Operational" - 35 bands="GSM 1800" brand="MOTIV" cc="ru" country="Russian Federation" operator="EKATERINBURG-2000" status="Operational" + 35 bands="GSM 1800 / LTE 1800" brand="MOTIV" cc="ru" country="Russian Federation" operator="EKATERINBURG-2000" status="Operational" 38 bands="GSM 900 / GSM 1800" brand="Tambov GSM" cc="ru" country="Russian Federation" operator="Central Telecommunication Company" status="Operational" - 39 bands="GSM 900 / GSM 1800 /UMTS 2100" brand="Rostelecom" cc="ru" country="Russian Federation" operator="ROSTELECOM" status="Operational" + 39 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / TD-LTE 2300 / LTE 2600" brand="Rostelecom" cc="ru" country="Russian Federation" operator="ROSTELECOM" status="Operational" 44 bands="" cc="ru" country="Russian Federation" operator="Stavtelesot / North Caucasian GSM" status="Not operational" 50 bands="GSM 900 / GSM 1800" brand="MTS" cc="ru" country="Russian Federation" operator="Bezlimitno.ru" status="Operational" + 54 bands="LTE 1800" brand="TTK" cc="ru" country="Russian Federation" operator="Tattelecom" status="Operational" + 811 cc="ru" country="Russian Federation" operator="Votek Mobile" status="" 91 bands="GSM 1800" brand="Sonic Duo" cc="ru" country="Russian Federation" operator="Sonic Duo CJSC" status="Not operational" 92 bands="" cc="ru" country="Russian Federation" operator="Primtelefon" status="Not operational" 93 bands="" cc="ru" country="Russian Federation" operator="Telecom XXI" status="Not operational" 99 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Beeline" cc="ru" country="Russian Federation" operator="OJSC Vimpel-Communications" status="Operational" 00-99 255 - 01 bands="GSM 900 / GSM 1800 / CDMA 450" brand="MTS" cc="ua" country="Ukraine" operator="MTS Ukraine" status="Operational" + 01 bands="GSM 900 / GSM 1800 / CDMA 450 / UMTS 2100" brand="MTS" cc="ua" country="Ukraine" operator="MTS Ukraine" status="Operational" 02 bands="GSM 900 / GSM 1800" brand="Beeline" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Not operational" - 03 bands="GSM 900 / GSM 1800" brand="Kyivstar" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Kyivstar" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Operational" 04 bands="CDMA 800" brand="IT" cc="ua" country="Ukraine" operator="Intertelecom" status="Operational" 05 bands="GSM 1800" brand="Golden Telecom" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Not operational" - 06 bands="GSM 900 / GSM 1800" brand="life:)" cc="ua" country="Ukraine" operator="Astelit" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="life:)" cc="ua" country="Ukraine" operator="Astelit" status="Operational" 07 bands="UMTS 2100" brand="3Mob" cc="ua" country="Ukraine" operator="3Mob (Ukrtelecom UMTS )" status="Operational" 21 bands="CDMA 800" brand="PEOPLEnet" cc="ua" country="Ukraine" operator="Telesystems of Ukraine" status="Operational" - 23 bands="CDMA 800" brand="CDMA Ukraine" cc="ua" country="Ukraine" operator="Intertelecom" status="Operational" + 23 bands="CDMA 800" brand="CDMA Ukraine" cc="ua" country="Ukraine" operator="Intertelecom" status="Not operational" 25 bands="CDMA 800" brand="NEWTONE" cc="ua" country="Ukraine" operator="CST Invest" status="Operational" 00-99 257 @@ -532,31 +554,31 @@ 501 bands="" brand="BelCel JV" cc="by" country="Belarus" status="" 00-99 259 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Orange" cc="md" country="Moldova" operator="Orange Moldova" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Moldcell" cc="md" country="Moldova" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="md" country="Moldova" operator="Orange Moldova" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Moldcell" cc="md" country="Moldova" status="Operational" 03 bands="CDMA 450" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Eventis" cc="md" country="Moldova" operator="Eventis Telecom" status="Not operational" 05 bands="UMTS 900 / UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" - 99 bands="UMTS 900 / UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" + 99 bands="UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 00-99 260 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Plus" cc="pl" country="Poland" operator="Polkomtel Sp. z o.o." status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="T-Mobile" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / CDMA2000 450" brand="Orange" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Operational" - 04 bands="" cc="pl" country="Poland" operator="CenterNet S.A." status="Not operational" - 05 bands="UMTS 2100" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Operational" - 06 bands="GSM 900/ GSM 1800 / UMTS 900 / UMTS 2100" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Operational" - 07 bands="GSM 900 / UMTS 2100" brand="Netia" cc="pl" country="Poland" operator="Netia S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Plus" cc="pl" country="Poland" operator="Polkomtel Sp. z o.o." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="T-Mobile" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / CDMA2000 450" brand="Orange" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Operational" + 04 bands="" brand="Aero2" cc="pl" country="Poland" operator="Aero 2 Sp. z o.o." status="Not operational" + 05 bands="UMTS 2100" brand="Orange" cc="pl" country="Poland" operator="Polska Telefonia Komórkowa Centertel Sp. z o.o." status="Not operational" + 06 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Operational" + 07 bands="MVNO" brand="Netia" cc="pl" country="Poland" operator="Netia S.A." status="Operational" 08 bands="" cc="pl" country="Poland" operator="E-Telko Sp. z o.o." status="Not operational" 09 bands="MVNO" brand="Lycamobile" cc="pl" country="Poland" operator="Lycamobile Sp. z o.o." status="Operational" - 10 bands="UMTS 850" brand="Sferia" cc="pl" country="Poland" operator="Sferia S.A." status="Operational" + 10 bands="LTE 800" brand="Sferia" cc="pl" country="Poland" operator="Sferia S.A." status="Operational" 11 bands="CDMA2000 420" brand="Nordisk Polska" cc="pl" country="Poland" operator="Nordisk Polska Sp. z o.o." status="Operational" - 12 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cyfrowy Polsat" cc="pl" country="Poland" operator="Cyfrowy Polsat S.A." status="Operational" + 12 bands="MVNO" brand="Cyfrowy Polsat" cc="pl" country="Poland" operator="Cyfrowy Polsat S.A." status="Operational" 13 brand="Sferia" cc="pl" country="Poland" operator="Sferia S.A." status="Not operational" 14 brand="Sferia" cc="pl" country="Poland" operator="Sferia S.A." status="Not operational" - 15 bands="LTE 1800" brand="CenterNet" cc="pl" country="Poland" operator="CenterNet S.A." status="Operational" - 16 bands="GSM 1800 / LTE 1800" brand="Mobyland" cc="pl" country="Poland" operator="Mobyland Sp. z o.o." status="Operational" - 17 bands="UMTS 900" brand="Aero2" cc="pl" country="Poland" operator="Aero 2 Sp. z o.o." status="Operational" + 15 bands="LTE 1800" brand="Aero2" cc="pl" country="Poland" operator="Aero 2 Sp. z o.o." status="Operational" + 16 bands="LTE 1800" brand="Mobyland" cc="pl" country="Poland" operator="Mobyland Sp. z o.o." status="Operational" + 17 bands="UMTS 900 / TD-LTE 2600" brand="Aero2" cc="pl" country="Poland" operator="Aero 2 Sp. z o.o." status="Operational" 18 bands="" brand="AMD Telecom" cc="pl" country="Poland" operator="AMD Telecom S.A." status="" 19 bands="" brand="Teleena" cc="pl" country="Poland" operator="Teleena Holding BV" status="" 20 bands="" brand="Mobile.Net" cc="pl" country="Poland" operator="Mobile.Net Sp. z o.o." status="" @@ -571,10 +593,17 @@ 29 bands="" brand="Interfonica" cc="pl" country="Poland" operator="Interfonica Sp. z o.o." status="" 30 bands="" brand="GrandTel" cc="pl" country="Poland" operator="GrandTel Sp. z o.o." status="" 31 bands="" brand="Phone IT" cc="pl" country="Poland" operator="Phone IT Sp. z o.o." status="" - 32 bands="MVNO" brand="Voxbone" cc="pl" country="Poland" operator="Voxbone mobile" status="Operational" - 33 bands="" brand="Truphone" cc="pl" country="Poland" operator="Truphone Poland Sp. z o.o." status="" - 34 bands="UMTS 900" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" - 98 cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Not Operational" + 32 bands="" cc="pl" country="Poland" operator="Compatel Limited" status="" + 33 bands="MVNO" brand="Truphone" cc="pl" country="Poland" operator="Truphone Poland Sp. z o.o." status="Operational" + 34 bands="UMTS 900" brand="NetWorkS!" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" + 35 bands="GSM-R" cc="pl" country="Poland" operator="PKP Polskie Linie Kolejowe S.A." status="Operational" + 36 bands="MVNO" brand="Vectone Mobile" cc="pl" country="Poland" operator="Mundio Mobile" status="Operational" + 37 bands="" cc="pl" country="Poland" operator="NEXTGEN MOBILE LTD" status="" + 38 bands="" cc="pl" country="Poland" operator="CALLFREEDOM Sp. z o.o." status="" + 39 bands="MVNO" brand="Voxbone" cc="pl" country="Poland" operator="VOXBONE SA" status="Operational" + 40 bands="" cc="pl" country="Poland" operator="Interactive Digital Media GmbH" status="" + 41 bands="" cc="pl" country="Poland" operator="EZ PHONE MOBILE Sp. z o.o." status="" + 98 bands="LTE 1800" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Not Operational" 00-99 262 01 bands="GSM 900 / GSM 1800/ / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="Operational" @@ -637,7 +666,7 @@ 00-99 272 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Vodafone" cc="ie" country="Ireland" operator="Vodafone Ireland" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="3 (former O2 network)" cc="ie" country="Ireland" operator="Hutchison 3G Ireland limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="3" cc="ie" country="Ireland" operator="Hutchison 3G Ireland limited" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Meteor" cc="ie" country="Ireland" operator="Meteor Mobile Communications" status="Operational" 04 bands="" cc="ie" country="Ireland" operator="Access Telecom" status="" 05 bands="UMTS 2100 / LTE 1800" brand="3" cc="ie" country="Ireland" operator="Hutchison 3G Ireland limited" status="Operational" @@ -645,6 +674,8 @@ 09 bands="" cc="ie" country="Ireland" operator="Clever Communications" status="" 11 bands="MVNO" brand="Tesco Mobile" cc="ie" country="Ireland" operator="Liffey Telecom" status="Operational" 13 bands="MVNO" brand="Lycamobile" cc="ie" country="Ireland" operator="Lycamobile" status="Operational" + 15 bands="MVNO" brand="UPC Mobile" cc="ie" country="Ireland" operator="UPC" status="Operational" + 16 bands="MVNO" brand="Carphone Warehouse" cc="ie" country="Ireland" operator="Carphone Warehouse" status="Operational" 00-99 274 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Síminn" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" @@ -654,14 +685,14 @@ 05 bands="GSM 1800" cc="is" country="Iceland" operator="Halló Frjáls fjarskipti hf." status="Not operational" 06 bands="" cc="is" country="Iceland" operator="Núll níu ehf" status="" 07 bands="GSM 1800" brand="IceCell" cc="is" country="Iceland" operator="IceCell ehf" status="Not operational" - 08 bands="" brand="On-waves" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" + 08 bands="GSM 900 / GSM 1800" brand="On-waves" cc="is" country="Iceland" operator="Iceland Telecom" status="Operational" 11 bands="UMTS 2100 / LTE 1800" brand="Nova" cc="is" country="Iceland" operator="Nova ehf" status="Operational" 12 bands="MVNO" brand="Tal" cc="is" country="Iceland" operator="IP fjarskipti" status="Operational" 22 bands="" cc="is" country="Iceland" operator="Landhelgisgæslan (Icelandic Coast Guard)" status="" 00-99 276 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="AMC" cc="al" country="Albania" operator="Albanian Mobile Communications" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="al" country="Albania" operator="Vodafone Albania" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 /LTE 1800 / LTE 2600" brand="Vodafone" cc="al" country="Albania" operator="Vodafone Albania" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Eagle Mobile" cc="al" country="Albania" operator="Eagle Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Plus Communication" cc="al" country="Albania" operator="Plus Communication" status="Operational" 00-99 @@ -677,6 +708,7 @@ 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN" cc="cy" country="Cyprus" operator="MTN Group" status="Operational" 20 bands="LTE 1800" brand="PrimeTel" cc="cy" country="Cyprus" operator="PrimeTel PLC" status="Operational" 22 bands="MVNO" brand="lemontel" cc="cy" country="Cyprus" operator="Lemontel Ltd" status="Operational" + 23 bands="MVNO" cc="cy" country="Cyprus" operator="Mundio Mobile Cyprus Ltd." status="" 00-99 282 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Geocell" cc="ge" country="Georgia" operator="Geocell Limited" status="Operational" @@ -686,7 +718,7 @@ 05 bands="CDMA 800" brand="Silknet" cc="ge" country="Georgia" operator="JSC Silknet" status="Operational" 06 bands="" cc="ge" country="Georgia" operator="JSC Compatel" status="" 07 bands="MVNO" brand="GlobalCell" cc="ge" country="Georgia" operator="GlobalCell Ltd" status="Operational" - 08 bands="LTE-TDD 2300" brand="Silk LTE" cc="ge" country="Georgia" operator="JSC Silknet" status="Operational" + 08 bands="TD-LTE 2300" brand="Silk LTE" cc="ge" country="Georgia" operator="JSC Silknet" status="Operational" 09 bands="" cc="ge" country="Georgia" operator="Gmobile Ltd" status="" 00-99 283 @@ -721,6 +753,7 @@ 00-99 290 01 bands="GSM 900 / UMTS 900 / LTE 800" cc="gl" country="Greenland (Denmark)" operator="TELE Greenland A/S" status="Operational" + 02 bands="" cc="gl" country="Greenland (Denmark)" operator="inu:it a/s" status="" 00-99 292 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="PRIMA" cc="sm" country="San Marino" operator="San Marino Telecom" status="Operational" @@ -734,7 +767,7 @@ 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Tušmobil" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" 00-99 294 - 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile MK" cc="mk" country="Macedonia" operator="T-Mobile Macedonia" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom.mk" cc="mk" country="Macedonia" operator="Makedonski Telekom" status="Operational" 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="ONE" cc="mk" country="Macedonia" operator="One" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vip MK" cc="mk" country="Macedonia" operator="VIP Operator" status="Operational" 10 bands="" cc="mk" country="Macedonia" operator="WTI Macedonia" status="" @@ -742,10 +775,11 @@ 00-99 295 01 bands="GSM 900 / GSM 1800" brand="Swisscom" cc="li" country="Liechtenstein" operator="Swisscom Schweiz AG" status="Operational" - 02 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange" cc="li" country="Liechtenstein" operator="Orange Liechtenstein AG" status="Operational" + 02 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="7acht" cc="li" country="Liechtenstein" operator="Salt Liechtenstein AG" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="FL1" cc="li" country="Liechtenstein" operator="Telecom Liechtenstein AG" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cubic Telecom" cc="li" country="Liechtenstein" operator="Cubic Telecom AG" status="Operational" 07 bands="" cc="li" country="Liechtenstein" operator="First Mobile AG" status="" + 09 bands="MVNO" cc="li" country="Liechtenstein" operator="EMnify GmbH" status="" 77 bands="GSM 900" brand="Alpmobil" cc="li" country="Liechtenstein" operator="Alpcom AG" status="Not operational" 00-99 297 @@ -754,7 +788,7 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="m:tel CG" cc="me" country="Montenegro" operator="MTEL CG" status="Operational" 00-99 302 - 220 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="Telus Mobility, Koodo Mobile" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" + 220 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="Telus Mobility, Koodo Mobile, Public Mobile" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 221 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" 222 bands="" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="" 250 bands="" brand="ALO" cc="ca" country="Canada" operator="ALO Mobile Inc." status="" @@ -769,7 +803,7 @@ 380 bands="UMTS 850 / UMTS 1900" brand="Keewaytinook Mobile" cc="ca" country="Canada" operator="Keewaytinook Okimakanak Mobile" status="Operational" 390 bands="" brand="DMTS" cc="ca" country="Canada" operator="Dryden Mobility" status="Not operational" 480 bands="" brand="SSi Connexions" cc="ca" country="Canada" operator="SSi Connexions" status="" - 490 bands="UMTS 1700" brand="WIND Mobile" cc="ca" country="Canada" operator="Mid-Bowline Holdings Corp." status="Operational" + 490 bands="UMTS 1700" brand="Wind Mobile" cc="ca" country="Canada" operator="Mid-Bowline Holdings Corp." status="Operational" 500 bands="UMTS 1700" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="Operational" 510 bands="UMTS 1700" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="Operational" 520 bands="" brand="Videotron" cc="ca" country="Canada" operator="Videotron" status="" @@ -788,7 +822,7 @@ 657 bands="CDMA 800 / CDMA 1900" brand="Telus" cc="ca" country="Canada" operator="Telus Mobility" status="Operational" 660 bands="UMTS 850 / UMTS 1900 / LTE 1700" brand="MTS" cc="ca" country="Canada" operator="MTS Mobility" status="Operational" 670 bands="" brand="CityTel Mobility" cc="ca" country="Canada" operator="CityWest" status="" - 680 bands="CDMA 850 / TDD-LTE 2600" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" + 680 bands="CDMA 850 / TD-LTE 2600" brand="SaskTel" cc="ca" country="Canada" operator="SaskTel Mobility" status="Operational" 690 bands="UMTS 850 / UMTS 1900" brand="Bell" cc="ca" country="Canada" operator="Bell Mobility" status="Operational" 701 bands="CDMA2000" cc="ca" country="Canada" operator="MB Tel Mobility" status="Operational" 702 bands="CDMA2000" cc="ca" country="Canada" operator="MT&T Mobility (Aliant)" status="Operational" @@ -816,65 +850,67 @@ 004 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 005 bands="CDMA2000 850 / CDMA2000 1900" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 006 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" - 010 bands="" cc="us" country="United States of America" operator="MCI" status="Not operational" - 012 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" - 013 bands="" brand="MobileTel" cc="us" country="United States of America" status="" - 014 bands="" cc="us" country="United States of America" operator="Testing" status="Operational" - 016 bands="CDMA2000 1900 / CDMA2000 1700 / CDMA2000 2100" brand="Cricket Communications" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" - 017 bands="" cc="us" country="United States of America" operator="North Sight Communications Inc." status="Operational" - 020 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Union Telephone Company" status="Operational" - 026 bands="GSM 1900 / UMTS 1700 / UMTS 1900" brand="T-Mobile" cc="us" country="United States of America" status="Operational" + 010 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 012 bands="LTE 700 / LTE 1700 / LTE 1900" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" + 013 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 014 bands="" cc="us" country="United States of America" status="" + 015 bands="iDEN" brand="Southern LINC" cc="us" country="United States of America" operator="Southern Communications" status="" + 016 bands="CDMA2000 1900 / CDMA2000 1700" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Operational" + 017 bands="iDEN" brand="ProxTel" cc="us" country="United States of America" operator="North Sight Communications Inc." status="" + 020 bands="GSM 850 / GSM 1900 / UMTS" brand="Union Wireless" cc="us" country="United States of America" operator="Union Telephone Company" status="Operational" 030 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 032 bands="CDMA 1900 / LTE 700" brand="IT&E Wireless" cc="gu" country="Guam (United States of America)" operator="IT&E Overseas, Inc" status="Operational" - 033 bands="" cc="gu" country="Guam (United States of America)" operator="Guam Telephone Authority" status="" - 034 bands="" brand="Airpeak" cc="us" country="United States of America" status="Operational" - 040 bands="GSM 1900" brand="Concho" cc="us" country="United States of America" operator="Concho Cellular Telephone Co., Inc." status="Operational" - 046 bands="GSM 1900" brand="SIMMETRY" cc="us" country="United States of America" operator="TMP Corp" status="Operational" - 053 bands="CDMA2000 1900." cc="us" country="United States of America" operator="Virgin Mobile US" status="Operational" + 032 bands="CDMA 1900 / GSM 1900 / LTE 700" brand="IT&E Wireless" cc="us" country="United States of America" operator="IT&E Overseas, Inc" status="Operational" + 033 bands="" cc="us" country="United States of America" operator="Guam Telephone Authority" status="" + 034 bands="iDEN" brand="Airpeak" cc="us" country="United States of America" operator="Airpeak" status="Operational" + 035 bands="" brand="ETEX Wireless" cc="us" country="United States of America" operator="ETEX Communications, LP" status="" + 040 bands="CDMA" brand="MTA" cc="us" country="United States of America" operator="Matanuska Telephone Association, Inc." status="Operational" + 050 bands="CDMA" brand="GCI" cc="us" country="United States of America" operator="Alaska Communications" status="Operational" + 053 bands="CDMA2000 1900" cc="us" country="United States of America" operator="Virgin Mobile US" status="Operational" 054 bands="" cc="us" country="United States of America" operator="Alltel US" status="Operational" - 060 bands="" cc="us" country="United States of America" operator="Consolidated Telcom" status="Operational" - 066 bands="GSM AND CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" - 070 bands="" cc="us" country="United States of America" operator="Highland Cellular" status="Operational" - 080 bands="GSM 1900" brand="Corr" cc="us" country="United States of America" operator="Corr Wireless Communications LLC" status="Operational" - 090 bands="CDMA2000 1900 / CDMA2000 1700 / CDMA2000 2100" brand="Cricket Communications" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" - 100 bands="GSM 850" brand="Plateau Wireless" cc="us" country="United States of America" operator="New Mexico RSA 4 East Ltd. Partnership" status="Operational" - 110 bands="GSM 850" brand="PTI Pacifica" cc="us" country="United States of America" operator="PTI Pacifica Inc." status="Operational" - 120 bands="CDMA2000 1900" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" - 130 bands="CDMA2000 1900" brand="Carolina Wireless" cc="us" country="United States of America" operator="Carolina Wireless" status="Operational" - 140 bands="GSM 850 / GSM 1900" brand="mPulse" cc="gu" country="Guam (United States of America)" operator="GTA Wireless" status="Operational" - 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="Cricket Wireless" status="Operational" + 060 bands="" brand="CTEL" cc="us" country="United States of America" operator="Consolidated Telcom" status="" + 066 bands="GSM / CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 070 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" + 080 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" + 090 bands="GSM 1900" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Operational" + 100 bands="GSM 850 / UMTS 850 / UMTS AWS" brand="Plateau Wireless" cc="us" country="United States of America" operator="New Mexico RSA 4 East LP" status="Operational" + 110 bands="CDMA / GSM 850 / LTE 700" brand="IT&E Wireless" cc="us" country="United States of America" operator="PTI Pacifica Inc." status="Operational" + 120 bands="CDMA2000 1900 / LTE 850 / LTE 1900" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" + 130 bands="CDMA2000 1900" brand="Carolina West Wireless" cc="us" country="United States of America" operator="Carolina West Wireless" status="Operational" + 140 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="GTA Wireless" cc="us" country="United States of America" operator="Teleguam Holdings, LLC" status="Operational" + 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="Cricket Wireless" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 160 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" operator="T-Mobile US" status="Operational" 170 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 180 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="West Central" cc="us" country="United States of America" operator="West Central Wireless" status="Operational" - 190 bands="GSM 850" brand="Dutch Harbor" cc="us" country="United States of America" operator="Alaska Wireless Communications, LLC" status="Operational" + 190 bands="GSM 850" brand="GCI" cc="us" country="United States of America" operator="Alaska Wireless Communications, LLC" status="Operational" 200 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 210 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 220 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 230 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 240 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 250 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" - 260 bands="GSM 1900 / UMTS 1900 / UMTS 1700/2100 (AWS) / Band 12 700 MHz" brand="T-Mobile USA" cc="us" country="United States of America" operator="T-Mobile USA" status="Operational" + 260 bands="GSM 1900 / UMTS 1900 / UMTS 1700 / LTE 700 / LTE 1900 / LTE 1700" brand="T-Mobile USA" cc="us" country="United States of America" operator="T-Mobile USA" status="Operational" 270 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 280 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not Operational" - 290 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" - 300 bands="GSM 1900" brand="Big Sky Mobile" cc="us" country="United States of America" operator="Smart Call (Truphone)" status="Operational" + 290 bands="GSM 1900" brand="nep" cc="us" country="United States of America" operator="NEP Cellcorp Inc." status="Operational" + 300 bands="GSM 1900" brand="Big Sky Mobile" cc="us" country="United States of America" operator="iSmart Mobile, LLC" status="Operational" 310 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 311 bands="GSM 1900" cc="us" country="United States of America" operator="Farmers Wireless" status="Operational" 320 bands="GSM 850 / GSM 1900" brand="Cellular One" cc="us" country="United States of America" operator="Smith Bagley, Inc." status="Operational" - 330 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" - 340 bands="GSM 1900" brand="Westlink" cc="us" country="United States of America" operator="Westlink Communications" status="Operational" - 350 bands="GSM 1900" cc="us" country="United States of America" operator="Carolina Phone" status="Not operational" - 370 bands="CDMA 850" brand="Docomo" cc="gu" country="Guam (United States of America)" operator="NTT Docomo Pacific" status="Not operational" + 330 bands="CDMA" brand="Alltel" cc="us" country="United States of America" operator="Allied Wireless Communications Corporation (AWCC)" status="Not operational" + 340 bands="GSM 1900" brand="Westlink Communications" cc="us" country="United States of America" operator="High Plains Midwest LLC" status="Not operational" + 350 bands="CDMA" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 360 bands="CDMA" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" + 370 bands="GSM 1900 / UMTS 850 / LTE 700" brand="Docomo" cc="us" country="United States of America" operator="NTT Docomo Pacific" status="Operational" 380 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" 390 bands="GSM 850" brand="Cellular One of East Texas" cc="us" country="United States of America" operator="TX-11 Acquisition, LLC" status="Operational" 400 bands="GSM 1900" brand="i CAN_GSM" cc="us" country="United States of America" operator="Wave Runner LLC (Guam)" status="Operational" 410 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 420 bands="GSM 1900 / UMTS AWS" brand="Cincinnati Bell" cc="us" country="United States of America" operator="Cincinnati Bell Wireless" status="Operational" + 420 bands="GSM 1900 / UMTS 1700" brand="Cincinnati Bell" cc="us" country="United States of America" operator="Cincinnati Bell Wireless" status="Not operational" 430 bands="GSM 1900" cc="us" country="United States of America" operator="Alaska Digitel" status="Operational" 440 bands="GSM 1900" brand="Cellular One" cc="us" country="United States of America" status="" 450 bands="GSM 850 / GSM 1900" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" - 460 bands="GSM 1900" brand="Simmetry" cc="us" country="United States of America" operator="TMP Corporation" status="Operational" - 470 bands="CDMA2000 1900" brand="nTelos" cc="us" country="United States of America" operator="NTT Docomo Pacific" status="Operational" + 460 bands="GSM 1900" brand="Simmetry" cc="us" country="United States of America" operator="TMP Corporation" status="Not operational" + 470 bands="CDMA2000 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Communications, Inc." status="Operational" 480 bands="" cc="us" country="United States of America" operator="Choice Phone" status="Operational" 490 bands="GSM 850 / GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Operational" 500 bands="CDMA2000 800 / CDMA2000 1900" brand="Alltel" cc="us" country="United States of America" status="Operational" @@ -883,24 +919,24 @@ 530 bands="" cc="us" country="United States of America" operator="West Virginia Wireless" status="Operational" 540 bands="GSM 1900" brand="Oklahoma Western" cc="us" country="United States of America" operator="Oklahoma Western Telephone Company" status="Operational" 560 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 570 bands="GSM 850" brand="Cellular One" cc="us" country="United States of America" operator="TX-10, LLC and Central Louisiana Cellular, LLC" status="Operational" + 570 bands="GSM 850 / LTE 700" brand="Cellular One" cc="us" country="United States of America" operator="TX-10, LLC and Central Louisiana Cellular, LLC (MTPCS)" status="Operational" 580 bands="" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" 59 bands="CDMA" brand="Cellular One" cc="bm" country="Bermuda" status="Operational" 590 bands="GSM 850 / GSM 1900" brand="Alltel" cc="us" country="United States of America" operator="Alltel Communications Inc" status="Operational" - 600 bands="" cc="us" country="United States of America" operator="New Cell Inc. dba Cellcom" status="Inactive" + 600 bands="CDMA 850 / CDMA 1900 / LTE 700" brand="Cellcom" cc="us" country="United States of America" operator="New-Cell Inc." status="Operational" 610 bands="GSM 1900" brand="Epic Touch" cc="us" country="United States of America" operator="Elkhart Telephone Co." status="Operational" 620 bands="GSM 1900" brand="Coleman County Telecom" cc="us" country="United States of America" operator="Coleman County Telecommunications" status="Operational" - 630 bands="GSM 1900" brand="AmeriLink PCS" cc="us" country="United States of America" operator="Choice Wireless" status="Operational" + 630 bands="LTE 700" brand="miSpot" cc="us" country="United States of America" operator="Agri-Valley Communications" status="Not operational" 640 bands="GSM 1900" brand="AirFire" cc="us" country="United States of America" operator="Airadigm Communications" status="Not Operational" - 650 bands="GSM 850" brand="Jasper" cc="us" country="United States of America" operator="Jasper Wireless, inc" status="Operational" + 650 bands="GSM 850" brand="Jasper" cc="us" country="United States of America" operator="Jasper Wireless, Inc." status="Operational" 660 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" 670 bands="" brand="Northstar" cc="us" country="United States of America" status="Operational" 680 bands="GSM 850 / GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 690 bands="GSM 1900" brand="Limitless Mobile" cc="us" country="United States of America" operator="Limitless Mobile, LLC" status="Operational" - 730 bands="" brand="SeaMobile" cc="us" country="United States of America" status="Operational" + 730 bands="" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="" 740 bands="" brand="Convey" cc="us" country="United States of America" operator="Convey Communications Inc." status="Operational" - 750 bands="CDMA2000 850 / CDMA2000 1900 / LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="Appalachian Wireless" status="Operational" - 760 bands="" brand="Panhandle" cc="us" country="United States of America" operator="Panhandle Telecommunications Systems Inc." status="Operational" + 750 bands="CDMA2000 850 / CDMA2000 1900" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" + 760 bands="" cc="us" country="United States of America" operator="Lynch 3G Communications Corporation" status="Not operational" 770 bands="GSM 1900" brand="i wireless" cc="us" country="United States of America" operator="Iowa Wireless Services" status="Operational" 780 bands="GSM 1900" cc="us" country="United States of America" operator="Airlink PCS" status="Not operational" 790 bands="GSM 1900" brand="PinPoint" cc="us" country="United States of America" operator="PinPoint Communications" status="Operational" @@ -908,17 +944,19 @@ 830 bands="GSM 850" brand="Caprock" cc="us" country="United States of America" operator="Caprock Cellular" status="Operational" 840 bands="GSM 1900" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" 850 bands="CDMA2000 850 / CDMA2000 1900 / GSM 850 / GSM 1900" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" + 860 bands="CDMA" brand="Five Star Wireless" cc="us" country="United States of America" operator="TX RSA 15B2, LP" status="Operational" 870 bands="GSM 850" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Operational" 880 bands="GSM 850" brand="DTC Wireless" cc="us" country="United States of America" operator="Advantage Cellular Systems" status="Operational" 890 bands="GSM 850 / GSM 1900" brand="Unicel" cc="us" country="United States of America" operator="Rural Cellular Corporation" status="Operational" - 900 bands="CDMA2000 850 / CDMA2000 1900" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Mid-Rivers Communications" status="Operational" + 900 bands="CDMA2000 850 / CDMA2000 1900" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Cable & Communications Corporation" status="Operational" 910 bands="GSM 850" brand="First Cellular" cc="us" country="United States of America" operator="First Cellular of Southern Illinois" status="Operational" + 930 bands="CDMA" cc="us" country="United States of America" operator="Copper Valley Wireless" status="Operational" 940 bands="" cc="us" country="United States of America" operator="Iris Wireless LLC" status="Operational" 950 bands="GSM 850" brand="XIT Wireless" cc="us" country="United States of America" operator="Texas RSA 1 dba XIT Cellular" status="Operational" - 960 bands="" brand="Plateau Wireless" cc="us" country="United States of America" status="Operational" + 960 bands="CDMA / LTE 700" cc="us" country="United States of America" operator="Strata Networks" status="Operational" 970 bands="Satellite" brand="Telemedicine Wireless" cc="us" country="United States of America" operator="Telemedicine Wireless (USA) Telecommunications,Inc" status="Operational" - 980 bands="GSM 1900" brand="Akiba Telecommunications, Inc." cc="us" country="United States of America" operator="AT&T (Antarctica, South Pole) Worldwide, Inc." status="Operational" - 990 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" + 980 bands="CDMA / LTE 700" brand="Peoples Telephone Cooperative, Inc." cc="us" country="United States of America" operator="Texas RSA 7B3" status="Operational" + 990 bands="LTE 700" brand="Evolve Broadband" cc="us" country="United States of America" operator="Worldcall Interconnect Inc." status="Operational" 000-999 311 000 bands="CDMA2000 850 / CDMA2000 1900" cc="us" country="United States of America" operator="Mid-Tex Cellular" status="Operational" @@ -927,7 +965,7 @@ 020 bands="GSM 850" cc="us" country="United States of America" operator="Missouri RSA 5 Partnership" status="Operational" 030 bands="GSM 1900" cc="us" country="United States of America" operator="Indigo Wireless" status="Operational" 040 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" - 050 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Wikes Cellular" status="Operational" + 050 bands="CDMA" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" 060 bands="GSM 850 / GSM 1900" brand="Farmers Cellular" cc="us" country="United States of America" operator="Farmers Cellular Telephone" status="Operational" 070 bands="GSM 850" brand="Easterbrooke" cc="us" country="United States of America" operator="Easterbrooke Cellular Corporation" status="Operational" 080 bands="GSM 850 / LTE" brand="Pine Cellular" cc="us" country="United States of America" operator="Pine Telephone Company" status="Operational" @@ -936,52 +974,76 @@ 110 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" 120 bands="" cc="us" country="United States of America" operator="Choice Phone" status="Operational" 130 bands="GSM 850" cc="us" country="United States of America" operator="Cell One Amarillo" status="Operational" - 140 bands="" brand="Sprocket" cc="us" country="United States of America" operator="MBO Wireless" status="Operational" + 140 bands="CDMA" brand="Sprocket Wireless" cc="us" country="United States of America" operator="Cross Telephone / MBO Wireless" status="Operational" 150 bands="GSM 850" cc="us" country="United States of America" operator="Wilkes Cellular" status="Operational" 160 bands="" cc="us" country="United States of America" operator="Endless Mountains Wireless" status="Operational" 170 bands="GSM 850" brand="PetroCom" cc="us" country="United States of America" operator="Broadpoint Inc" status="Operational" 180 bands="GSM 850 / UMTS 850 / UMTS 1900" cc="us" country="United States of America" operator="Cingular Wireless" status="Not operational" 190 bands="" cc="us" country="United States of America" operator="Cellular Properties" status="" 210 bands="GSM 1900 / UMTS 2100" cc="us" country="United States of America" operator="Emery Telcom Wireless" status="Operational" - 220 brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" - 230 bands="" brand="C Spire Wireless" cc="us" country="United States of America" operator="C Spire Wireless" status="Operational" - 250 bands="GSM 1900" brand="i CAN_GSM" cc="gu" country="Guam (United States of America)" operator="Wave Runner LLC" status="Not operational" + 220 bands="CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 230 bands="CDMA 850 / CDMA 1900 / LTE 1900 / LTE 1700" brand="C Spire Wireless" cc="us" country="United States of America" operator="Cellular South Inc." status="Operational" + 250 bands="iDEN / GSM 1900 / LTE 700" brand="iConnect" cc="gu" country="Guam (United States of America)" operator="Wave Runner LLC / Choice Phone LLC" status="Operational" 330 bands="" brand="Bug Tussel Wireless" cc="us" country="United States of America" operator="Bug Tussel Wireless" status="Operational" - 360 bands="UMTS AWS" cc="us" country="United States of America" operator="Stelera Wireless" status="Not operational" - 370 bands="LTE AWS" brand="GCI Wireless" cc="us" country="United States of America" operator="General Communication Inc." status="Operational" - 480 bands="LTE 700 MHz C Block (4G LTE Network)" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" + 360 bands="UMTS 1700" cc="us" country="United States of America" operator="Stelera Wireless" status="Not operational" + 370 bands="LTE 1700" brand="GCI Wireless" cc="us" country="United States of America" operator="General Communication Inc." status="Operational" + 410 bands="LTE 700" brand="Chat Mobility" cc="us" country="United States of America" operator="Iowa RSA No. 2 LP" status="Operational" + 420 bands="CDMA / LTE 700" brand="NorthwestCell" cc="us" country="United States of America" operator="Northwest Missouri Cellular LP" status="Operational" + 450 bands="GSM 1900 / LTE 700" brand="PTCI" cc="us" country="United States of America" operator="Panhandle Telecommunication Systems Inc." status="Operational" + 480 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 481 cc="us" country="United States of America" - 490 bands="TDD-LTE (Band 41)" brand="Sprint Corporation" cc="us" country="United States of America" operator="Sprint" status="Operational" - 500 bands="LTE 700 / LTE AWS" cc="us" country="United States of America" operator="Mosaic Telecom" status="Operational" - 530 bands="GSM 1900 / LTE 1900" brand="PTCI" cc="us" country="United States of America" operator="Panhandle Wireless" status="Operational" - 570 bands="UMTS AWS / LTE AWS" cc="us" country="United States of America" operator="BendBroadband" status="Not operational" - 580 brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" - 650 bands="CDMA / LTE" brand="United Wireless" cc="us" country="United States of America" operator="United Wireless" status="Operational" - 660 bands="CDMA2000 1900 / CDMA 2000 LTE/AWS 1700" brand="metroPCS" cc="us" country="United States of America" operator="metroPCS" status="Operational" + 490 bands="LTE 850 / LTE 1900 / TD-LTE 2500" brand="Sprint Corporation" cc="us" country="United States of America" operator="Sprint" status="Operational" + 500 bands="UMTS / LTE 700 / LTE 1700" cc="us" country="United States of America" operator="Mosaic Telecom" status="Operational" + 530 bands="" cc="us" country="United States of America" operator="Newcore Wireless" status="Operational" + 570 bands="UMTS 1700 / LTE 1700" cc="us" country="United States of America" operator="BendBroadband" status="Not operational" + 580 bands="LTE 700 / LTE 850" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 630 bands="" brand="C Spire Wireless" cc="us" country="United States of America" operator="Cellular South Inc." status="" + 640 bands="LTE 700" brand="Rock Wireless" cc="us" country="United States of America" operator="Standing Rock Telecommunications" status="Operational" + 650 bands="CDMA / LTE 700 / WiMAX 3700" brand="United Wireless" cc="us" country="United States of America" operator="United Wireless" status="Operational" + 660 bands="CDMA2000 1900 / CDMA 2000 1700 / LTE 1700" brand="metroPCS" cc="us" country="United States of America" operator="metroPCS" status="Operational" 750 bands="LTE" cc="us" country="United States of America" operator="NetAmerica Alliance" status="Operational" 810 bands="CDMA / LTE 700" brand="Bluegrass Wireless" cc="us" country="United States of America" operator="Bluegrass Wireless" status="Operational" + 830 bands="LTE 700" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" 870 bands="MVNO" brand="Boost" cc="us" country="United States of America" operator="Boost Mobile" status="Operational" + 910 bands="LTE" brand="Mobile Nation" cc="us" country="United States of America" operator="SI Wireless LLC" status="Operational" 930 bands="LTE 700" cc="us" country="United States of America" operator="Syringa Wireless" status="Operational" - 950 bands="LTE" brand="ETC" cc="us" country="United States of America" operator="Enhanced Telecommmunications Corp. (Sunman Telecom)" status="Operational" + 950 bands="LTE 700" brand="ETC" cc="us" country="United States of America" operator="Enhanced Telecommmunications Corp. (Sunman Telecom)" status="Operational" 960 bands="MVNO" brand="Lycamobile" cc="us" country="United States of America" operator="Lyca Technology Solutions" status="Operational" - 970 bands="LTE AWS 1700" brand="Big River Broadband" cc="us" country="United States of America" operator="Big River Broadband, LLC" status="Operational" - 990 bands="LTE 700" cc="us" country="United States of America" operator="VTel Wireless" status="Operational" + 970 bands="LTE 1700" brand="Big River Broadband" cc="us" country="United States of America" operator="Big River Broadband, LLC" status="Operational" + 990 bands="LTE 700 / LTE 1700" cc="us" country="United States of America" operator="VTel Wireless" status="Operational" 000-999 312 + 020 bands="LTE 700" cc="us" country="United States of America" operator="Infrastructure Networks, LLC" status="Operational" + 030 bands="LTE 700" brand="Sprocket Wireless" cc="us" country="United States of America" operator="Cross Telephone / MBO Wireless" status="Operational" + 040 bands="LTE 700" cc="us" country="United States of America" operator="Custer Telephone Co-op (CTCI)" status="Operational" 050 bands="LTE 700" cc="us" country="United States of America" operator="Fuego Wireless" status="Operational" 070 bands="LTE 700" cc="us" country="United States of America" operator="Adams Networks Inc" status="Operational" - 080 bands="LTE" brand="SyncSouth" cc="us" country="United States of America" operator="South Georgia Regional Information Technology Authority" status="Operational" + 080 bands="UMTS-TDD 700" brand="SyncSouth" cc="us" country="United States of America" operator="South Georgia Regional Information Technology Authority" status="Operational" + 120 bands="LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" + 130 bands="LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" + 180 bands="" cc="us" country="United States of America" operator="Limiteless Mobile LLC" status="" 220 bands="LTE 700" cc="us" country="United States of America" operator="Chariton Valley Telephone" status="Operational" + 270 bands="LTE 700" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" + 280 bands="LTE 700" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" 330 bands="LTE 700" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular" status="Operational" + 340 bands="LTE 700" brand="MTA" cc="us" country="United States of America" operator="Matanuska Telephone Association, Inc." status="Operational" 350 bands="LTE" cc="us" country="United States of America" operator="Triangle Communications" status="Operational" 370 bands="LTE" cc="us" country="United States of America" operator="Choice Wireless" status="Operational" + 380 bands="LTE 700" cc="us" country="United States of America" operator="Copper Valley Wireless" status="Operational" + 400 bands="LTE 700" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Mid-Rivers Telephone Cooperative" status="Operational" 420 bands="LTE 700" cc="us" country="United States of America" operator="Nex-Tech Wireless" status="Operational" + 460 bands="LTE 700" cc="us" country="United States of America" operator="Ketchikan Public Utilities (KPU)" status="Operational" + 470 bands="LTE 700" brand="Carolina West Wireless" cc="us" country="United States of America" operator="Carolina West Wireless" status="Operational" 530 bands="" cc="us" country="United States of America" operator="Sprint Spectrum" status="Operational" - 590 bands="Band 7 FDD LTE 2600 MHz" brand="NMU" cc="us" country="United States of America" operator="Northern Michigan University" status="Operational" - 610 bands="" cc="us" country="United States of America" operator="nTelos" status="" + 590 bands="LTE 2600" brand="NMU" cc="us" country="United States of America" operator="Northern Michigan University" status="Operational" + 610 bands="LTE 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Licenses, Inc." status="Operational" + 660 bands="LTE 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Wireless" status="Operational" + 780 bands="TD-LTE 2500" cc="us" country="United States of America" operator="Redzone Wireless" status="Operational" + 860 bands="CDMA / LTE 1900 / LTE 1700" brand="ClearTalk" cc="us" country="United States of America" operator="Flat Wireless, LLC" status="Operational" + 900 bands="CDMA / LTE 1900 / LTE 1700" brand="ClearTalk" cc="us" country="United States of America" operator="Flat West Wireless, LLC" status="Operational" 000-999 313 - 100 bands="LTE" brand="FirstNet" cc="us" country="United States of America" operator="700 MHz Public Safety Broadband" status="" + 100 bands="LTE 700" brand="FirstNet" cc="us" country="United States of America" operator="700 MHz Public Safety Broadband" status="" 101 cc="us" country="United States of America" 000-999 316 @@ -1014,14 +1076,14 @@ 180 bands="GSM 850 / GSM 1900 / UMTS 850" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" 000-999 340 - 01 bands="GSM 900" brand="Orange" cc="mq" country="Martinique (France)" operator="Orange Caraïbe Mobiles" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Only" cc="mq" country="Martinique (France)" operator="Outremer Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Telcell" cc="gp" country="Guadeloupe (France)" operator="Saint Martin et Saint Barthelemy Telcell Sarl" status="Operational" - 08 bands="GSM 900 / GSM 1800" brand="Dauphin" cc="gp" country="Guadeloupe (France)" operator="Dauphin Telecom" status="Operational" - 10 bands="" cc="gp" country="Guadeloupe (France)" operator="Guadeloupe Téléphone Mobile" status="" - 11 bands="" cc="gf" country="French Guiana (France)" operator="Guyane Téléphone Mobile" status="" - 12 bands="" cc="mq" country="Martinique (France)" operator="Martinique Téléphone Mobile" status="" - 20 bands="GSM 900" brand="Digicel" cc="mq" country="Martinique (France)" operator="DIGICEL Antilles Française Guyane" status="Operational" + 01 bands="GSM 900 / UMTS 2100" brand="Orange" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Orange Caraïbe Mobiles" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS" brand="Only" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Outremer Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS" brand="Chippie" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="UTS Caraïbe" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS" brand="Dauphin" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Dauphin Telecom" status="Operational" + 10 bands="" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Guadeloupe Téléphone Mobile" status="Not operational" + 11 bands="" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Guyane Téléphone Mobile" status="Not operational" + 12 bands="" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Martinique Téléphone Mobile" status="Not operational" + 20 bands="GSM 900 / UMTS 2100" brand="Digicel" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="DIGICEL Antilles Française Guyane" status="Operational" 00-99 342 600 bands="GSM 1900 / UMTS" brand="LIME" cc="bb" country="Barbados" operator="LIME (formerly known as Cable & Wireless)" status="Operational" @@ -1031,12 +1093,12 @@ 344 030 bands="GSM 1900" brand="APUA" cc="ag" country="Antigua and Barbuda" operator="Antigua Public Utilities Authority" status="Operational" 050 bands="GSM 900 / GSM 1900 / UMTS 850 / LTE 700" brand="Digicel" cc="ag" country="Antigua and Barbuda" operator="Antigua Wireless Ventures Limited" status="Operational" - 920 bands="GSM 850 / GSM 1800 / GSM 1900" brand="LIME" cc="ag" country="Antigua and Barbuda" operator="Cable & Wireless Caribbean Cellular (Antigua) Limited" status="Operational" + 920 bands="GSM 850 / GSM 1800 / GSM 1900 / UMTS / LTE 1700" brand="LIME" cc="ag" country="Antigua and Barbuda" operator="Cable & Wireless Caribbean Cellular (Antigua) Limited" status="Operational" 930 bands="" cc="ag" country="Antigua and Barbuda" operator="AT&T Wireless" status="" 000-999 346 - 050 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Digicel" cc="ky" country="Cayman Islands (United Kingdom)" operator="Digicel Cayman Ltd." status="Operational" - 140 bands="GSM 850 / GSM 1900" brand="LIME" cc="ky" country="Cayman Islands (United Kingdom)" operator="Cable & Wireless (Cayman Islands) Limited" status="Operational" + 050 bands="GSM 900 / GSM 1800 / UMTS / LTE 1800" brand="Digicel" cc="ky" country="Cayman Islands (United Kingdom)" operator="Digicel Cayman Ltd." status="Operational" + 140 bands="GSM 850 / GSM 1900 / UMTS / LTE 700" brand="LIME" cc="ky" country="Cayman Islands (United Kingdom)" operator="Cable & Wireless (Cayman Islands) Limited" status="Operational" 000-999 348 170 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="LIME" cc="vg" country="British Virgin Islands" operator="Cable & Wireless" status="Operational" @@ -1071,41 +1133,51 @@ 110 bands="GSM 850" brand="Lime" cc="vc" country="Saint Vincent and the Grenadines" operator="Cable & Wireless (St. Vincent & the Grenadines) Ltd" status="Operational" 000-999 362 - 51 bands="GSM 900" brand="Telcell" cc="an" country="Former Netherlands Antilles (Kingdom of the Netherlands)" operator="Telcell N.V." status="Operational" - 69 bands="GSM 900 / GSM 1800" brand="Digicel" cc="an" country="Former Netherlands Antilles (Kingdom of the Netherlands)" operator="Curaçao Telecom N.V." status="Operational" - 91 bands="GSM 900" brand="UTS" cc="an" country="Former Netherlands Antilles (Kingdom of the Netherlands)" operator="Setel N.V." status="Operational" - 94 bands="TDMA PCS" brand="Bayòs" cc="an" country="Former Netherlands Antilles (Kingdom of the Netherlands)" operator="Bòbò Frus N.V." status="Operational" - 95 bands="CDMA2000 850" brand="MIO" cc="an" country="Former Netherlands Antilles (Kingdom of the Netherlands)" operator="E.O.C.G. Wireless" status="Operational" + 31 bands="GSM" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Eutel N.V." status="" + 33 bands="GSM" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="WICC N.V." status="" + 51 bands="GSM 900 / UMTS 2100" brand="Telcell" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Telcell N.V." status="Operational" + 54 bands="GSM 900 / GSM 1800" brand="ECC" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="East Caribbean Cellular" status="Operational" + 59 bands="GSM 900 / GSM 1800" brand="Chippie" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="United Telecommunication Service N.V. (UTS)" status="Operational" + 60 bands="UMTS 2100" brand="Chippie" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="United Telecommunication Service N.V. (UTS)" status="Operational" + 63 bands="" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="CSC N.V." status="" + 68 bands="UMTS 2100" brand="Digicel" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Curaçao Telecom N.V." status="Operational" + 69 bands="GSM 900 / GSM 1800" brand="Digicel" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Curaçao Telecom N.V." status="Operational" + 74 bands="" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="PCS N.V." status="" + 76 bands="GSM 900 / UMTS" brand="Digicel" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Antiliano Por N.V." status="Operational" + 78 bands="UMTS 900 / LTE 1800" brand="Telbo" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Telefonia Bonairiano N.V." status="Operational" + 91 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Chippie" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="United Telecommunication Service N.V. (UTS)" status="Operational" + 94 bands="TDMA PCS" brand="Bayòs" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Bòbò Frus N.V." status="Operational" + 95 bands="CDMA2000 850" brand="MIO" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="E.O.C.G. Wireless" status="Not operational" 00-99 363 01 bands="GSM 900 / GSM 1800 / GSM 1900 / UMTS 2100 / LTE 1800 / TDMA 800" brand="SETAR" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Servicio di Telecomunicacion di Aruba" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Digicel Aruba" status="Operational" 00-99 364 - 39 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="BTC" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd (BaTelCo)" status="Operational" - 00-99 + 390 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="BTC" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd (BaTelCo)" status="Operational" + 000-999 365 010 bands="" cc="ai" country="Anguilla" operator="Weblinks Limited" status="Operational" 840 bands="GSM 850 / UMTS" brand="LIME" cc="ai" country="Anguilla" operator="Cable & Wireless" status="Operational" 000-999 366 - 020 bands="GSM 900 / GSM 1900" brand="Digicel" cc="dm" country="Dominica" operator="Digicel Group Limited" status="Operational" - 110 bands="GSM 850" cc="dm" country="Dominica" operator="Cable & Wireless" status="Operational" + 020 bands="GSM 900 / GSM 1900 / UMTS" brand="Digicel" cc="dm" country="Dominica" operator="Digicel Group Limited" status="Operational" + 110 bands="GSM 850 / UMTS" brand="LIME" cc="dm" country="Dominica" operator="Cable & Wireless" status="Operational" 000-999 368 01 bands="GSM 900 / GSM 850" brand="CUBACEL" cc="cu" country="Cuba" operator="Empresa de Telecomunicaciones de Cuba, SA" status="Operational" 00-99 370 01 bands="GSM 900 / GSM 1800 / GSM 1900 / UMTS 900 / LTE 1800" brand="Orange" cc="do" country="Dominican Republic" operator="Orange Dominicana" status="Operational" - 02 bands="CDMA 1900 / GSM 850 / GSM 1900 / UMTS 850 / LTE AWS" brand="Claro" cc="do" country="Dominican Republic" operator="Compañía Dominicana de Teléfonos" status="Operational" + 02 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="Claro" cc="do" country="Dominican Republic" operator="Compañía Dominicana de Teléfonos" status="Operational" 03 bands="AMPS / IS-95A 800 / CDMA 1900 / LTE 1900" brand="Tricom" cc="do" country="Dominican Republic" operator="Tricom, S.A" status="Operational" 04 bands="CDMA 1900 / GSM 1900" brand="Viva" cc="do" country="Dominican Republic" operator="Trilogy Dominicana, S.A." status="Operational" - 05 bands="LTE-TDD 2600" brand="Wind" cc="do" country="Dominican Republic" operator="WIND Telecom, S.A" status="Operational" + 05 bands="TD-LTE 2600" brand="Wind" cc="do" country="Dominican Republic" operator="WIND Telecom, S.A" status="Operational" 00-99 372 01 bands="GSM 850" brand="Voila" cc="ht" country="Haiti" operator="Communication Cellulaire d'Haiti S.A." status="Operational" 02 bands="GSM 1800" brand="Digicel" cc="ht" country="Haiti" operator="Unigestion Holding S.A." status="Operational" - 03 bands="GSM 900" brand="Natcom" cc="ht" country="Haiti" operator="Telecommunication S.A." status="Operational" + 03 bands="GSM 900 / GSM 1800 / UTMS 2100" brand="Natcom" cc="ht" country="Haiti" operator="NATCOM S.A." status="Operational" 00-99 374 12 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="bmobile" cc="tt" country="Trinidad and Tobago" operator="TSTT" status="Operational" @@ -1119,10 +1191,11 @@ 000-999 400 01 bands="GSM 900 / GSM 1800/ UMTS 2100 / LTE 1800" brand="Azercell" cc="az" country="Azerbaijan" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Bakcell" cc="az" country="Azerbaijan" status="Operational" - 03 bands="CDMA" brand="FONEX" cc="az" country="Azerbaijan" operator="CATEL" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Nar Mobile" cc="az" country="Azerbaijan" operator="Azerfon" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Bakcell" cc="az" country="Azerbaijan" status="Operational" + 03 bands="CDMA 450" brand="FONEX" cc="az" country="Azerbaijan" operator="CATEL" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Nar Mobile" cc="az" country="Azerbaijan" operator="Azerfon" status="Operational" 05 bands="TETRA?" cc="az" country="Azerbaijan" operator="Special State Protection Service of the Republic of Azerbaijan" status="" + 06 bands="CDMA 800" brand="Naxtel" cc="az" country="Azerbaijan" operator="Nakhtel LLC" status="Operational" 00-99 401 01 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kz" country="Kazakhstan" operator="KaR-Tel LLP" status="Operational" @@ -1428,7 +1501,7 @@ 00-99 422 02 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Nawras" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900" brand="ooredoo" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" 04 bands="" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="" 00-99 424 @@ -1519,8 +1592,9 @@ 09 bands="GSM 900 / GSM 1800" brand="O!" cc="kg" country="Kyrgyzstan" operator="NurTelecom LLC" status="Operational" 00-99 438 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS (BARASH Communication)" cc="tm" country="Turkmenistan" operator="ES "MTS-Turkmenistan"" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS" cc="tm" country="Turkmenistan" operator="MTS Turkmenistan" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="TM-Cell" cc="tm" country="Turkmenistan" operator="Altyn Asyr" status="Operational" + 03 bands="CDMA 450" brand="AGTS CDMA" cc="tm" country="Turkmenistan" operator="AŞTU" status="Operational" 00-99 440 00 bands="UMTS 1700" brand="Y!Mobile" cc="jp" country="Japan" operator="EMOBILE Limited" status="Operational" @@ -1620,18 +1694,41 @@ 98 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" 99 bands="LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" 00-99 +441 + 40 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" + 41 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" + 42 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" + 43 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" + 44 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" + 45 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" + 50 brand="TU-KA" cc="jp" country="Japan" operator="KDDI" status="" + 51 brand="TU-KA" cc="jp" country="Japan" operator="KDDI" status="" + 61 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" + 62 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" + 63 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" + 64 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" + 65 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" + 70 brand="KDDI" cc="jp" country="Japan" operator="KDDI" status="" + 90 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 91 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 92 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 93 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 94 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 98 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 99 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 00-99 450 - 02 bands="CDMA2000 1700" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" + 02 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" 03 bands="CDMA2000 800" brand="Power 017" cc="kr" country="South Korea" operator="Shinsegi Telecom, Inc." status="Discontinued" - 04 bands="CDMA2000 1700" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" + 04 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" 05 bands="CDMA2000 800 / UMTS 2100 / LTE 850 1800 2100" brand="SKTelecom" cc="kr" country="South Korea" operator="SK Telecom" status="Operational" - 06 bands="CDMA2000 1700 / LTE 850 2100 2600" brand="LG U+" cc="kr" country="South Korea" operator="LG Telecom" status="Operational" + 06 bands="CDMA2000 1800 / LTE 850 2100 2600" brand="LG U+" cc="kr" country="South Korea" operator="LG Telecom" status="Operational" 08 bands="UMTS 2100 / LTE 900 1800 2100" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" - 11 bands="MVNO of SKTelecom" cc="kr" country="South Korea" operator="Korea Cable Telecom" status="Operational" + 11 bands="MVNO of SK Telecom" cc="kr" country="South Korea" operator="Korea Cable Telecom" status="Operational" 00-99 452 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MobiFone" cc="vn" country="Vietnam" operator="Vietnam Mobile Telecom Services Company" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vinaphone" cc="vn" country="Vietnam" operator="Vietnam Telecom Services Company" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 /UMTS 2100" brand="Vinaphone" cc="vn" country="Vietnam" operator="Vietnam Telecom Services Company" status="Operational" 03 bands="CDMA2000 800" brand="S-Fone" cc="vn" country="Vietnam" operator="S-Telecom" status="Not operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Viettel Mobile" cc="vn" country="Vietnam" operator="Viettel Telecom" status="Operational" 05 bands="GSM 900 / UMTS 2100" brand="Vietnamobile" cc="vn" country="Vietnam" operator="Hanoi Telecom" status="Operational" @@ -1640,40 +1737,44 @@ 08 bands="UMTS 2100" brand="EVNTelecom" cc="vn" country="Vietnam" operator="EVN Telecom" status="Not operational" 00-99 454 - 00 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="1O1O / One2Free / New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" - 01 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CITIC Telecom 1616" status="Operational" + 00 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="1O1O / One2Free / New World Mobility / SUNMobile" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" + 01 bands="MVNO" cc="hk" country="Hong Kong" operator="CITIC Telecom 1616" status="Operational" 02 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" 03 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="3 (2G)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 05 bands="CDMA 800" brand="3 (CDMA)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2600" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" - 07 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" - 08 bands="" brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" - 09 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="China Motion Telecom" status="Operational" + 07 bands="MVNO" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" + 08 bands="MVNO" brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" + 09 bands="MVNO" cc="hk" country="Hong Kong" operator="China Motion Telecom" status="Operational" 10 bands="GSM 1800" brand="New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" - 11 bands="" cc="hk" country="Hong Kong" operator="China-Hong Kong Telecom" status="Operational" + 11 bands="MVNO" cc="hk" country="Hong Kong" operator="China-Hong Kong Telecom" status="Operational" 12 bands="GSM 1800 / LTE 1800 / LTE 2600" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="Operational" - 13 bands="UMTS 2100" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="MVNO" + 13 bands="MVNO" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="Operational" 14 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 15 bands="GSM 1800" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" 16 bands="GSM 1800" brand="PCCW Mobile (2G)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 17 bands="GSM 1800" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" 18 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" 19 bands="UMTS 2100 / LTE 1800 / LTE 2600" brand="PCCW Mobile (3G/4G)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" - 22 bands="GSM 1800" brand="P Plus" cc="hk" country="Hong Kong" operator="P Plus Communications" status="Not operational" + 20 bands="" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="" + 21 bands="" cc="hk" country="Hong Kong" operator="21Vianet Mobile Ltd." status="" + 22 bands="" cc="hk" country="Hong Kong" operator="Delcom (HK) Ltd" status="" + 23 bands="MVNO" cc="hk" country="Hong Kong" operator="Lycamobile Hong Kong Ltd" status="Operational" 29 bands="CDMA 800" brand="PCCW Mobile (CDMA)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 00-99 455 - 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="SmarTone – Comunicações Mõveis, S.A." status="Operational" - 01 bands="GSM 900 / GSM 1800" brand="CTM" cc="mo" country="Macau (China)" operator="C.T.M. Telemovel+" status="Operational" - 02 bands="CDMA 800" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telecom" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="CTM" cc="mo" country="Macau (China)" operator="C.T.M. Telemovel+" status="Operational" - 05 bands="UMTS 900 / UMTS 2100" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telecom" status="Operational" - 06 bands="" brand="SmarTone" cc="mo" country="Macau (China)" operator="SmarTone – Comunicações Mõveis, S.A." status="" + 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="Smartone – Comunicações Móveis, S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE" brand="CTM" cc="mo" country="Macau (China)" operator="Companhia de Telecomunicações de Macau, S.A.R.L." status="Operational" + 02 bands="CDMA 800" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom (Macau) Company Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telephone (Macau), Limitada" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="CTM" cc="mo" country="Macau (China)" operator="Companhia de Telecomunicações de Macau, S.A.R.L." status="Operational" + 05 bands="UMTS 900 / UMTS 2100" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telephone (Macau), Limitada" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="Smartone – Comunicações Móveis, S.A." status="Operational" + 07 bands="LTE" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom (Macau) Limitada" status="Operational" 00-99 456 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard ( Mobitel )" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" 03 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" 04 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" @@ -1685,37 +1786,48 @@ 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" 00-99 457 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 /LTE 4G/" brand="LTC" cc="la" country="Laos" operator="LaoTelecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="LTC" cc="la" country="Laos" operator="Lao Telecom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="ETL" cc="la" country="Laos" operator="Enterprise of Telecommunications Lao" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Unitel" cc="la" country="Laos" operator="Star Telecom Co., Ltd" status="Operational" - 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 4G" brand="Beeline" cc="la" country="Laos" operator="VimpelCom Lao Ltd" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Unitel" cc="la" country="Laos" operator="Star Telecom Co., Ltd" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="la" country="Laos" operator="VimpelCom Lao Ltd" status="Operational" 00-99 460 00 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / TD-LTE 2300 / TD-LTE 2600 / FDD-LTE 1800" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / TD-LTE 2300 / TD-LTE 2600 / LTE 1800" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Operational" 02 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" - 03 bands="CDMA2000 800 / FDD-LTE 1800 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" + 03 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" 04 bands="" cc="cn" country="China" operator="Global Star Satellite" status="" - 05 bands="CDMA2000 800 / FDD-LTE 1800 / FDD-LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" + 05 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Not operational" 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" + 09 bands="" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="" + 11 bands="" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="" 20 bands="GSM-R" brand="China Tietong" cc="cn" country="China" operator="China Tietong" status="Operational" 00-99 466 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700 / LTE 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" + 02 bands="GSM 900" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="" + 03 bands="UMTS 2100" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="" 05 bands="CDMA2000 800 / LTE 700" brand="APTG" cc="tw" country="Taiwan" operator="Asia Pacific Telecom" status="Operational" 06 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" - 11 bands="Refer to 466-92 Chunghwa Telecom" brand="Chunghwa LDM" cc="tw" country="Taiwan" operator="LDTA/Chunghwa Telecom" status="Operational" + 07 bands="WiMAX 2600" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Not operational" + 09 bands="WiMAX 2600" brand="VMAX" cc="tw" country="Taiwan" operator="Vmax Telecom" status="Operational" + 10 bands="WiMAX 2600" brand="G1" cc="tw" country="Taiwan" operator="Global Mobile Corp." status="Operational" + 11 bands="GSM 1800" brand="Chunghwa LDM" cc="tw" country="Taiwan" operator="LDTA/Chunghwa Telecom" status="Operational" + 12 bands="LTE 700 / LTE 900" cc="tw" country="Taiwan" operator="Ambit Microsystems" status="Operational" + 56 bands="WiMAX 2600 / PHS" brand="FITEL" cc="tw" country="Taiwan" operator="First International Telecom" status="Not operational" + 68 bands="WiMAX 2600" cc="tw" country="Taiwan" operator="Tatung InfoComm" status="Not operational" 88 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" - 89 bands="UMTS 2100" brand="VIBO" cc="tw" country="Taiwan" operator="VIBO Telecom" status="Operational" + 89 bands="UMTS 2100 / LTE 900" brand="T Star" cc="tw" country="Taiwan" operator="Taiwan Star Telecom" status="Operational" + 90 bands="LTE 900" brand="T Star" cc="tw" country="Taiwan" operator="Taiwan Star Telecom" status="" 92 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Chunghwa" cc="tw" country="Taiwan" operator="Chunghwa Telecom" status="Operational" 93 bands="GSM 900" brand="MobiTai" cc="tw" country="Taiwan" operator="Mobitai Communications" status="Not operational" - 97 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700" brand="Taiwan Mobile" cc="tw" country="Taiwan" operator="Taiwan Mobile Co. Ltd" status="Operational" + 97 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700 / LTE 1800" brand="Taiwan Mobile" cc="tw" country="Taiwan" operator="Taiwan Mobile Co. Ltd" status="Operational" 99 bands="GSM 900" brand="TransAsia" cc="tw" country="Taiwan" operator="TransAsia Telecoms" status="Not operational" 00-99 467 05 bands="UMTS 2100" brand="Koryolink" cc="kp" country="North Korea" operator="Cheo Technology Jv Company" status="Operational" - 193 bands="GSM 900" brand="SunNet" cc="kp" country="North Korea" operator="Korea Posts and Telecommunications Corporation" status="discontinued" + 193 bands="GSM 900" brand="SunNet" cc="kp" country="North Korea" operator="Korea Posts and Telecommunications Corporation" status="Discontinued" 00-99 470 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Grameenphone" cc="bd" country="Bangladesh" operator="GrameenPhone Ltd" status="Operational" @@ -1731,11 +1843,11 @@ 00-99 502 01 bands="CDMA2000 450" brand="ATUR 450" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" - 10 cc="my" country="Malaysia" operator="DiGi Telecommunications" + 10 cc="my" country="Malaysia" operator="DiGi Telecommunications" status="" 11 bands="CDMA2000 850" brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Maxis" cc="my" country="Malaysia" operator="Maxis Mobile Services SDN Berhad" status="Operational" 13 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" - 14 cc="my" country="Malaysia" operator="Telekom Malaysia Berhad for PSTN SMS" + 14 cc="my" country="Malaysia" operator="Telekom Malaysia Berhad for PSTN SMS" status="" 150 bands="MVNO" brand="Tune Talk" cc="my" country="Malaysia" operator="Tune Talk Sdn Bhd" status="Operational" 151 bands="MVNO" cc="my" country="Malaysia" operator="Baraka Telecom Sdn Bhd (MVNE)" status="Operational" 152 bands="WiMAX 2.3 GHz / LTE 4G" brand="Yes" cc="my" country="Malaysia" operator="YTL Communications Sdn Bhd" status="Operational" @@ -1752,7 +1864,7 @@ 00-99 505 01 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / LTE-TDD 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / TD-LTE 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 04 bands="" cc="au" country="Australia" operator="Department of Defence" status="Operational" 05 brand="Ozitel" cc="au" country="Australia" status="Not operational" @@ -1763,7 +1875,7 @@ 10 bands="GSM 900" brand="Norfolk Telecom" cc="nf" country="Norfolk Island" operator="Norfolk Telecom" status="Operational" 11 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Ltd." status="" 12 bands="UMTS 2100" brand="3" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Not operational" - 13 bands="GSM 1800" brand="Railcorp" cc="au" country="Australia" operator="Rail Corporation New South Wales" status="Reserved" + 13 bands="GSM 1800" brand="Railcorp" cc="au" country="Australia" operator="Railcorp, Transport for New South Wales" status="Operational" 14 bands="GSM 1800 / UMTS 2100" brand="AAPT" cc="au" country="Australia" operator="Telecom New Zealand" status="Operational" 15 brand="3GIS" cc="au" country="Australia" status="Not operational" 16 bands="GSM 1800" brand="VicTrack" cc="au" country="Australia" operator="Victorian Rail Track" status="Reserved" @@ -1793,33 +1905,31 @@ 00-99 510 00 bands="Satellite" brand="PSN" cc="id" country="Indonesia" operator="PT Pasifik Satelit Nusantara (ACeS)" status="Operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE FDD 900" brand="INDOSAT" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" - 03 bands="CDMA 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="INDOSAT" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" + 03 bands="CDMA 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Not operational" 07 bands="CDMA 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Operational" 08 bands="GSM 1800 / UMTS 2100" brand="AXIS" cc="id" country="Indonesia" operator="PT Natrindo Telepon Seluler" status="Operational" - 09 bands="CDMA 1900 / 800 / LTE TDD 2300" brand="SMARTFREN" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE FDD 900" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" - 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE FDD 1800" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" + 09 bands="CDMA 800 / CDMA 1900 / LTE 850 / LTE 1800 / TD-LTE 2300" brand="Smartfren" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" 20 bands="GSM 1800" brand="TELKOMMobile" cc="id" country="Indonesia" operator="PT Telkom Indonesia Tbk" status="Not operational" 21 bands="GSM 1800" brand="IM3" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Not operational" 27 bands="CDMA 450" brand="Ceria" cc="id" country="Indonesia" operator="PT Sampoerna Telekomunikasi Indonesia" status="Operational" 28 bands="CDMA 800" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" - 88 bands="LTE TDD 2300" brand="BOLT! Super 4G" cc="id" country="Indonesia" operator="PT Internux" status="Operational" - 89 bands="GSM 1800 / UMTS 2100" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" + 88 bands="TD-LTE 2300" brand="BOLT! Super 4G" cc="id" country="Indonesia" operator="PT Internux" status="Operational" + 89 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" - 995 brand="Komselindo" cc="id" country="Indonesia" operator="Komselindo STKB-C" - 996 brand="Komselindo" cc="id" country="Indonesia" operator="Komselindo STKB-C" 00-99 514 - 01 bands="GSM 850 / GSM 900 / GSM 1800 / UMTS 2100" brand="Telin Telkomcel" cc="tl" country="East Timor" operator="PT Telekomunikasi Indonesia International" status="Planned" - 02 bands="GSM 900" cc="tl" country="East Timor" operator="Timor Telecom" status="Operational" - 03 bands="" cc="tl" country="East Timor" operator="Viettel Timor-Leste" status="Planned" + 01 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Telkomcel" cc="tl" country="East Timor" operator="PT Telekomunikasi Indonesia International" status="Operational" + 02 bands="GSM 900 / UMTS" brand="TT" cc="tl" country="East Timor" operator="Timor Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS" brand="Telemor" cc="tl" country="East Timor" operator="Viettel Timor-Leste" status="Operational" 00-99 515 01 bands="GSM 900" brand="Islacom" cc="ph" country="Philippines" operator="Globe Telecom via Innove Communications" status="Not operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100" brand="Smart" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" - 05 bands="GSM 1800 / UMTS 2100" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Smart" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" + 05 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" 11 bands="" cc="ph" country="Philippines" operator="PLDT via ACeS Philippines" status="" 18 bands="GSM 900 / UMTS 2100 (defunct)" brand="Cure" cc="ph" country="Philippines" operator="PLDT via Smart's Connectivity Unlimited Resources Enterprise" status="Operational" 24 bands="" brand="ABS-CBN" cc="ph" country="Philippines" operator="ABS-CBN Convergence with Globe Telecom" status="Operational" @@ -1833,7 +1943,7 @@ 04 bands="UMTS 2100 / LTE 2100" brand="truemove H 4G LTE" cc="th" country="Thailand" operator="Real Future" status="Operational" 05 bands="UMTS 2100 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTN" status="Operational" 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="Operational" - 18 bands="GSM 1800 / UMTS 850" brand="dtac" cc="th" country="Thailand" operator="Total Access Communication" status="Operational" + 18 bands="GSM 1800 / UMTS 850 / LTE 1800" brand="dtac" cc="th" country="Thailand" operator="Total Access Communication" status="Operational" 23 bands="GSM 1800" brand="AIS GSM 1800" cc="th" country="Thailand" operator="AIS)" status="Not operational" 25 bands="PHS 1900" brand="WE PCT" cc="th" country="Thailand" operator="True Corporation" status="Operational" 47 bands="" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="" @@ -1862,7 +1972,7 @@ 05 bands="UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Spark NZ" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" 06 bands="MVNO" brand="Skinny" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" 07 bands="" cc="nz" country="New Zealand" operator="Bluereach Limited" status="" - 24 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="2degrees" cc="nz" country="New Zealand" operator="2degrees" status="Operational" + 24 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800" brand="2degrees" cc="nz" country="New Zealand" operator="2degrees" status="Operational" 00-99 536 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="nr" country="Nauru" operator="Digicel (Nauru) Corporation" status="Operational" @@ -1885,13 +1995,16 @@ 00 bands="GSM 900" brand="AIL" cc="vu" country="Vanuatu" operator="ACeS International (AIL)" status="Operational" 01 bands="GSM 900" brand="SMILE" cc="vu" country="Vanuatu" operator="Telecom Vanuatu Ltd" status="Operational" 05 bands="GSM 900 / UMTS 900" brand="Digicel" cc="vu" country="Vanuatu" operator="Digicel Vanuatu Ltd" status="Operational" - 07 bands="LTE-TDD 2300" brand="WanTok" cc="vu" country="Vanuatu" operator="WanTok Vanuatu Ltd" status="Operational" + 07 bands="TD-LTE 2300" brand="WanTok" cc="vu" country="Vanuatu" operator="WanTok Vanuatu Ltd" status="Operational" 00-99 542 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="fj" country="Fiji" operator="Vodafone Fiji" status="Operational" 02 bands="GSM 900 / UMTS 900 / UMTS 2100 / WIMAX 4G" brand="Digicel" cc="fj" country="Fiji" operator="Digicel Fiji" status="Operational" 03 bands="CDMA" cc="fj" country="Fiji" operator="Telecom Fiji Ltd" status="" 00-99 +543 + 01 bands="" cc="wf" country="Wallis and Futuna" operator="Manuia" status="" + 00-99 544 11 bands="GSM 850 / GSM 1900 / UMTS 850" brand="Bluesky" cc="as" country="American Samoa (United States of America)" operator="Bluesky" status="Operational" 00-99 @@ -1909,7 +2022,7 @@ 20 bands="GSM 900 / UMTS 2100" brand="Vini" cc="pf" country="French Polynesia" operator="Tikiphone SA" status="Operational" 00-99 548 - 01 bands="GSM 900" cc="ck" country="Cook Islands (New Zealand)" operator="Telecom Cook" status="Operational" + 01 bands="GSM 900 / UMTS 900" brand="Kokanet" cc="ck" country="Cook Islands (Pacific Ocean)" operator="Telecom Cook Islands" status="Operational" 00-99 549 01 bands="GSM 900 / UMTS 2100" brand="Digicel" cc="ws" country="Samoa" operator="Digicel Pacific Ltd." status="Operational" @@ -1938,14 +2051,14 @@ 00-99 603 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA 1900" brand="Mobilis" cc="dz" country="Algeria" operator="ATM Mobilis" status="Operational" - 02 bands="GSM 900 / GSM 1800/ UMTS 2100" brand="Djezzy" cc="dz" country="Algeria" operator="Orascom Telecom Algerie Spa" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Djezzy" cc="dz" country="Algeria" operator="Orascom Telecom Algerie Spa" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ooredoo" cc="dz" country="Algeria" operator="Wataniya Telecom Algerie" status="Operational" 00-99 604 - 00 bands="GSM 900 / GSM 1800" brand="Méditel" cc="ma" country="Morocco" operator="Medi Telecom" status="Operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="IAM" cc="ma" country="Morocco" operator="Ittissalat Al Maghrib (Maroc Telecom)" status="Operational" + 00 bands="GSM 900 / GSM 1800 / LTE" brand="Méditel" cc="ma" country="Morocco" operator="Medi Telecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="IAM" cc="ma" country="Morocco" operator="Ittissalat Al Maghrib (Maroc Telecom)" status="Operational" 02 bands="GSM 900 / GSM 1800" brand="Wana Corporate" cc="ma" country="Morocco" operator="Wana)" status="Operational" - 05 bands="GSM 900 / GSM 1800" brand="INWI" cc="ma" country="Morocco" operator="WANA - Groupe ONA" status="Operational" + 05 bands="GSM 900 / GSM 1800 / LTE 1800" brand="INWI (Telecommunications)" cc="ma" country="Morocco" operator="WANA - Groupe ONA" status="Operational" 00-99 605 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" @@ -1995,7 +2108,7 @@ 05 bands="GSM 900 / UMTS" brand="MTN" cc="ci" country="Ivory Coast" operator="Loteny Telecom" status="Operational" 06 bands="GSM 1800" brand="GreenN" cc="ci" country="Ivory Coast" operator="Oricel" status="Operational" 07 bands="GSM 1800" brand="café" cc="ci" country="Ivory Coast" operator="Aircomm" status="Operational" - 18 bands="LTE-TDD 2300" cc="ci" country="Ivory Coast" operator="YooMee" status="Operational" + 18 bands="TD-LTE 2300" cc="ci" country="Ivory Coast" operator="YooMee" status="Operational" 00-99 613 01 bands="GSM 900 / UMTS" brand="Telmob" cc="bf" country="Burkina Faso" operator="Onatel" status="Operational" @@ -2014,9 +2127,9 @@ 00-99 616 01 bands="GSM 900 / GSM 1800" brand="Libercom" cc="bj" country="Benin" operator="Benin Telecoms Mobile" status="Operational" - 02 bands="GSM 900" brand="Moov" cc="bj" country="Benin" operator="Telecel Benin" status="Operational" + 02 bands="GSM 900 / UMTS" brand="Moov" cc="bj" country="Benin" operator="Telecel Benin" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="MTN" cc="bj" country="Benin" operator="Spacetel Benin" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="BLK" cc="bj" country="Benin" operator="BLK Communication Benin" status="Operational" + 04 bands="GSM 900 / GSM 1800" brand="BBCOM" cc="bj" country="Benin" operator="Bell Benin Communications" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="Glo" cc="bj" country="Benin" operator="Glo Communication Benin" status="Operational" 00-99 617 @@ -2051,16 +2164,16 @@ 04 bands="CDMA2000" brand="Expresso" cc="gh" country="Ghana" operator="Kasapa / Hutchison Telecom" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="gh" country="Ghana" operator="Airtel" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS" brand="Globacom" cc="gh" country="Ghana" operator="Globacom Group" status="Operational" - 08 bands="LTE-FDD 2600" brand="Surfline" cc="gh" country="Ghana" operator="Surfline Communications Ltd" status="Operational" - 10 bands="LTE-TDD 2600" brand="Blu" cc="gh" country="Ghana" operator="Blu Telecommunications" status="Operational" + 08 bands="LTE 2600" brand="Surfline" cc="gh" country="Ghana" operator="Surfline Communications Ltd" status="Operational" + 10 bands="TD-LTE 2600" brand="Blu" cc="gh" country="Ghana" operator="Blu Telecommunications" status="Operational" 11 bands="" cc="gh" country="Ghana" operator="Netafrique Dot Com Ltd" status="" 00-99 621 00 bands="LTE 1900" cc="ng" country="Nigeria" operator="Capcom" status="Not operational" 20 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="ng" country="Nigeria" operator="Bharti Airtel Limited" status="Operational" - 24 bands="LTE-TDD 2300" cc="ng" country="Nigeria" operator="Spectranet" status="Operational" + 24 bands="TD-LTE 2300" cc="ng" country="Nigeria" operator="Spectranet" status="Operational" 25 bands="CDMA2000 800 / CDMA2000 1900" brand="Visafone" cc="ng" country="Nigeria" operator="Visafone Communications Ltd." status="Operational" - 26 bands="LTE-TDD 2300" cc="ng" country="Nigeria" operator="Swift" status="Operational" + 26 bands="TD-LTE 2300" cc="ng" country="Nigeria" operator="Swift" status="Operational" 27 bands="LTE 800" brand="Smile" cc="ng" country="Nigeria" operator="Smile Communications Nigeria" status="Operational" 30 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" 40 bands="GSM 900 / GSM 1800" brand="M-Tel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Not operational" @@ -2068,15 +2181,15 @@ 60 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" 00-99 622 - 01 bands="GSM 900" brand="Airtel" cc="td" country="Chad" operator="Bharti Airtel SA" status="Operational" + 01 bands="GSM 900 / UMTS" brand="Airtel" cc="td" country="Chad" operator="Bharti Airtel SA" status="Operational" 02 bands="CDMA2000" brand="Tawali" cc="td" country="Chad" operator="SotelTchad" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Tigo" cc="td" country="Chad" operator="Millicom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS" brand="Tigo" cc="td" country="Chad" operator="Millicom" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="Salam" cc="td" country="Chad" operator="SotelTchad" status="Operational" 00-99 623 01 bands="GSM 900" brand="CTP" cc="cf" country="Central African Republic" operator="Centrafrique Telecom Plus" status="Operational" 02 bands="GSM 900" brand="TC" cc="cf" country="Central African Republic" operator="Telecel Centrafrique" status="Operational" - 03 bands="GSM 1800" brand="Orange" cc="cf" country="Central African Republic" operator="Orange RCA" status="Reserved" + 03 bands="GSM 1800 / UMTS" brand="Orange" cc="cf" country="Central African Republic" operator="Orange RCA" status="Operational" 04 bands="GSM 900" brand="Nationlink" cc="cf" country="Central African Republic" operator="Nationlink Telecom RCA" status="Operational" 00-99 624 @@ -2085,8 +2198,8 @@ 04 bands="" brand="Nexttel" cc="cm" country="Cameroon" operator="Nexttel" status="Operational" 00-99 625 - 01 bands="GSM 900" brand="CVMOVEL" cc="cv" country="Cape Verde" operator="CVMovel, S.A." status="Operational" - 02 bands="GSM 1800" brand="T+" cc="cv" country="Cape Verde" operator="T+" status="Operational" + 01 bands="GSM 900 / UMTS" brand="CVMOVEL" cc="cv" country="Cape Verde" operator="CVMóvel, S.A." status="Operational" + 02 bands="GSM 1800 / UMTS 2100" brand="T+" cc="cv" country="Cape Verde" operator="UNITEL T+ TELECOMUNICACÕES, S.A." status="Operational" 00-99 626 01 bands="GSM 900" brand="CSTmovel" cc="st" country="Sao Tome and Principe" operator="Companhia Santomese de Telecomunicaçôe" status="Operational" @@ -2103,13 +2216,13 @@ 05 bands="" brand="RAG" cc="ga" country="Gabon" operator="Réseau de l’Administration Gabonaise" status="" 00-99 629 - 01 bands="GSM 900" brand="Airtel" cc="cg" country="Congo" operator="Celtel Congo" status="Operational" + 01 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="cg" country="Congo" operator="Celtel Congo" status="Operational" 07 bands="GSM 900" cc="cg" country="Congo" operator="Warid Telecom" status="Operational" 10 bands="GSM 900" brand="Libertis Telecom" cc="cg" country="Congo" operator="MTN CONGO S.A" status="Operational" 00-99 630 - 01 bands="GSM 900 / GSM 1800" brand="Vodacom" cc="cd" country="Democratic Republic of the Congo" operator="Vodacom Congo RDC sprl" status="Operational" - 02 bands="GSM 900" brand="airtel" cc="cd" country="Democratic Republic of the Congo" operator="Airtel sprl" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS" brand="Vodacom" cc="cd" country="Democratic Republic of the Congo" operator="Vodacom Congo RDC sprl" status="Operational" + 02 bands="GSM 900 / UMTS" brand="airtel" cc="cd" country="Democratic Republic of the Congo" operator="Airtel sprl" status="Operational" 04 bands="" cc="cd" country="Democratic Republic of the Congo" operator="Cellco" status="" 05 bands="GSM 900 / GSM 1800" brand="Supercell" cc="cd" country="Democratic Republic of the Congo" operator="Supercell SPRL" status="Operational" 10 bands="" brand="Libertis Telecom" cc="cd" country="Democratic Republic of the Congo" status="Operational" @@ -2136,9 +2249,10 @@ 634 01 bands="GSM 900 / UMTS 2100" brand="Zain SD" cc="sd" country="Sudan" operator="Zain Group - Sudan" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="sd" country="Sudan" operator="MTN Sudan" status="Operational" + 03 bands="" brand="MTN" cc="sd" country="Sudan" operator="MTN Sudan" status="" 05 bands="CDMA2000 450" brand="Canar Telecom" cc="sd" country="Sudan" status="Operational" 07 bands="GSM 1800 / UMTS 2100 / CDMA2000 800" brand="Sudani One" cc="sd" country="Sudan" operator="Sudatel Group" status="Operational" - 09 brand="Privet Network" cc="sd" country="Sudan" operator="NEC" + 09 brand="Privet Network" cc="sd" country="Sudan" operator="NEC" status="" 00-99 635 10 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="rw" country="Rwanda" operator="MTN Rwandacell SARL" status="Operational" @@ -2152,26 +2266,26 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 21000" brand="ETH-MTN" cc="et" country="Ethiopia" operator="Ethio Telecom" status="Operational" 00-99 637 - 01 bands="GSM 900 GSM 1800 3G 2100" brand="Telesom" cc="so" country="Somalia" operator="Telesom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telesom" cc="so" country="Somalia" operator="Telesom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Somafone" cc="so" country="Somalia" operator="Somafone FZLLC" status="Operational" 10 bands="GSM 900" brand="Nationlink" cc="so" country="Somalia" operator="NationLink Telecom" status="Operational" 30 bands="GSM 900" brand="Golis" cc="so" country="Somalia" operator="Golis Telecom Somalia" status="Operational" - 50 bands="GSM 900" brand="Hormuud" cc="so" country="Somalia" operator="Hormuud Telecom Somalia Inc" status="Operational" - 57 bands="GSM 900 / GSM 1800" brand="Unittel" cc="so" country="Somalia" operator="Unitted Telecom" status="Operational" - 60 bands="GSM 900/ GSM 1800" brand="Nationlink Telecom" cc="so" country="Somalia" operator="Nationlink Telecom" status="Operational" - 67 bands="GSM 900 GSM 1800 3G 2100" brand="Horntel Group" cc="so" country="Somalia" operator="HTG Group Somalia" status="Operational" + 50 bands="GSM 900 / UMTS" brand="Hormuud" cc="so" country="Somalia" operator="Hormuud Telecom Somalia Inc" status="Operational" + 57 bands="GSM 900 / GSM 1800" brand="UNITEL" cc="so" country="Somalia" operator="UNITEL S.a.r.l." status="Operational" + 60 bands="GSM 900 / GSM 1800" brand="Nationlink Telecom" cc="so" country="Somalia" operator="Nationlink Telecom" status="Operational" + 67 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Horntel Group" cc="so" country="Somalia" operator="HTG Group Somalia" status="Operational" 70 bands="" cc="so" country="Somalia" operator="Onkod Telecom Ltd." status="Not operational" - 71 bands="900/1800/2100" brand="Somtel" cc="so" country="Somalia" operator="2G/3G" status="Operational" - 82 bands="GSM 900 / GSM 1800 / CDMA2000 / 4G LTE Alcatel-Lucent" brand="Telcom" cc="so" country="Somalia" operator="Telcom Somalia" status="Operational" + 71 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Somtel" cc="so" country="Somalia" operator="Somtel" status="Operational" + 82 bands="GSM 900 / GSM 1800 / CDMA2000 / LTE" brand="Telcom" cc="so" country="Somalia" operator="Telcom Somalia" status="Operational" 00-99 638 - 01 bands="GSM 900" brand="Evatis" cc="dj" country="Djibouti" operator="Djibouti Telecom SA" status="Operational" + 01 bands="GSM 900 / UMTS" brand="Evatis" cc="dj" country="Djibouti" operator="Djibouti Telecom SA" status="Operational" 00-99 639 - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Safaricom" cc="ke" country="Kenya" operator="Safaricom Limited" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="ke" country="Kenya" operator="B Airtel" status="Operational" - 05 bands="GSM 900" brand="yu" cc="ke" country="Kenya" operator="Econet Wireless Kenya" status="Operational" - 07 bands="CDMA2000 / GSM 900 / GSM 1800 / UMTS 2100" brand="Orange Kenya" cc="ke" country="Kenya" operator="Telkom Kenya" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Safaricom" cc="ke" country="Kenya" operator="Safaricom Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Airtel" cc="ke" country="Kenya" operator="Bharti Airtel" status="Operational" + 05 bands="GSM 900" brand="yu" cc="ke" country="Kenya" operator="Essar Telecom Kenya" status="Not operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange Kenya" cc="ke" country="Kenya" operator="Telkom Kenya" status="Operational" 00-99 640 01 bands="" cc="tz" country="Tanzania" operator="Rural NetCo Limited" status="" @@ -2188,8 +2302,8 @@ 00-99 641 01 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" - 06 bands="LTE-TDD 2600" brand="Vodafone" cc="ug" country="Uganda" operator="Afrimax Uganda" status="Operational" - 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE-TDD 2600" brand="MTN" cc="ug" country="Uganda" operator="MTN Uganda" status="Operational" + 06 bands="TD-LTE 2600" brand="Vodafone" cc="ug" country="Uganda" operator="Afrimax Uganda" status="Operational" + 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="MTN" cc="ug" country="Uganda" operator="MTN Uganda" status="Operational" 11 bands="GSM 900 / UMTS 2100" brand="UTL" cc="ug" country="Uganda" operator="Uganda Telecom Ltd." status="Operational" 14 bands="GSM 900 / GSM 1800 / UMTS / LTE 800" brand="Africell" cc="ug" country="Uganda" operator="Africell Uganda" status="Operational" 18 bands="GSM 900 / GSM 1800" cc="ug" country="Uganda" operator="Suretelecom" status="Operational" @@ -2204,9 +2318,9 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Spacetel" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" 02 bands="GSM 900" brand="Tempo" cc="bi" country="Burundi" operator="Africell PLC" status="Operational" 03 bands="GSM 900" brand="Onatel" cc="bi" country="Burundi" operator="Onatel" status="Operational" - 07 bands="GSM 1800" brand="Smart Mobile" cc="bi" country="Burundi" operator="LACELL SU" status="Operational" + 07 bands="GSM 1800 / UMTS" brand="Smart Mobile" cc="bi" country="Burundi" operator="LACELL SU" status="Operational" 08 bands="" brand="HiTs Telecom" cc="bi" country="Burundi" operator="HiTs Telecom" status="Not operational" - 82 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Leo" cc="bi" country="Burundi" operator="Orascom Telecom (a subsidiary of Vimplecom)" status="Operational" + 82 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Leo" cc="bi" country="Burundi" operator="Orascom Telecom" status="Operational" 00-99 643 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="mCel" cc="mz" country="Mozambique" operator="Mocambique Celular S.A." status="Operational" @@ -2219,10 +2333,10 @@ 03 bands="GSM 900" brand="ZAMTEL" cc="zm" country="Zambia" operator="Zambia Telecommunications Company Ltd" status="Operational" 00-99 646 - 01 bands="GSM 900 / GSM 1800" brand="Airtel" cc="mg" country="Madagascar" operator="Bharti Airtel" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="mg" country="Madagascar" operator="Bharti Airtel" status="Operational" 02 bands="GSM 900" brand="Orange" cc="mg" country="Madagascar" operator="Orange Madagascar S.A." status="Operational" 03 bands="GSM 900" brand="Sacel" cc="mg" country="Madagascar" operator="Sacel Madagascar S.A." status="Not operational" - 04 bands="GSM 900" brand="Telma" cc="mg" country="Madagascar" operator="Telma Mobile S.A." status="Operational" + 04 bands="GSM 900 / LTE" brand="Telma" cc="mg" country="Madagascar" operator="Telma Mobile S.A." status="Operational" 00-99 647 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="re" country="Réunion (France)" operator="Orange La Réunion" status="Operational" @@ -2239,6 +2353,7 @@ 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="MTC" cc="na" country="Namibia" operator="MTC Namibia" status="Operational" 02 bands="CDMA2000 800" brand="switch" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="TN Mobile" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" + 04 bands="WiMAX 2500" cc="na" country="Namibia" operator="Paratus Telecommunications (Pty)" status="Operational" 00-99 650 01 bands="GSM 900 / GSM 1800" brand="TNM" cc="mw" country="Malawi" operator="Telecom Network Malawi" status="Operational" @@ -2262,7 +2377,7 @@ 00-99 655 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodacom" cc="za" country="South Africa" operator="Vodacom" status="Operational" - 02 bands="GSM 1800 / UMTS 2100 / LTE-TDD 2300" brand="Telkom" cc="za" country="South Africa" operator="Telkom SA Ltd" status="Operational" + 02 bands="GSM 1800 / UMTS 2100 / TD-LTE 2300" brand="Telkom" cc="za" country="South Africa" operator="Telkom SA Ltd" status="Operational" 04 bands="" cc="za" country="South Africa" operator="Sasol (Pty) Ltd." status="" 06 bands="" cc="za" country="South Africa" operator="Sentech (Pty) Ltd" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Cell C" cc="za" country="South Africa" operator="Cell C (Pty) Ltd" status="Operational" @@ -2272,6 +2387,7 @@ 13 bands="CDMA 800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" 14 bands="LTE 1800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" 16 bands="" cc="za" country="South Africa" operator="Phoenix System Integration (Pty) Ltd" status="Not operational" + 17 bands="" cc="za" country="South Africa" operator="Sishen Iron Ore Company (Ltd) Pty" status="" 19 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" 21 bands="TETRA 410" cc="za" country="South Africa" operator="Cape Town Metropolitan Council" status="Operational" 25 bands="" cc="za" country="South Africa" operator="Wirels Connect" status="" @@ -2290,17 +2406,21 @@ 657 01 bands="GSM 900" brand="Eritel" cc="er" country="Eritrea" operator="Eritrea Telecommunications Services Corporation" status="Operational" 00-99 +658 + 01 bands="GSM" brand="Sure" cc="sh" country="Saint Helena, Ascension and Tristan da Cunha" operator="Sure South Atlantic Ltd." status="Operational" + 00-99 659 - 02 bands="GSM 900/1800, UMTS 2100" brand="MTN" country="South Sudan - SS" operator="MTN South Sudan" status="Operational" - 03 bands="GSM 900/1800" brand="Gemtel" country="South Sudan - SS" operator="Gemtel" status="Operational" - 04 bands="GSM 900/1800" brand="Vivacell" country="South Sudan - SS" operator="Network of the World (NOW)" status="Operational" - 06 bands="GSM 900/1800" brand="Zain" country="South Sudan - SS" operator="Zain South Sudan" status="Operational" - 07 bands="CDMA" brand="Sudani" country="South Sudan - SS" operator="Sudani" status="Operational" + 02 bands="GSM 900/1800, UMTS 2100" brand="MTN" cc="ss" country="South Sudan" operator="MTN South Sudan" status="Operational" + 03 bands="GSM 900/1800" brand="Gemtel" cc="ss" country="South Sudan" operator="Gemtel" status="Operational" + 04 bands="GSM 900/1800" brand="Vivacell" cc="ss" country="South Sudan" operator="Network of the World (NOW)" status="Operational" + 06 bands="GSM 900/1800" brand="Zain" cc="ss" country="South Sudan" operator="Zain South Sudan" status="Operational" + 07 bands="CDMA" brand="Sudani" cc="ss" country="South Sudan" operator="Sudani" status="Operational" 00-99 702 - 67 bands="GSM 1900 / UMTS / LTE 850 / LTE 1900" brand="DigiCel" cc="bz" country="Belize" operator="Belize Telemedia Ltd. (BTL)" status="Operational" - 68 bands="" brand="INTELCO" cc="bz" country="Belize" operator="International Telecommunications Ltd." status="" - 99 bands="CDMA2000" brand="Smart" cc="bz" country="Belize" operator="SpeedNet Communications Limited" status="Operational" + 67 bands="GSM 1900 / UMTS 850 / LTE 850 / LTE 1900" brand="DigiCell" cc="bz" country="Belize" operator="Belize Telemedia Limited (BTL)" status="Operational" + 68 bands="" brand="INTELCO" cc="bz" country="Belize" operator="International Telecommunications Ltd." status="Not operational" + 69 bands="CDMA2000 850" brand="SMART" cc="bz" country="Belize" operator="Speednet Communications Limited" status="Operational" + 99 bands="CDMA2000 850" brand="SMART" cc="bz" country="Belize" operator="Speednet Communications Limited" status="Operational" 00-99 704 01 bands="CDMA 1900 / GSM 900 / GSM 1900 / UMTS 1900" brand="Claro" cc="gt" country="Guatemala" operator="Telecomunicaciones de Guatemala, S.A." status="Operational" @@ -2339,7 +2459,7 @@ 04 bands="GSM 1900 / UMTS 1900" brand="Digicel" cc="pa" country="Panama" operator="Digicel Group" status="Operational" 00-99 716 - 06 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700-2100" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" + 06 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" 07 bands="iDEN / UMTS 1900" brand="NEXTEL" cc="pe" country="Peru" operator="Americatel Perú" status="Inactive" 10 bands="GSM 1900 / UMTS 850 / LTE 1900" brand="Claro (TIM)" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" 15 bands="GSM 1900 / UMTS 1900" brand="Viettel Mobile" cc="pe" country="Peru" operator="Viettel Peru S.A.C." status="Operational" @@ -2354,7 +2474,7 @@ 310 bands="GSM 1900" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 320 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 330 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 341 bands="GSM 850 / GSM 1900 / UMTS" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" + 341 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" 350 bands="GSM 900" brand="PORT-HABLE" cc="ar" country="Argentina" operator="Hutchison Telecommunications Argentina S.A." status="Operational" 000-999 724 @@ -2389,31 +2509,40 @@ 01 bands="GSM 1900 / UMTS 1900 / LTE 2600" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" 02 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" 03 bands="GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="Claro" cc="cl" country="Chile" operator="Claro Chile S.A." status="Operational" - 04 bands="iDEN 800" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" + 04 bands="iDEN 800" brand="WOM" cc="cl" country="Chile" operator="Novator Partners" status="Operational" 05 bands="" cc="cl" country="Chile" operator="Multikom S.A." status="" - 06 bands="Operational" brand="Telefónica del Sur" cc="cl" country="Chile" operator="Blue Two Chile S.A." status="MVNO" + 06 bands="MVNO" brand="Telefónica del Sur" cc="cl" country="Chile" operator="Blue Two Chile S.A." status="Operational" 07 bands="" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="" 08 bands="MVNO" brand="VTR Móvil" cc="cl" country="Chile" operator="VTR S.A." status="Operational" - 09 bands="UMTS 1700/2100 (AWS)" brand="Nextel" cc="cl" country="Chile" operator="Centennial Cayman Corp. Chile" status="Operational" + 09 bands="UMTS 1700" brand="WOM" cc="cl" country="Chile" operator="Novator Partners" status="Operational" 10 bands="GSM 1900 / UMTS 1900" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" 11 bands="" cc="cl" country="Chile" operator="Celupago S.A." status="" - 12 bands="MVNO" brand="Colo-Colo Movil Wanderers Movil" cc="cl" country="Chile" operator="Telestar Móvil S.A." status="Operational" - 13 bands="Operational" brand="Virgin Mobile" cc="cl" country="Chile" operator="Tribe Mobile Chile SPA" status="MVNO" + 12 bands="MVNO" brand="Wanderers Móvil" cc="cl" country="Chile" operator="Telestar Móvil S.A." status="Operational" + 13 bands="MVNO" brand="Virgin Mobile" cc="cl" country="Chile" operator="Tribe Mobile Chile SPA" status="Operational" 14 bands="" cc="cl" country="Chile" operator="Netline Telefónica Móvil Ltda" status="" 15 bands="" cc="cl" country="Chile" operator="Cibeles Telecom S.A." status="" + 16 bands="MVNO" cc="cl" country="Chile" operator="Nomade Telecomunicaciones S.A." status="" + 17 bands="" cc="cl" country="Chile" operator="COMPATEL Chile Limitada" status="" 99 bands="GSM 1900 / UMTS 1900" brand="Will" cc="cl" country="Chile" operator="WILL Telefonía" status="Operational" 00-99 732 - 001 bands="" brand="movistar (?)" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A." status="Operational" - 002 bands="" brand="Edatel" cc="co" country="Colombia" operator="Edatel S.A." status="Operational" - 020 bands="" cc="co" country="Colombia" operator="Emtelsa" status="" + 001 bands="" brand="movistar" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A. ESP" status="Operational" + 002 bands="" brand="Edatel" cc="co" country="Colombia" operator="Edatel S.A. ESP" status="Operational" + 003 bands="" cc="co" country="Colombia" operator="LLEIDA S.A.S." status="" + 004 bands="" cc="co" country="Colombia" operator="COMPATEL COLOMBIA SAS" status="" + 020 bands="LTE 2600" brand="Une-EPM" cc="co" country="Colombia" operator="Une EPM Telecomunicaciones S.A. E.S.P." status="Operational" 099 bands="GSM 900" brand="EMCALI" cc="co" country="Colombia" operator="Empresas Municipales de Cali" status="Operational" - 101 bands="GSM 850 / GSM 1900" brand="Claro" cc="co" country="Colombia" operator="Claro (Comcel)" status="Operational" - 102 bands="GSM 850 / GSM 1900 / CDMA 850" brand="movistar" cc="co" country="Colombia" operator="Bellsouth Colombia" status="Operational" - 103 bands="GSM 1900" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil" status="Operational" - 111 bands="GSM 1900" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil" status="Operational" - 123 bands="GSM 850 / GSM 1900 / CDMA 850" brand="movistar" cc="co" country="Colombia" operator="Telefónica Móviles Colombia" status="Operational" - 130 bands="GSM 850 / iDEN" brand="AVANTEL" cc="co" country="Colombia" operator="Avantel S.A.S" status="Operational" + 101 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Claro" cc="co" country="Colombia" operator="COMCEL S.A." status="Operational" + 102 bands="GSM 850 / GSM 1900 / CDMA 850" cc="co" country="Colombia" operator="Bellsouth Colombia" status="Not operational" + 103 bands="GSM 1900 / UMTS / LTE 1700" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil S.A. ESP" status="Operational" + 111 bands="GSM 1900 / UMTS / LTE 1700" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil S.A. ESP" status="Operational" + 123 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700 / CDMA 850" brand="movistar" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A. ESP" status="Operational" + 130 bands="GSM 850 / iDEN / LTE 1700" brand="AVANTEL" cc="co" country="Colombia" operator="Avantel S.A.S" status="Operational" + 142 bands="" cc="co" country="Colombia" operator="Une EPM Telecomunicaciones S.A. E.S.P." status="" + 154 bands="MVNO" cc="co" country="Colombia" operator="Virgin Mobile Colombia S.A.S." status="Operational" + 165 bands="" cc="co" country="Colombia" operator="Colombia Móvil S.A. ESP" status="" + 176 bands="TD-LTE 2600" cc="co" country="Colombia" operator="DirecTV Colombia Ltda" status="Operational" + 187 bands="LTE 1700" cc="co" country="Colombia" operator="Empresa de Telecomunicaciones de Bogotá S.A. ESP" status="Operational" 000-999 734 01 bands="GSM 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Not operational" @@ -2423,7 +2552,7 @@ 06 bands="CDMA2000 850 / GSM 850 / UMTS 1900" brand="Movilnet" cc="ve" country="Venezuela" operator="Telecomunicaciones Movilnet" status="Operational" 00-99 736 - 01 bands="GSM 1900" brand="Nuevatel" cc="bo" country="Bolivia" operator="Nuevatel PCS De Bolivia SA" status="Operational" + 01 bands="GSM 1900 / UMTS" brand="Viva" cc="bo" country="Bolivia" operator="Nuevatel PCS De Bolivia SA" status="Operational" 02 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="Entel" cc="bo" country="Bolivia" operator="Entel SA" status="Operational" 03 bands="GSM 850 / UMTS" brand="Tigo" cc="bo" country="Bolivia" operator="Telefónica Celular De Bolivia S.A" status="Operational" 00-99 @@ -2432,9 +2561,9 @@ 02 bands="GSM 900" brand="GT&T Cellink Plus" cc="gy" country="Guyana" operator="Guyana Telephone & Telegraph Co." status="Operational" 00-99 740 - 00 bands="GSM 850 / UMTS 900 / UMTS 1900" brand="Movistar" cc="ec" country="Ecuador" operator="Otecel S.A." status="Operational" + 00 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1900" brand="Movistar" cc="ec" country="Ecuador" operator="Otecel S.A." status="Operational" 01 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="Claro" cc="ec" country="Ecuador" operator="CONECEL S.A." status="Operational" - 02 bands="GSM 850 / CDMA 1900" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" + 02 bands="GSM 850 / UMTS / LTE 1700" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" 00-99 744 01 bands="GSM 1900 / UMTS 900" brand="VOX" cc="py" country="Paraguay" operator="Hola Paraguay S.A" status="Operational" @@ -2445,10 +2574,10 @@ 06 bands="GSM 1800 / LTE 1700" brand="Copaco" cc="py" country="Paraguay" operator="Copaco S.A." status="Operational" 00-99 746 - 02 bands="GSM 900 / GSM 1800" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="Operational" - 03 bands="GSM 900/ GSM 1800" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" - 04 bands="GSM 900" brand="Uniqa" cc="sr" country="Suriname" operator="Intelsur N.V. / UTS N.V." status="Operational" - 05 bands="CDMA" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" + 04 bands="GSM 900 / UMTS" brand="Uniqa" cc="sr" country="Suriname" operator="Intelsur N.V. / UTS N.V." status="Operational" + 05 bands="CDMA 450" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="" 00-99 748 00 bands="TDMA" brand="Antel" cc="uy" country="Uruguay" operator="Administración Nacional de Telecomunicaciones" status="" @@ -2472,22 +2601,22 @@ 09 bands="" country="International operators" operator="Unassigned" status="Returned spare" 10 bands="Satellite" brand="ACeS" country="International operators" status="Operational" 11 bands="Satellite" brand="Inmarsat" country="International operators" status="Operational" - 12 bands="GSM 1800" brand="Telenor" country="International operators" operator="Maritime Communications Partner AS" status="Operational" - 13 bands="GSM 1800" brand="GSM.AQ" country="International operators" operator="Global Networks Switzerland Inc." status="Operational" - 14 bands="GSM 1800" country="International operators" operator="AeroMobile AS" status="" + 12 bands="GSM 1800" brand="Telenor" country="International operators" operator="Maritime Communications Partner AS (MCP)" status="Operational" + 13 bands="GSM 1800" brand="GSM.AQ" country="International operators" operator="BebbiCell AG" status="Operational" + 14 bands="GSM 1800" brand="AeroMobile" country="International operators" operator="AeroMobile AS" status="Operational" 15 bands="GSM 1800" brand="OnAir" country="International operators" operator="OnAir Switzerland Sarl" status="Operational" 16 bands="" country="International operators" operator="Jasper Systems" status="Operational" - 17 bands="GSM 1800" brand="Navitas" country="International operators" status="Operational" + 17 bands="GSM 1800" brand="Navitas" country="International operators" operator="JT Group Limited" status="Not operational" 18 bands="GSM 900 / GSM 1900 / CDMA2000 1900" brand="Cellular @Sea" country="International operators" operator="AT&T Mobility" status="Operational" - 19 bands="" country="International operators" operator="Vodafone Malta Maritime" status="Operational" + 19 bands="GSM 900 / GSM 1800 / UMTS 2100" country="International operators" operator="Vodafone Malta Maritime" status="Operational" 20 bands="" country="International operators" operator="Intermatica" status="" - 21 bands="" country="International operators" operator="Unassigned" status="Returned spare" + 21 bands="GSM 1800" country="International operators" operator="Wins Limited" status="Operational" 22 bands="" country="International operators" operator="MediaLincc Ltd" status="" 23 bands="" country="International operators" operator="Unassigned" status="Returned spare" 24 bands="" brand="iNum" country="International operators" operator="Voxbone" status="" 25 bands="" country="International operators" operator="Unassigned" status="Returned spare" - 26 bands="" brand="TIM" country="International operators" operator="Telecom Italia" status="Operational" - 27 bands="" brand="OnAir" country="International operators" operator="OnAir" status="Operational" + 26 bands="GSM 1800 / GSM 1900" brand="TIM@sea" country="International operators" operator="Telecom Italia Mobile" status="Operational" + 27 bands="GSM 1800" brand="OnMarine" country="International operators" operator="OnAir Switzerland Sarl" status="Operational" 28 bands="Roaming SIM" brand="Vodafone" country="International operators" operator="GDSP (Vodafone's Global Data Service Platform)" status="Operational" 29 bands="" brand="Telenor" country="International operators" status="" 30 bands="" country="International operators" operator="Unassigned" status="Returned spare" @@ -2495,16 +2624,18 @@ 32 bands="GSM 900" brand="Sky High" country="International operators" operator="MegaFon" status="Operational" 33 bands="" country="International operators" operator="Smart Communications" status="" 34 bands="" country="International operators" operator="tyntec GmbH" status="" - 35 bands="" country="International operators" operator="Globecomm Network Services" status="" + 35 bands="GSM 850" country="International operators" operator="Globecomm Network Services" status="Operational" 36 bands="GSM 1800" country="International operators" operator="Azerfon" status="Operational" - 37 bands="2G, 3G, 4G Roaming" country="International operators" operator="Transatel" status="Operational" - 38 bands="" country="International operators" operator="Multiregional Transit Telecom (MTT)" status="" - 39 bands="" country="International operators" operator="MTX Connect Ltd" status="" + 37 bands="MVNO" country="International operators" operator="Transatel" status="Operational" + 38 bands="MVNO" country="International operators" operator="Multiregional TransitTelecom (MTT)" status="Operational" + 39 bands="MVNO" country="International operators" operator="MTX Connect Ltd" status="Operational" 40 bands="" country="International operators" operator="Deutsche Telekom AG" status="" - 41 bands="" country="International operators" operator="BodyTrace Netherlands B.V." status="" + 41 bands="MVNO" country="International operators" operator="BodyTrace Netherlands B.V." status="Operational" 42 bands="" country="International operators" operator="DCN Hub ehf" status="" - 43 bands="" country="International operators" operator="EMnify GmbH" status="" + 43 bands="MVNO" country="International operators" operator="EMnify GmbH" status="Operational" 44 bands="" country="International operators" operator="AT&T Inc." status="" 45 bands="" country="International operators" operator="Advanced Wireless Network Company Limited" status="" + 46 bands="MVNO" country="International operators" operator="Telecom26 AG" status="Operational" + 47 bands="" country="International operators" operator="Ooredoo" status="" 88 bands="" country="International operators" operator="UN Office for the Coordination of Humanitarian Affairs (OCHA)" status="" 00-99 diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index 9b3792d4..7bd86c46 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,7 +1,7 @@ # generated from RangeMessage.xml, downloaded from # https://www.isbn-international.org/export_rangemessage.xml -# file serial 163a541f-1011-4f23-ba84-80e3be02c022 -# file date Wed, 22 Apr 2015 16:00:13 CEST +# file serial e055fb55-2661-4102-a6dc-6885d2dab806 +# file date Thu, 3 Sep 2015 12:56:52 CEST 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" @@ -28,8 +28,8 @@ 00-19,200-699,7000-7999,80000-84999,85-99 602 agency="Indonesia" 00-07,0800-0899,0900-1099,1100-1199,1200-1399,14000-14999,1500-1699 - 17000-17999,18000-18999,19000-19999,200-699,70000-74999,7500-7999 - 8000-9499,95000-99999 + 17000-17999,18000-18999,19000-19999,200-674,6750-6999,70000-74999 + 7500-7999,8000-9499,95000-99999 603 agency="Saudi Arabia" 00-04,05-49,500-799,8000-8999,90000-99999 604 agency="Vietnam" @@ -172,7 +172,7 @@ 980 agency="Venezuela" 00-19,200-599,6000-9999 981 agency="Singapore" - 00-11,17000-19999,200-289,290-299,3000-3099,310-399,4000-9999 + 00-16,17000-19999,200-299,3000-3099,310-399,4000-9999 982 agency="South Pacific" 00-09,100-699,70-89,9000-9799,98000-99999 983 agency="Malaysia" @@ -188,7 +188,8 @@ 00-09,1000-1999,20000-29999,30-35,3600-3999,4000-4199,42-43,4400-4499 45000-48999,4900-4999,500-899,9000-9499,95000-99999 988 agency="Hong Kong, China" - 00-11,12000-14999,15000-16999,17000-19999,200-799,8000-9699,97000-99999 + 00-11,12000-14999,15000-16999,17000-19999,200-769,77000-79999,8000-9699 + 97000-99999 989 agency="Portugal" 0-1,20-54,550-799,8000-9499,95000-99999 9924 agency="Cambodia" @@ -258,7 +259,7 @@ 9956 agency="Cameroon" 0-0,10-39,400-899,9000-9999 9957 agency="Jordan" - 00-39,400-699,70-84,8500-8799,88-99 + 00-39,400-649,65-69,70-84,8500-8799,88-99 9958 agency="Bosnia and Herzegovina" 00-01,020-029,0300-0399,040-089,0900-0999,10-18,1900-1999,20-49,500-899 9000-9999 @@ -291,7 +292,7 @@ 9973 agency="Tunisia" 00-05,060-089,0900-0999,10-69,700-969,9700-9999 9974 agency="Uruguay" - 0-2,30-54,550-749,7500-9499,95-99 + 0-2,30-54,550-749,7500-9099,91-94,95-99 9975 agency="Moldova" 0-0,100-299,3000-3999,4000-4499,45-89,900-949,9500-9999 9976 agency="Tanzania" @@ -447,7 +448,7 @@ 99964 agency="Nicaragua" 0-1,20-79,800-999 99965 agency="Macau" - 0-3,40-69,700-999 + 0-3,40-62,630-999 99966 agency="Kuwait" 0-2,30-69,700-799,80-94 99967 agency="Paraguay" diff --git a/stdnum/isil.dat b/stdnum/isil.dat index c2e33d8c..f507d5e0 100644 --- a/stdnum/isil.dat +++ b/stdnum/isil.dat @@ -28,6 +28,7 @@ NZ$ country="New Zealand" ra_url="http://natlib.govt.nz/" ra="National Library o QA$ country="Qatar" ra_url="http://www.qnl.qa/" ra="Qatar National Library (QNL)" RU$ country="Russian Federation" ra_url="http://english.gpntb.ru/" ra="Russian National Public Library for Science and Technology" SI$ country="The Republic of Slovenia" ra_url="http://www.nuk.uni-lj.si/nukeng3.asp?id=311364382" ra="National and University Library" +SK$ country="Slovak Republic" ra_url="http://www.snk.sk" ra="Slovak National Library" O$ ra="See OCLC" OCLC$ country="WorldCat Symbol" ra_url="http://www.oclc.org" ra="OCLC" ZDB$ country="Staatsbibliothek zu Berlin - Zeitschriftendatenbank" ra="Staatsbibliothek zu Berlin" From 13618173f72ed2c014869ad9a4366b26f1d1e5d3 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 11 Oct 2015 13:39:10 +0200 Subject: [PATCH 081/654] Get files ready for 1.2 release --- ChangeLog | 306 +++++++++++++++++++++++++++++++ MANIFEST.in | 2 +- NEWS | 26 +++ README | 20 +- docs/index.rst | 16 ++ docs/stdnum.at.businessid.rst | 5 + docs/stdnum.br.cnpj.rst | 5 + docs/stdnum.ch.uid.rst | 5 + docs/stdnum.ch.vat.rst | 5 + docs/stdnum.cusip.rst | 5 + docs/stdnum.de.wkn.rst | 5 + docs/stdnum.ee.ik.rst | 5 + docs/stdnum.fi.associationid.rst | 5 + docs/stdnum.fi.ytunnus.rst | 5 + docs/stdnum.gb.sedol.rst | 5 + docs/stdnum.imo.rst | 5 + docs/stdnum.isin.rst | 5 + docs/stdnum.mx.rfc.rst | 5 + docs/stdnum.pl.pesel.rst | 5 + docs/stdnum.pl.regon.rst | 5 + docs/stdnum.ru.inn.rst | 5 + setup.py | 8 + stdnum/__init__.py | 18 +- 23 files changed, 472 insertions(+), 4 deletions(-) create mode 100644 docs/stdnum.at.businessid.rst create mode 100644 docs/stdnum.br.cnpj.rst create mode 100644 docs/stdnum.ch.uid.rst create mode 100644 docs/stdnum.ch.vat.rst create mode 100644 docs/stdnum.cusip.rst create mode 100644 docs/stdnum.de.wkn.rst create mode 100644 docs/stdnum.ee.ik.rst create mode 100644 docs/stdnum.fi.associationid.rst create mode 100644 docs/stdnum.fi.ytunnus.rst create mode 100644 docs/stdnum.gb.sedol.rst create mode 100644 docs/stdnum.imo.rst create mode 100644 docs/stdnum.isin.rst create mode 100644 docs/stdnum.mx.rfc.rst create mode 100644 docs/stdnum.pl.pesel.rst create mode 100644 docs/stdnum.pl.regon.rst create mode 100644 docs/stdnum.ru.inn.rst diff --git a/ChangeLog b/ChangeLog index 04bbf15b..9307465d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,309 @@ +2015-10-11 Arthur de Jong + + * [1327045] getcnloc.py, stdnum/cn/loc.dat, stdnum/iban.dat, + stdnum/imsi.dat, stdnum/isbn.dat, stdnum/isil.dat: Update + database files + + This also updates the script to download updated Chinese + location names. + +2015-10-11 Arthur de Jong + + * [a891c60] stdnum/al/nipt.py, stdnum/co/nit.py, stdnum/iban.py, + stdnum/ie/pps.py, stdnum/imei.py, stdnum/isan.py, + stdnum/iso6346.py, stdnum/it/codicefiscale.py, stdnum/meid.py, + stdnum/nl/postcode.py, stdnum/numdb.py, stdnum/pt/nif.py, + stdnum/us/atin.py, stdnum/us/ein.py, stdnum/us/itin.py, + stdnum/us/ptin.py, stdnum/us/ssn.py, stdnum/util.py: Code style + improvements + + Ensure that regular expressions are r'' strings, avoid too + long lines and fix line wrapping. Also avoid catching toplevel + Exception when possible and use binascii for hex to binary + conversion which is available in both Python 2 and 3. + +2015-10-11 Arthur de Jong + + * [3c7a302] stdnum/cusip.py, stdnum/de/wkn.py, stdnum/gb/sedol.py, + stdnum/isin.py: Convert security ids to ISIN + + Allow conversion from national securities identifiers to the + international ISIN. + +2015-10-11 Arthur de Jong + + * [c565517] stdnum/de/wkn.py, tests/test_de_wkn.doctest: Add + German Wertpapierkennnummer + + The format itself is pretty simple (no check digit) but this + module is more for completeness sake. + +2015-10-10 Arthur de Jong + + * [961815f] stdnum/gb/sedol.py, tests/test_gb_sedol.doctest: + Add SEDOL number + +2015-10-10 Arthur de Jong + + * [fb91775] stdnum/ru/__init__.py: Add information to Russian package + +2015-10-10 Arthur de Jong + + * [ebb5c07] MANIFEST.in, numdb-test.dat, stdnum/numdb.py, + tests/numdb-test.dat: Move numdb test file + + This places the test database file in the tests directory. + +2015-10-10 Arthur de Jong + + * [fa8099e] stdnum/imo.py: Add int. maritime org. number (IMO) + + This adds checks for the International Maritime Organization + number used to identify ships. However, there seem to be a lot + of ships with an IMO number that does not follow these rules + (different check digits or even length). + +2015-10-10 Arthur de Jong + + * [111b4fd] stdnum/isan.py, tests/test_isan.doctest: Fix handling + of strip_check_digits in ISAN + + This fixes the compact() function to honor the strip_check_digits + argument and does not validate the check digits if they are + passed to validate together with strip_check_digits. + +2015-10-10 Arthur de Jong + + * [9f9d13c] stdnum/isin.py, tests/test_isin.doctest: Add + international securities id (ISIN) + + This adds support for handling ISINs (International Securities + Identification Number). The can contain a CUSIP but performing + this additional validation is currently not performed. + +2015-10-09 Arthur de Jong + + * [522611c] stdnum/cusip.py, tests/test_cusip.doctest: Add CUSIP + number + +2015-10-08 Arthur de Jong + + * [320ecea] stdnum/ch/uid.py, stdnum/ch/vat.py, + tests/test_ch_uid.doctest, tests/test_ch_vat.doctest: Add Swiss + UID and VAT numbers + + The Swiss VAT number (MWST, TVA, IVA, TPV) is the UID + (Unternehmens-Identifikationsnummer) followed by one of the + VAT abbreviations. + +2015-10-05 Arthur de Jong + + * [ec9bcb0] stdnum/mx/__init__.py, stdnum/mx/rfc.py, + tests/test_mx_rfc.doctest: Add Mexican RFC number + + This adds support for the Mexican tax number RFC (Registro + Federal de Contribuyentes). + + This module includes a number of checks on the number but the + validation of the last check digit is disabled by default because + a large number of numbers were found that were otherwise valid + but had an invalid check digit. + +2015-10-04 Arthur de Jong + + * [fd0cfd9] stdnum/eu/vat.py, stdnum/util.py: Move finding VAT + module to util + + This moves the finding of a VAT module to the util module so + that it can be more easily re-used for non-EU countries. + +2015-10-04 Arthur de Jong + + * [38ed9c0] stdnum/co/nit.py, tests/test_co_nit.doctest: Update + Colombian NIT checks + + This adds a number of tests for numbers found online. The length + check has also been revisited because both shorter numbers and + longer number have been found. + + This also updates the format() function to handle arbitrary + length numbers. + +2015-10-02 Arthur de Jong + + * [d413f95] stdnum/isbn.py: Fix comment + +2015-10-02 Arthur de Jong + + * [3d1dbbb] stdnum/ar/cuit.py, stdnum/bg/egn.py, stdnum/bg/pnf.py, + stdnum/bg/vat.py, stdnum/co/nit.py, stdnum/dk/cpr.py, + stdnum/dk/cvr.py, stdnum/do/rnc.py, stdnum/ec/ruc.py, + stdnum/ee/kmkr.py, stdnum/fi/alv.py, stdnum/gb/vat.py, + stdnum/hu/anum.py, stdnum/is_/kennitala.py, stdnum/lv/pvn.py, + stdnum/mt/vat.py, stdnum/no/orgnr.py, stdnum/pl/nip.py, + stdnum/pl/pesel.py, stdnum/pl/regon.py, stdnum/ro/cf.py, + stdnum/ro/cnp.py: Use zip() instead of enumerate() + + Makes the code slightly simpler and more compact. + +2015-10-01 Sergio Isidoro + + * [222a87e] stdnum/fi/__init__.py: Add alias to hetu in for finnish + personal id code + +2015-09-27 Arthur de Jong + + * [e045c71] tests/test_eu_vat.doctest: Add more numbers found online + +2015-09-07 Dariusz Choruzy + + * [36217ac] stdnum/pl/regon.py, tests/test_pl_regon.doctest: + Add Polish REGON number + +2015-09-06 Dariusz Choruzy + + * [a0cb61f] stdnum/pl/pesel.py: Add Polish PESEL number + +2015-08-16 Arthur de Jong + + * [5ab8d24] stdnum/ru/__init__.py, stdnum/ru/inn.py, + tests/test_ru_inn.doctest: Add Russioan ИНН (INN) tax ID + + This adds a basic implementation of the Russian + Идентификационный номер + налогоплательщика (tax identification + number). This currently only checks the format, length and check + digits but not whether each of the parts of the number are valid + (e.g. valid region specified). + +2015-08-16 Arthur de Jong + + * [714fa60] stdnum/br/cnpj.py, tests/test_br_cnpj.doctest: Add + Brazillian CNPJ business identifier + + Add module for Cadastro Nacional da Pessoa Jurídica, the + Brazillian company identifier. + +2015-08-16 Arthur de Jong + + * [b939099] getiban.py, stdnum/iban.dat, tests/test_iban.doctest: + Update IBAN tests + + This updates the iban.dat file from the IBAN registry, includes + a fix for handling spaces in the BBAN and adds some more IBAN + examples from the IBAN registry. + +2015-08-16 Arthur de Jong + + * [7714db7] stdnum/iso9362.py: Make uppercase in compact() + + This changes the compact() function of the ISO 9362 module to + make all the letters uppercase. + +2015-08-16 Arthur de Jong + + * [6afa875] setup.cfg, stdnum/imei.py, stdnum/isbn.py, + stdnum/isil.py, stdnum/ismn.py, stdnum/meid.py, stdnum/us/atin.py, + stdnum/us/ein.py, stdnum/us/itin.py: Turn on and improve branch + coverage + +2015-08-16 Arthur de Jong + + * [e88ba0b] stdnum/dk/cpr.py, stdnum/is_/kennitala.py, + stdnum/it/codicefiscale.py: Small typo and code style fixes + +2015-08-03 Tomas Karasek + + * [243e50f] stdnum/ee/ik.py, tests/test_ee_ik.doctest: Add validation + of Estonian personal ID + +2015-06-12 Lari Haataja + + * [7f9c94f] stdnum/at/businessid.py: Add company register number + validation for Austria + +2015-07-12 Arthur de Jong + + * [0cbba6e] : Merge Finnish numbers provided by Holvi + + This merges the Finnish numbers provided by Holvi Payment Services + Oy as found here: https://github.com/holvi/python-stdnum + +2015-07-12 Arthur de Jong + + * [320326e] stdnum/fi/ytunnus.py: Split out format() function + + This uses the stdnum.fi.alv module more extensively and ensures + that validate() returns a compact representation and a separate + format() function is available. + +2015-06-23 Lari Haataja + + * [37f7fa6] stdnum/fi/__init__.py, stdnum/fi/ytunnus.py: Add + validation for Finnish y-tunnus (business identifier) + +2015-07-12 Arthur de Jong + + * [db24746] stdnum/fi/associationid.py: Add a whitelist for short + numbers and fix API + + This implements separate functions compact() and format() and + fixes the doctests. This also implements a whitelist of registered + short numbers to avoid accidentally validating just any number. + +2015-06-16 Lari Haataja + + * [8d30992] stdnum/fi/associationid.py: Validation for Finnish + association identifier + +2015-07-12 Arthur de Jong + + * [e107457] : Merge changes to use CN Open Data + +2015-07-12 Arthur de Jong + + * [a1a134e] stdnum/eu/vat.py: Fall back to pysimplesoap if suds + is unavailable + + Initial testing seems to suggest that proxy-support is not + complete with pysimplesoap (at least httplib2 and PySocks seem + to be required). + +2015-04-28 Lionel Elie Mamane + + * [8fe44f9] stdnum/eu/vat.py: Implement alternate VIES check + + Add a function to stdnum.eu.vat so that when one does a VIES VAT + number check, one gets a proof (certificate) that one did the + check, as defence against the VAT administration later putting + this in doubt. This certificate is provided by the VIES service, + if one provides one's own VAT number. + +2015-06-08 Jiangge Zhang + + * [6308261] stdnum/cn/loc.dat: Download and generate latest Chinese + location data. + +2015-06-08 Jiangge Zhang + + * [12ba352] getcnloc.py: Download GB2260 data from github.com/cn. + +2015-04-27 Arthur de Jong + + * [8925ae2] tests/test_iso6346.doctest: Fix copyright header + +2015-04-27 Arthur de Jong + + * [58775d9] ChangeLog, NEWS, README, docs/index.rst, + docs/stdnum.al.nipt.rst, docs/stdnum.ar.cuit.rst, + docs/stdnum.cl.rut.rst, docs/stdnum.co.nit.rst, + docs/stdnum.do.cedula.rst, docs/stdnum.do.rnc.rst, + docs/stdnum.is_.kennitala.rst, docs/stdnum.is_.vsk.rst, + docs/stdnum.iso9362.rst, docs/stdnum.no.mva.rst, + docs/stdnum.no.orgnr.rst, docs/stdnum.se.orgnr.rst, + docs/stdnum.sm.coe.rst, setup.py, stdnum/__init__.py: Get files + ready for 1.1 release + 2015-04-27 Arthur de Jong * [583b066] getcnloc.py, stdnum/cn/loc.dat, stdnum/iban.dat, diff --git a/MANIFEST.in b/MANIFEST.in index 320edf11..bc3f093b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ include README NEWS ChangeLog COPYING *.py -recursive-include tests *.doctest +recursive-include tests *.doctest *.dat recursive-include docs *.rst *.py diff --git a/NEWS b/NEWS index 3f584f9d..f40fdee6 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,29 @@ +changes from 1.1 to 1.2 +----------------------- + +* add modules for the following number formats: + - Austrian Company Register Numbers + - CNPJ (Cadastro Nacional da Pessoa Jurídica, Brazillian company identifier) + - UID (Unternehmens-Identifikationsnummer, Swiss business identifier) + - VAT, MWST, TVA, IVA, TPV (Mehrwertsteuernummer, the Swiss VAT number) + - CUSIP number (financial security identification number) + - Wertpapierkennnummer (German securities identification code) + - Isikukood (Estonian Personcal ID number) + - Finnish Association Identifier + - Y-tunnus (Finnish business identifier) + - SEDOL number (Stock Exchange Daily Official List number) + - IMO number (International Maritime Organization number) + - ISIN (International Securities Identification Number) + - RFC (Registro Federal de Contribuyentes, Mexican tax number) + - PESEL (Polish national identification number) + - REGON (Rejestr Gospodarki Narodowej, Polish register of economic units) + - ИНН (Идентификационный номер налогоплательщика, Russian tax identifier) +* add an alternate VIES check (check_vies_approx()) that includes a proof + (certificate) that the check was performed +* fall back to pysimplesoap if suds is unavailable +* test and code quality improvements + + changes from 1.0 to 1.1 ----------------------- diff --git a/README b/README index 563e4eb4..f9be19e0 100644 --- a/README +++ b/README @@ -11,20 +11,26 @@ Currently this package supports the following formats: * NIPT (Numri i Identifikimit për Personin e Tatueshëm, Albanian VAT number) * CUIT (Código Único de Identificación Tributaria, Argentinian tax number) + * Austrian Company Register Numbers * UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) * BTW, TVA, NWSt (Belgian VAT number) * EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) * PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) * VAT (Идентификационен номер по ДДС, Bulgarian VAT number) + * CNPJ (Cadastro Nacional da Pessoa Jurídica, Brazillian company identifier) * CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) * Swiss social security number ("Sozialversicherungsnummer") + * UID (Unternehmens-Identifikationsnummer, Swiss business identifier) + * VAT, MWST, TVA, IVA, TPV (Mehrwertsteuernummer, the Swiss VAT number) * RUT (Rol Único Tributario, Chilean national tax number) * RIC No. (Chinese Resident Identity Card Number) * NIT (Número De Identificación Tributaria, Colombian identity code) + * CUSIP number (financial security identification number) * Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) * DIČ (Daňové identifikační číslo, Czech VAT number) * RČ (Rodné číslo, the Czech birth number) * Ust ID Nr. (Umsatzsteur Identifikationnummer, German VAT number) + * Wertpapierkennnummer (German securities identification code) * CPR (personnummer, the Danish citizen number) * CVR (Momsregistreringsnummer, Danish VAT number) * Cedula (Dominican Republic national identification number) @@ -32,6 +38,7 @@ Currently this package supports the following formats: * EAN (International Article Number) * CI (Cédula de identidad, Ecuadorian personal identity code) * RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) + * Isikukood (Estonian Personcal ID number) * KMKR (Käibemaksukohuslase, Estonian VAT number) * CIF (Certificado de Identificación Fiscal, Spanish company tax number) * DNI (Documento nacional de identidad, Spanish personal identity codes) @@ -40,9 +47,12 @@ Currently this package supports the following formats: * SEPA Identifier of the Creditor (AT-02) * VAT (European Union VAT number) * ALV nro (Arvonlisäveronumero, Finnish VAT number) + * Finnish Association Identifier * HETU (Henkilötunnus, Finnish personal identity code) + * Y-tunnus (Finnish business identifier) * SIREN (a French company identification number) * n° TVA (taxe sur la valeur ajoutée, French VAT number) + * SEDOL number (Stock Exchange Daily Official List number) * VAT (United Kingdom (and Isle of Man) VAT registration number) * FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) * GRid (Global Release Identifier) @@ -52,12 +62,14 @@ Currently this package supports the following formats: * PPS No (Personal Public Service Number, Irish personal number) * VAT (Irish VAT number) * IMEI (International Mobile Equipment Identity) + * IMO number (International Maritime Organization number) * IMSI (International Mobile Subscriber Identity) * Kennitala (Icelandic personal and organisation identity code) * VSK number (Virðisaukaskattsnúmer, Icelandic VAT number) * ISAN (International Standard Audiovisual Number) * ISBN (International Standard Book Number) * ISIL (International Standard Identifier for Libraries) + * ISIN (International Securities Identification Number) * ISMN (International Standard Music Number) * ISO 6346 (International standard for container identification) * ISO 9362 (Business identifier codes) @@ -69,6 +81,7 @@ Currently this package supports the following formats: * PVN (Pievienotās vērtības nodokļa, Latvian VAT number) * MEID (Mobile Equipment Identifier) * VAT (Maltese VAT number) + * RFC (Registro Federal de Contribuyentes, Mexican tax number) * NRIC No. (Malaysian National Registration Identity Card Number) * Brin number (Dutch number for schools) * BSN (Burgerservicenummer, Dutch national identification number) @@ -78,9 +91,12 @@ Currently this package supports the following formats: * MVA (Merverdiavgift, Norwegian VAT number) * Orgnr (Organisasjonsnummer, Norwegian organisation number) * NIP (Numer Identyfikacji Podatkowej, Polish VAT number) + * PESEL (Polish national identification number) + * REGON (Rejestr Gospodarki Narodowej, Polish register of economic units) * NIF (Número de identificação fiscal, Portuguese VAT number) * CF (Cod de înregistrare în scopuri de TVA, Romanian VAT number) * CNP (Cod Numeric Personal, Romanian Numerical Personal Code) + * ИНН (Идентификационный номер налогоплательщика, Russian tax identifier) * Orgnr (Organisationsnummer, Swedish company number) * VAT (Moms, Mervärdesskatt, Swedish VAT number) * ID za DDV (Davčna številka, Slovenian VAT number) @@ -129,8 +145,8 @@ conversion functions. Requirements ------------ -The modules should not require any external Python modules and should be -pure Python. The modules are developed and tested with Python 2.6 but may +The modules should not require any external Python modules and should be pure +Python. The modules are developed and tested with Python 2.7 and 3.5 but may also work with older versions of Python. Copyright diff --git a/docs/index.rst b/docs/index.rst index 971502f6..59df1d5f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -87,20 +87,26 @@ Available formats al.nipt ar.cuit + at.businessid at.uid be.vat bg.egn bg.pnf bg.vat + br.cnpj br.cpf ch.ssn + ch.uid + ch.vat cl.rut cn.ric co.nit + cusip cy.vat cz.dic cz.rc de.vat + de.wkn dk.cpr dk.cvr do.cedula @@ -108,6 +114,7 @@ Available formats ean ec.ci ec.ruc + ee.ik ee.kmkr es.cif es.dni @@ -116,9 +123,12 @@ Available formats eu.at_02 eu.vat fi.alv + fi.associationid fi.hetu + fi.ytunnus fr.siren fr.tva + gb.sedol gb.vat gr.vat grid @@ -128,12 +138,14 @@ Available formats ie.pps ie.vat imei + imo imsi is_.kennitala is_.vsk isan isbn isil + isin ismn iso6346 iso9362 @@ -145,6 +157,7 @@ Available formats lv.pvn meid mt.vat + mx.rfc my.nric nl.brin nl.bsn @@ -154,9 +167,12 @@ Available formats no.mva no.orgnr pl.nip + pl.pesel + pl.regon pt.nif ro.cf ro.cnp + ru.inn se.orgnr se.vat si.ddv diff --git a/docs/stdnum.at.businessid.rst b/docs/stdnum.at.businessid.rst new file mode 100644 index 00000000..d417d018 --- /dev/null +++ b/docs/stdnum.at.businessid.rst @@ -0,0 +1,5 @@ +stdnum.at.businessid +==================== + +.. automodule:: stdnum.at.businessid + :members: \ No newline at end of file diff --git a/docs/stdnum.br.cnpj.rst b/docs/stdnum.br.cnpj.rst new file mode 100644 index 00000000..894f69ca --- /dev/null +++ b/docs/stdnum.br.cnpj.rst @@ -0,0 +1,5 @@ +stdnum.br.cnpj +============== + +.. automodule:: stdnum.br.cnpj + :members: \ No newline at end of file diff --git a/docs/stdnum.ch.uid.rst b/docs/stdnum.ch.uid.rst new file mode 100644 index 00000000..cea72ce5 --- /dev/null +++ b/docs/stdnum.ch.uid.rst @@ -0,0 +1,5 @@ +stdnum.ch.uid +============= + +.. automodule:: stdnum.ch.uid + :members: \ No newline at end of file diff --git a/docs/stdnum.ch.vat.rst b/docs/stdnum.ch.vat.rst new file mode 100644 index 00000000..bf94a69b --- /dev/null +++ b/docs/stdnum.ch.vat.rst @@ -0,0 +1,5 @@ +stdnum.ch.vat +============= + +.. automodule:: stdnum.ch.vat + :members: \ No newline at end of file diff --git a/docs/stdnum.cusip.rst b/docs/stdnum.cusip.rst new file mode 100644 index 00000000..f0e30f71 --- /dev/null +++ b/docs/stdnum.cusip.rst @@ -0,0 +1,5 @@ +stdnum.cusip +============ + +.. automodule:: stdnum.cusip + :members: \ No newline at end of file diff --git a/docs/stdnum.de.wkn.rst b/docs/stdnum.de.wkn.rst new file mode 100644 index 00000000..4c6a17c6 --- /dev/null +++ b/docs/stdnum.de.wkn.rst @@ -0,0 +1,5 @@ +stdnum.de.wkn +============= + +.. automodule:: stdnum.de.wkn + :members: \ No newline at end of file diff --git a/docs/stdnum.ee.ik.rst b/docs/stdnum.ee.ik.rst new file mode 100644 index 00000000..24189d4d --- /dev/null +++ b/docs/stdnum.ee.ik.rst @@ -0,0 +1,5 @@ +stdnum.ee.ik +============ + +.. automodule:: stdnum.ee.ik + :members: \ No newline at end of file diff --git a/docs/stdnum.fi.associationid.rst b/docs/stdnum.fi.associationid.rst new file mode 100644 index 00000000..fa48a7c2 --- /dev/null +++ b/docs/stdnum.fi.associationid.rst @@ -0,0 +1,5 @@ +stdnum.fi.associationid +======================= + +.. automodule:: stdnum.fi.associationid + :members: \ No newline at end of file diff --git a/docs/stdnum.fi.ytunnus.rst b/docs/stdnum.fi.ytunnus.rst new file mode 100644 index 00000000..7af7de85 --- /dev/null +++ b/docs/stdnum.fi.ytunnus.rst @@ -0,0 +1,5 @@ +stdnum.fi.ytunnus +================= + +.. automodule:: stdnum.fi.ytunnus + :members: \ No newline at end of file diff --git a/docs/stdnum.gb.sedol.rst b/docs/stdnum.gb.sedol.rst new file mode 100644 index 00000000..c72bb72c --- /dev/null +++ b/docs/stdnum.gb.sedol.rst @@ -0,0 +1,5 @@ +stdnum.gb.sedol +=============== + +.. automodule:: stdnum.gb.sedol + :members: \ No newline at end of file diff --git a/docs/stdnum.imo.rst b/docs/stdnum.imo.rst new file mode 100644 index 00000000..7a14a404 --- /dev/null +++ b/docs/stdnum.imo.rst @@ -0,0 +1,5 @@ +stdnum.imo +========== + +.. automodule:: stdnum.imo + :members: \ No newline at end of file diff --git a/docs/stdnum.isin.rst b/docs/stdnum.isin.rst new file mode 100644 index 00000000..c132e8a6 --- /dev/null +++ b/docs/stdnum.isin.rst @@ -0,0 +1,5 @@ +stdnum.isin +=========== + +.. automodule:: stdnum.isin + :members: \ No newline at end of file diff --git a/docs/stdnum.mx.rfc.rst b/docs/stdnum.mx.rfc.rst new file mode 100644 index 00000000..71b24df7 --- /dev/null +++ b/docs/stdnum.mx.rfc.rst @@ -0,0 +1,5 @@ +stdnum.mx.rfc +============= + +.. automodule:: stdnum.mx.rfc + :members: \ No newline at end of file diff --git a/docs/stdnum.pl.pesel.rst b/docs/stdnum.pl.pesel.rst new file mode 100644 index 00000000..5fed28e9 --- /dev/null +++ b/docs/stdnum.pl.pesel.rst @@ -0,0 +1,5 @@ +stdnum.pl.pesel +=============== + +.. automodule:: stdnum.pl.pesel + :members: \ No newline at end of file diff --git a/docs/stdnum.pl.regon.rst b/docs/stdnum.pl.regon.rst new file mode 100644 index 00000000..b4434144 --- /dev/null +++ b/docs/stdnum.pl.regon.rst @@ -0,0 +1,5 @@ +stdnum.pl.regon +=============== + +.. automodule:: stdnum.pl.regon + :members: \ No newline at end of file diff --git a/docs/stdnum.ru.inn.rst b/docs/stdnum.ru.inn.rst new file mode 100644 index 00000000..66c0921a --- /dev/null +++ b/docs/stdnum.ru.inn.rst @@ -0,0 +1,5 @@ +stdnum.ru.inn +============= + +.. automodule:: stdnum.ru.inn + :members: \ No newline at end of file diff --git a/setup.py b/setup.py index 399893bd..2562691f 100755 --- a/setup.py +++ b/setup.py @@ -49,6 +49,13 @@ 'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)', 'Operating System :: OS Independent', 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Topic :: Office/Business :: Financial', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Text Processing :: General', ], @@ -56,5 +63,6 @@ package_data={'': ['*.dat']}, extras_require={ 'VIES': ['suds'], + 'VIES-ALT': ['PySimpleSOAP'], }, ) diff --git a/stdnum/__init__.py b/stdnum/__init__.py index 1e32343c..78c033dd 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -27,20 +27,26 @@ * al.nipt: NIPT (Numri i Identifikimit për Personin e Tatueshëm, Albanian VAT number) * ar.cuit: CUIT (Código Único de Identificación Tributaria, Argentinian tax number) +* at.businessid: Austrian Company Register Numbers * at.uid: UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) * be.vat: BTW, TVA, NWSt (Belgian VAT number) * bg.egn: EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) * bg.pnf: PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) * bg.vat: VAT (Идентификационен номер по ДДС, Bulgarian VAT number) +* br.cnpj: CNPJ (Cadastro Nacional da Pessoa Jurídica, Brazillian company identifier) * br.cpf: CPF (Cadastro de Pessoas Físicas, Brazillian national identifier) * ch.ssn: Swiss social security number ("Sozialversicherungsnummer") +* ch.uid: UID (Unternehmens-Identifikationsnummer, Swiss business identifier) +* ch.vat: VAT, MWST, TVA, IVA, TPV (Mehrwertsteuernummer, the Swiss VAT number) * cl.rut: RUT (Rol Único Tributario, Chilean national tax number) * cn.ric: RIC No. (Chinese Resident Identity Card Number) * co.nit: NIT (Número De Identificación Tributaria, Colombian identity code) +* cusip: CUSIP number (financial security identification number) * cy.vat: Αριθμός Εγγραφής Φ.Π.Α. (Cypriot VAT number) * cz.dic: DIČ (Daňové identifikační číslo, Czech VAT number) * cz.rc: RČ (Rodné číslo, the Czech birth number) * de.vat: Ust ID Nr. (Umsatzsteur Identifikationnummer, German VAT number) +* de.wkn: Wertpapierkennnummer (German securities identification code) * dk.cpr: CPR (personnummer, the Danish citizen number) * dk.cvr: CVR (Momsregistreringsnummer, Danish VAT number) * do.cedula: Cedula (Dominican Republic national identification number) @@ -48,6 +54,7 @@ * ean: EAN (International Article Number) * ec.ci: CI (Cédula de identidad, Ecuadorian personal identity code) * ec.ruc: RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) +* ee.ik: Isikukood (Estonian Personcal ID number) * ee.kmkr: KMKR (Käibemaksukohuslase, Estonian VAT number) * es.cif: CIF (Certificado de Identificación Fiscal, Spanish company tax number) * es.dni: DNI (Documento nacional de identidad, Spanish personal identity codes) @@ -56,9 +63,12 @@ * eu.at_02: SEPA Identifier of the Creditor (AT-02) * eu.vat: VAT (European Union VAT number) * fi.alv: ALV nro (Arvonlisäveronumero, Finnish VAT number) +* fi.associationid: Finnish Association Identifier * fi.hetu: HETU (Henkilötunnus, Finnish personal identity code) +* fi.ytunnus: Y-tunnus (Finnish business identifier) * fr.siren: SIREN (a French company identification number) * fr.tva: n° TVA (taxe sur la valeur ajoutée, French VAT number) +* gb.sedol: SEDOL number (Stock Exchange Daily Official List number) * gb.vat: VAT (United Kingdom (and Isle of Man) VAT registration number) * gr.vat: FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) * grid: GRid (Global Release Identifier) @@ -68,12 +78,14 @@ * ie.pps: PPS No (Personal Public Service Number, Irish personal number) * ie.vat: VAT (Irish VAT number) * imei: IMEI (International Mobile Equipment Identity) +* imo: IMO number (International Maritime Organization number) * imsi: IMSI (International Mobile Subscriber Identity) * is_.kennitala: Kennitala (Icelandic personal and organisation identity code) * is_.vsk: VSK number (Virðisaukaskattsnúmer, Icelandic VAT number) * isan: ISAN (International Standard Audiovisual Number) * isbn: ISBN (International Standard Book Number) * isil: ISIL (International Standard Identifier for Libraries) +* isin: ISIN (International Securities Identification Number) * ismn: ISMN (International Standard Music Number) * iso6346: ISO 6346 (International standard for container identification) * iso9362: ISO 9362 (Business identifier codes) @@ -85,6 +97,7 @@ * lv.pvn: PVN (Pievienotās vērtības nodokļa, Latvian VAT number) * meid: MEID (Mobile Equipment Identifier) * mt.vat: VAT (Maltese VAT number) +* mx.rfc: RFC (Registro Federal de Contribuyentes, Mexican tax number) * my.nric: NRIC No. (Malaysian National Registration Identity Card Number) * nl.brin: Brin number (Dutch number for schools) * nl.bsn: BSN (Burgerservicenummer, Dutch national identification number) @@ -94,9 +107,12 @@ * no.mva: MVA (Merverdiavgift, Norwegian VAT number) * no.orgnr: Orgnr (Organisasjonsnummer, Norwegian organisation number) * pl.nip: NIP (Numer Identyfikacji Podatkowej, Polish VAT number) +* pl.pesel: PESEL (Polish national identification number) +* pl.regon: REGON (Rejestr Gospodarki Narodowej, Polish register of economic units) * pt.nif: NIF (Número de identificação fiscal, Portuguese VAT number) * ro.cf: CF (Cod de înregistrare în scopuri de TVA, Romanian VAT number) * ro.cnp: CNP (Cod Numeric Personal, Romanian Numerical Personal Code) +* ru.inn: ИНН (Идентификационный номер налогоплательщика, Russian tax identifier) * se.orgnr: Orgnr (Organisationsnummer, Swedish company number) * se.vat: VAT (Moms, Mervärdesskatt, Swedish VAT number) * si.ddv: ID za DDV (Davčna številka, Slovenian VAT number) @@ -137,4 +153,4 @@ # the version number of the library -__version__ = '1.1' +__version__ = '1.2' From fb0efe0e35d4dc3e3fdff87fdf5150ed3368f58d Mon Sep 17 00:00:00 2001 From: Ronald Paloschi Date: Thu, 15 Oct 2015 22:03:13 -0300 Subject: [PATCH 082/654] Fix for when ISO 6346 checksum is 10 Bug fix for when the checksum is 10, it was compared to 0 and failed. New doctest exposing the bug that passes after the fix is applied. See: https://github.com/arthurdejong/python-stdnum/pull/30 --- stdnum/iso6346.py | 2 +- tests/test_iso6346.doctest | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/stdnum/iso6346.py b/stdnum/iso6346.py index 7958bffe..5b936fc4 100644 --- a/stdnum/iso6346.py +++ b/stdnum/iso6346.py @@ -59,7 +59,7 @@ def calc_check_digit(number): alphabet = '0123456789A BCDEFGHIJK LMNOPQRSTU VWXYZ' return str(sum( alphabet.index(n) * pow(2, i) - for i, n in enumerate(number)) % 11) + for i, n in enumerate(number)) % 11 % 10) def validate(number): diff --git a/tests/test_iso6346.doctest b/tests/test_iso6346.doctest index 32b67ea3..a6b2f49b 100644 --- a/tests/test_iso6346.doctest +++ b/tests/test_iso6346.doctest @@ -39,6 +39,8 @@ True 'TCNU7200794' >>> iso6346.validate('tolu4734787') 'TOLU4734787' +>>> iso6346.validate('GYOU4047990') +'GYOU4047990' Test with invalid numbers: From 2881b86206f01bdc50fb5c9e171189b42ea55ebf Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Wed, 28 Oct 2015 18:24:14 +0100 Subject: [PATCH 083/654] Fix problem with check_vies_approx() --- stdnum/eu/vat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index 94525d57..5421f631 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -154,6 +154,6 @@ def check_vies_approx(number, requester): # pragma: no cover # network access for the tests and unnecessarily load the VIES website number = compact(number) requester = compact(requester) - return _get_client.checkVatApprox( + return _get_client().checkVatApprox( countryCode=number[:2], vatNumber=number[2:], requesterCountryCode=requester[:2], requesterVatNumber=requester[2:]) From 96c8151e07e5800f8396d10778615024e61abc6f Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Wed, 28 Oct 2015 22:12:28 +0100 Subject: [PATCH 084/654] Fix SOAP client re-use This fixes a bug when checking re-use of the global SOAP client object. The object could not be evaluated in boolean context so is no explicitly compared to None. For suds a MethodNotFound exception would be raised for __nonzero__() (which Python uses for boolean comparison). --- stdnum/eu/vat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index 5421f631..2c6728ec 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -117,7 +117,7 @@ def _get_client(): # pragma: no cover (no tests for this function) # this function isn't automatically tested because the functions using # it are not automatically tested global _vies_client - if not _vies_client: + if _vies_client is None: try: from urllib import getproxies except ImportError: From 0061564e7718e8ea3e881030d71736822a3166da Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 30 Oct 2015 18:58:37 +0100 Subject: [PATCH 085/654] Integrate information from the wiki This adds the information that was previously in the Trac wiki into the source docstrings because the Trac instance is being phased out. This also includes small updates to the ISIL module. --- stdnum/dk/cpr.py | 20 ++++++++++++++------ stdnum/iban.py | 6 +++++- stdnum/imei.py | 10 +++++++--- stdnum/isbn.py | 21 ++++++++++++++++++--- stdnum/isil.py | 45 +++++++++++++++++++++++++++++++-------------- stdnum/issn.py | 12 ++++++++++-- stdnum/nl/bsn.py | 12 +++++++++--- stdnum/us/ssn.py | 21 +++++++++++++++++++-- stdnum/verhoeff.py | 36 +++++++++++++++++++++++------------- 9 files changed, 136 insertions(+), 47 deletions(-) diff --git a/stdnum/dk/cpr.py b/stdnum/dk/cpr.py index 4bf4a449..bdbbbb95 100644 --- a/stdnum/dk/cpr.py +++ b/stdnum/dk/cpr.py @@ -19,13 +19,21 @@ """CPR (personnummer, the Danish citizen number). -The CPR is the national number to identify Danish citizens. The number +The CPR is the national number to identify Danish citizens and is stored in +the Det Centrale Personregister (Civil Registration System). The number consists of 10 digits in the format DDMMYY-SSSS where the first part -represents the birth date and the second a sequence number. The first -digit of the sequence number indicates the century. - -The numbers used to validate using a checksum but since the sequence -numbers ran out this was abandoned in 2007. +represents the birth date and the second a sequence number. The first digit +of the sequence number indicates the century. + +The numbers used to validate using a checksum but since the sequence numbers +ran out this was abandoned in 2007. It is also not possible to use the +checksum only for numbers that have a birth date before that because the +numbers are also assigned to immigrants. + +More information: + https://en.wikipedia.org/wiki/Personal_identification_number_(Denmark) + https://da.wikipedia.org/wiki/CPR-nummer + https://cpr.dk/ >>> validate('211062-5629') '2110625629' diff --git a/stdnum/iban.py b/stdnum/iban.py index ee717862..ff33cddc 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -1,6 +1,6 @@ # iban.py - functions for handling International Bank Account Numbers (IBANs) # -# Copyright (C) 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2011-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -27,6 +27,10 @@ Some countries may also use checksum algorithms within their number but this is currently not checked by this number. +More information: + https://en.wikipedia.org/wiki/International_Bank_Account_Number + https://www.swift.com/products_services/bic_and_iban_format_registration_iban_format_r + >>> validate('GR16 0110 1050 0000 1054 7023 795') 'GR1601101050000010547023795' >>> validate('BE31435411161155') diff --git a/stdnum/imei.py b/stdnum/imei.py index 35f76e1e..8c0c1a0f 100644 --- a/stdnum/imei.py +++ b/stdnum/imei.py @@ -1,7 +1,7 @@ # imei.py - functions for handling International Mobile Equipment Identity # (IMEI) numbers # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,8 +20,12 @@ """IMEI (International Mobile Equipment Identity). -The IMEI is used to identify mobile phones. The IMEI may optionally -include a check digit which is validated using the Luhn algorithm. +The IMEI is used to identify mobile phones. An IMEI is 14, 15 (when the +check digit is included) or 16 digits (IMEISV) long. The check digit is +validated using the Luhn algorithm. + +More information: + https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity >>> validate('35686800-004141-20') '3568680000414120' diff --git a/stdnum/isbn.py b/stdnum/isbn.py index a49d9d70..6b9233b5 100644 --- a/stdnum/isbn.py +++ b/stdnum/isbn.py @@ -1,6 +1,6 @@ # isbn.py - functions for handling ISBNs # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,8 +20,23 @@ """ISBN (International Standard Book Number). The ISBN is the International Standard Book Number, used to identify -publications. This module supports both numbers in ISBN-10 (10-digit) and -ISBN-13 (13-digit) format. +publications. An ISBN is used to identify books. Numbers can either have 10 +digits (in ISBN-10 format) or 13 digits (in ISBN-13, EAN compatible format). +An ISBN has the following components: + +* 3-digit (only in ISBN-13) Bookland code +* 1 to 5-digit group identifier (identifies country or language) +* 1 to 7-digit publisher code +* 1 to 8-digit item number (identifies the book) +* a check digit + +More information: + https://en.wikipedia.org/wiki/International_Standard_Book_Number + https://www.isbn-international.org/range_file_generation + +This module also offers functions for converting to ISBN-13 and formatting +based on how the number should be split into a bookland code, group +identifier, publisher code, item number and check digit. >>> validate('978-9024538270') '9789024538270' diff --git a/stdnum/isil.py b/stdnum/isil.py index b0ee905b..219e89ee 100644 --- a/stdnum/isil.py +++ b/stdnum/isil.py @@ -1,7 +1,7 @@ # isil.py - functions for handling identifiers for libraries and related # organizations # -# Copyright (C) 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2011-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,8 +20,27 @@ """ISIL (International Standard Identifier for Libraries). -The ISIL is the International Standard Identifier for -Libraries and Related Organizations. +The ISIL is the International Standard Identifier for Libraries and Related +Organizations (ISO 15511) used to uniquely identify libraries, archives, +museums, and similar organisations. + +The identifier can be up to 15 characters that may use digits, +letters (case insensitive) hyphens, colons and slashes. The non-alphanumeric +characters are part of the identifier and are not just for readability. + +The identifier consists of two parts separated by a hyphen. The first part is +either a two-letter ISO 3166 country code or a (not two-letter) non-national +prefix that identifies the agency that issued the ISIL. The second part is +the is the identifier issued by that agency. + +Only the first part can be validated since it is registered globally. There +may be some validation possible with the second parts (some agencies provide +web services for validation) but there is no common format to these services. + +More information: + https://en.wikipedia.org/wiki/ISBT_128 + http://biblstandard.dk/isil/ + http://www.iso.org/iso/catalogue_detail?csnumber=57332 >>> validate('IT-RM0267') 'IT-RM0267' @@ -46,7 +65,8 @@ # the valid characters in an ISIL -_alphabet = set('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-:/') +_alphabet = set( + '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-:/') def compact(number): @@ -55,7 +75,7 @@ def compact(number): return clean(number, '').strip() -def _known_agency(agency): +def _is_known_agency(agency): """Checks whether the specified agency is valid.""" # look it up in the db from stdnum import numdb @@ -65,22 +85,19 @@ def _known_agency(agency): def validate(number): - """Checks to see if the number provided is a valid isil (or isilSV) - number.""" + """Checks to see if the number provided is a valid ISIL.""" number = compact(number) - for n in number: - if n not in _alphabet: - raise InvalidFormat() + if not all(x in _alphabet for x in number): + raise InvalidFormat() if len(number) > 15: raise InvalidLength() - if not _known_agency(number.split('-')[0]): + if not _is_known_agency(number.split('-')[0]): raise InvalidComponent() return number def is_valid(number): - """Checks to see if the number provided is a valid isil (or isilSV) - number.""" + """Checks to see if the number provided is a valid ISIL.""" try: return bool(validate(number)) except ValidationError: @@ -91,6 +108,6 @@ def format(number): """Reformat the passed number to the standard format.""" number = compact(number) parts = number.split('-') - if len(parts) > 1 and _known_agency(parts[0]): + if len(parts) > 1 and _is_known_agency(parts[0]): parts[0] = parts[0].upper() return '-'.join(parts) diff --git a/stdnum/issn.py b/stdnum/issn.py index 6cfabbf1..8be1f2cc 100644 --- a/stdnum/issn.py +++ b/stdnum/issn.py @@ -1,6 +1,6 @@ # issn.py - functions for handling ISSNs # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,15 @@ """ISSN (International Standard Serial Number). The ISSN (International Standard Serial Number) is the standard code to -identify periodical publications. It has a checksum similar to ISBN-10. +identify periodical publications (e.g. magazines). + +An ISSN has 8 digits and is formatted in two pairs of 4 digits separated by a +hyphen. The last digit is a check digit and may be 0-9 or X (similar to +ISBN-10). + +More information: + https://en.wikipedia.org/wiki/International_Standard_Serial_Number + http://www.issn.org/ >>> validate('0024-9319') '00249319' diff --git a/stdnum/nl/bsn.py b/stdnum/nl/bsn.py index b8926c99..280cc9bd 100644 --- a/stdnum/nl/bsn.py +++ b/stdnum/nl/bsn.py @@ -1,6 +1,6 @@ # bsn.py - functions for handling BSNs # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,8 +19,14 @@ """BSN (Burgerservicenummer, Dutch national identification number). -The BSN is a number with up to 9 digits (the leading 0's are commonly left -out) which is used as the Dutch national identification number. +The BSN is a unique personal identifier and has been introduced as the +successor to the sofinummer. The number consists of up to 9 digits (the +leading 0's are commonly left out) and contains a simple checksum. + +More information: + https://en.wikipedia.org/wiki/National_identification_number#Netherlands + https://nl.wikipedia.org/wiki/Burgerservicenummer + http://www.burgerservicenummer.nl/ >>> validate('1112.22.333') '111222333' diff --git a/stdnum/us/ssn.py b/stdnum/us/ssn.py index d4df8348..d4058bf6 100644 --- a/stdnum/us/ssn.py +++ b/stdnum/us/ssn.py @@ -1,6 +1,6 @@ # ssn.py - functions for handling SSNs # -# Copyright (C) 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2011-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,24 @@ """SSN (U.S. Social Security Number). The Social Security Number is used to identify individuals for taxation -purposes. +purposes. It is a 9-digit number that consists of a 3-digit area number, a +2-digit group number and a 4-digit serial number. The number does not use a +check digit. + +Some validation options are available but with the introduction of Social +Security Number Randomization it is no longer possible to validate using the +High Group History List. Some areas, groups and ranges can be blacklisted +though. + +There are several on-line verification facilities available, either for +Employers or at a fee but validation requires more information than just the +number (e.g. name, date of birth, etc). Another means of validation is the +Death Master File which can be ordered on DVD. + +More information: + https://en.wikipedia.org/wiki/Social_Security_number + https://www.ssa.gov/employer/verifySSN.htm + https://en.wikipedia.org/wiki/Death_Master_File >>> validate('536-90-4399') '536904399' diff --git a/stdnum/verhoeff.py b/stdnum/verhoeff.py index 00037e0f..5d6fb150 100644 --- a/stdnum/verhoeff.py +++ b/stdnum/verhoeff.py @@ -1,6 +1,6 @@ # verhoeff.py - functions for performing the Verhoeff checksum # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2015 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,8 +19,18 @@ """The Verhoeff algorithm. -The Verhoeff algorithm uses two tables for permutations and -multiplications to calculate a checksum. +The Verhoeff algorithm is a checksum algorithm that should catch most common +(typing) errors in numbers. The algorithm uses two tables for permutations +and multiplications and as a result is more complex than the Luhn algorithm. + +More information: + https://en.wikipedia.org/wiki/Verhoeff_algorithm + https://en.wikibooks.org/wiki/Algorithm_Implementation/Checksums/Verhoeff_Algorithm + +The module provides the checksum() function to calculate the Verhoeff +checksum a calc_check_digit() function to generate a check digit that can be +append to an existing number to result in a number with a valid checksum and +validation functions. >>> validate('1234') Traceback (most recent call last): @@ -41,16 +51,16 @@ # Verhoeff algorithm. _multiplication_table = ( - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], - [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], - [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], - [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], - [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], - [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], - [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], - [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], - [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], - [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) + (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), + (1, 2, 3, 4, 0, 6, 7, 8, 9, 5), + (2, 3, 4, 0, 1, 7, 8, 9, 5, 6), + (3, 4, 0, 1, 2, 8, 9, 5, 6, 7), + (4, 0, 1, 2, 3, 9, 5, 6, 7, 8), + (5, 9, 8, 7, 6, 0, 4, 3, 2, 1), + (6, 5, 9, 8, 7, 1, 0, 4, 3, 2), + (7, 6, 5, 9, 8, 2, 1, 0, 4, 3), + (8, 7, 6, 5, 9, 3, 2, 1, 0, 4), + (9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) _permutation_table = ( (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), From 64577342c86a759a6c72905774ca269bf1820f03 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Thu, 3 Mar 2016 22:44:46 +0100 Subject: [PATCH 086/654] Update database files This also updates the getcnloc and getiban scripts to use new URLs. --- getcnloc.py | 4 +- getiban.py | 4 +- stdnum/cn/loc.dat | 2 +- stdnum/iban.dat | 6 +- stdnum/imsi.dat | 454 ++++++++++++++++++++-------------------------- stdnum/isbn.dat | 18 +- stdnum/isil.dat | 2 +- 7 files changed, 217 insertions(+), 273 deletions(-) diff --git a/getcnloc.py b/getcnloc.py index 136cbf25..c0aac874 100755 --- a/getcnloc.py +++ b/getcnloc.py @@ -3,7 +3,7 @@ # getcnloc.py - script to fetch data from the CN Open Data community # # Copyright (C) 2014-2015 Jiangge Zhang -# Copyright (C) 2015 Arthur de Jong +# Copyright (C) 2015-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -54,7 +54,7 @@ def fetch_data(): data_collection = OrderedDict() for revision in data_revisions: - response = requests.get('%s/raw/master/%s.txt' % (data_url, revision)) + response = requests.get('%s/raw/release/%s.txt' % (data_url, revision)) if response.ok: print('%s is fetched' % revision, file=sys.stderr) else: diff --git a/getiban.py b/getiban.py index e026293e..44d9f19e 100755 --- a/getiban.py +++ b/getiban.py @@ -2,7 +2,7 @@ # getiban.py - script to donwload and parse data from the IBAN registry # -# Copyright (C) 2011-2015 Arthur de Jong +# Copyright (C) 2011-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -28,7 +28,7 @@ # The place where the current version of IBAN_Registry.txt can be downloaded. -download_url = 'http://www.swift.com/dsp/resources/documents/IBAN_Registry.txt' +download_url = 'https://www.swift.com/node/11971' def clean_row(row): diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat index 1fcb87be..f7b1a79e 100644 --- a/stdnum/cn/loc.dat +++ b/stdnum/cn/loc.dat @@ -1,6 +1,6 @@ # generated from National Bureau of Statistics of the People's # Republic of China, downloaded from https://github.com/cn/GB2260 -# 2015-10-11 10:02:20.899770 +# 2016-03-02 22:38:33.696025 110101 county="东城区" prefecture="市辖区" province="北京市" 110102 county="西城区" prefecture="市辖区" province="北京市" 110103 county="崇文区" prefecture="市辖区" province="北京市" diff --git a/stdnum/iban.dat b/stdnum/iban.dat index 69710fa2..e9fce125 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -1,5 +1,5 @@ # generated from IBAN_Registry.txt, downloaded from -# http://www.swift.com/dsp/resources/documents/IBAN_Registry.txt +# https://www.swift.com/node/11971 AL country="Albania" bban="8!n16!c" AD country="Andorra" bban="4!n4!n12!c" AT country="Austria" bban="5!n11!n" @@ -54,11 +54,12 @@ PL country="Poland" bban="8!n16!n" PT country="Portugal" bban="4!n4!n11!n2!n" QA country="Qatar" bban="4!a21!c" RO country="Romania" bban="4!a16!c" -LC country="Saint Lucia" bban="4!a24n" +LC country="Saint Lucia" bban="4!a24!n" SM country="San Marino" bban="1!a5!n5!n12!c" ST country="Sao Tome And Principe" bban="8!n11!n2!n" SA country="Saudi Arabia" bban="2!n18!c" RS country="Serbia" bban="3!n13!n2!n" +SC country="Seychelles" bban="4a!2n!2n!16n!3a!" SK country="Slovak Republic" bban="4!n6!n10!n" SI country="Slovenia" bban="5!n8!n2!n" ES country="Spain" bban="4!n4!n1!n1!n10!n" @@ -67,6 +68,7 @@ CH country="Switzerland" bban="5!n12!c" TL country="Timor-Leste" bban="3!n14!n2!n" TN country="Tunisia" bban="2!n3!n13!n2!n" TR country="Turkey" bban="5!n1!n16!c" +UA country="Ukraine" bban="6!n19!c" AE country="United Arab Emirates" bban="3!n16!n" GB country="United Kingdom" bban="4!a6!n8!n" VG country="Virgin Islands, British" bban="4!a16!n" diff --git a/stdnum/imsi.dat b/stdnum/imsi.dat index fa0f5c30..f665ff84 100644 --- a/stdnum/imsi.dat +++ b/stdnum/imsi.dat @@ -100,15 +100,15 @@ 30 bands="" cc="fr" country="France" operator="Symacom" status="" 31 bands="MVNO" brand="Vectone Mobile" cc="fr" country="France" operator="Mundio Mobile" status="Operational" 88 bands="GSM 900 / GSM 1800" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" - 89 bands="" cc="fr" country="France" operator="Omer Telecom Ltd" status="Not operational" + 89 bands="" cc="fr" country="France" operator="Fondation b-com" status="" 90 bands="" cc="fr" country="France" operator="Images & Réseaux" status="" 91 bands="" cc="fr" country="France" operator="Orange S.A." status="" 92 bands="TD-LTE 2300 / LTE 2600" brand="Com4Innov" cc="fr" country="France" operator="Association Plate-forme Télécom" status="Operational" - 93 bands="" cc="fr" country="France" operator="TDF" status="" + 93 bands="" cc="fr" country="France" operator="TDF" status="Not operational" 94 bands="" cc="fr" country="France" operator="Halys" status="" 00-99 212 - 01 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="Office des Telephones" cc="mc" country="Monaco" operator="Monaco Telecom" status="Operational" + 01 bands="GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Office des Telephones" cc="mc" country="Monaco" operator="Monaco Telecom" status="Operational" 00-99 213 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" @@ -150,8 +150,9 @@ 51 bands="GSM-R" brand="ADIF" cc="es" country="Spain" operator="Administrador de Infraestructuras Ferroviarias" status="Operational" 00-99 216 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor Hungary" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" 02 bands="" cc="hu" country="Hungary" operator="MVM Net Ltd." status="" + 03 bands="1800" brand="DIGI" cc="hu" country="Hungary" operator="DIGI Telecommunication Ltd." status="" 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" 70 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" 71 bands="MVNO" brand="UPC Hungary" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" @@ -177,27 +178,27 @@ 07 bands="CDMA 450" cc="rs" country="Serbia" operator="Orion Telekom" status="Operational" 00-99 222 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="TIM" cc="it" country="Italy" operator="Telecom Italia S.p.A" status="Operational" 02 bands="Satellite (Globalstar)" brand="Elsacom" cc="it" country="Italy" status="Not operational" 04 bands="" brand="Intermatica" cc="it" country="Italy" status="" 05 bands="" brand="Telespazio" cc="it" country="Italy" status="" - 06 bands="" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel B.V." status="" + 06 bands="" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Italia S.p.A." status="" 07 bands="MVNO" brand="Nòverca" cc="it" country="Italy" operator="Nòverca Italia" status="Not operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Omnitel B.V." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="it" country="Italy" operator="Vodafone Italia S.p.A." status="Operational" 30 bands="GSM-R 900" brand="RFI" cc="it" country="Italy" operator="Rete Ferroviaria Italiana" status="Operational" - 33 bands="MVNO" brand="Poste Mobile" cc="it" country="Italy" operator="Poste Mobile SpA" status="Operational" + 33 bands="MVNO" brand="Poste Mobile" cc="it" country="Italy" operator="Poste Mobile S.p.A." status="Operational" 34 bands="MVNO" brand="BT Italia" cc="it" country="Italy" operator="British Telecom Italia" status="Reserved" - 35 bands="MVNO" brand="Lyca Italy" cc="it" country="Italy" operator="Lycamobile" status="Operational" + 35 bands="MVNO" brand="Lycamobile" cc="it" country="Italy" operator="Lycamobile" status="Operational" 36 bands="" brand="Digi Mobil" cc="it" country="Italy" operator="Digi Italy S.r.l." status="" - 37 bands="" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="" - 38 bands="" brand="LINKEM" cc="it" country="Italy" operator="Linkem SpA" status="" + 37 bands="" brand="3 Italia" cc="it" country="Italy" operator="H3G S.p.A." status="" + 38 bands="" brand="LINKEM" cc="it" country="Italy" operator="Linkem S.p.A." status="" 39 bands="" brand="SMS Italia" cc="it" country="Italy" operator="SMS Italia S.r.l." status="" - 43 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="" - 48 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia SpA" status="" + 43 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia S.p.A." status="" + 48 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia S.p.A." status="" 77 bands="UMTS 2100" brand="IPSE 2000" cc="it" country="Italy" status="Not operational" - 88 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni SpA" status="Operational" - 98 bands="GSM 900" brand="BLU s.p.a" cc="it" country="Italy" operator="BLU s.p.a" status="Not operational" - 99 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="3 Italia" cc="it" country="Italy" operator="Hutchison 3G" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni S.p.A." status="Operational" + 98 bands="GSM 900" brand="BLU" cc="it" country="Italy" operator="BLU S.p.A." status="Not operational" + 99 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3 Italia" cc="it" country="Italy" operator="H3G S.p.A." status="Operational" 00-99 226 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / TD-LTE 2600" brand="Vodafone" cc="ro" country="Romania" operator="Vodafone România" status="Operational" @@ -220,15 +221,17 @@ 07 bands="GSM 1800" brand="IN&Phone" cc="ch" country="Switzerland" operator="IN&Phone SA" status="Not operational" 08 bands="GSM 1800" brand="Tele4u" cc="ch" country="Switzerland" operator="TelCommunication Services AG" status="Operational" 09 bands="" cc="ch" country="Switzerland" operator="Comfone AG" status="" - 12 cc="ch" country="Switzerland" operator="Sunrise" status="Inactive" + 12 brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="Inactive" 50 bands="UMTS 2100" cc="ch" country="Switzerland" operator="3G Mobile AG" status="Not operational" 51 bands="MVNO" cc="ch" country="Switzerland" operator="BebbiCell AG" status="Operational" 52 brand="Barablu" cc="ch" country="Switzerland" operator="Barablu" status="Not operational" 53 bands="MVNO" cc="ch" country="Switzerland" operator="UPC Cablecom GmbH" status="Operational" 54 bands="MVNO" cc="ch" country="Switzerland" operator="Lycamobile AG" status="Operational" 55 bands="" cc="ch" country="Switzerland" operator="WeMobile SA" status="" - 56 bands="" cc="ch" country="Switzerland" operator="SMSRelay AG" status="" + 56 bands="" cc="ch" country="Switzerland" operator="SMSRelay AG" status="Not operational" 57 bands="" cc="ch" country="Switzerland" operator="Mitto AG" status="" + 58 bands="MVNO" cc="ch" country="Switzerland" operator="Beeone Communications SA" status="Operational" + 60 bands="" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="" 99 cc="ch" country="Switzerland" operator="Swisscom" status="" 00-99 230 @@ -237,8 +240,8 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2100" brand="Vodafone" cc="cz" country="Czech Republic" operator="Vodafone Czech Republic" status="Operational" 04 bands="CDMA2000 410 - 430" brand="U:fon" cc="cz" country="Czech Republic" operator="Air Telecom a. s." status="Operational" 05 bands="" cc="cz" country="Czech Republic" operator="TRAVEL TELEKOMMUNIKATION, s.r.o." status="Not operational" - 06 bands="" cc="cz" country="Czech Republic" operator="OSNO TELECOMUNICATION, s.r.o." status="" - 07 bands="MVNO" cc="cz" country="Czech Republic" operator="ASTELNET, s.r.o." status="Operational" + 06 bands="" cc="cz" country="Czech Republic" operator="OSNO TELECOMUNICATION, s.r.o." status="Not operational" + 07 bands="MVNO" cc="cz" country="Czech Republic" operator="ASTELNET, s.r.o." status="Not operational" 08 bands="" cc="cz" country="Czech Republic" operator="Compatel s.r.o." status="" 09 bands="MVNO" cc="cz" country="Czech Republic" operator="Mundio Distribution Czech Republic s.r.o." status="" 98 bands="GSM-R 900" cc="cz" country="Czech Republic" operator="Správa železniční dopravní cesty, s.o." status="Operational" @@ -275,18 +278,18 @@ 19 bands="" cc="at" country="Austria" operator="Tele2 Telecommunication GmbH" status="" 20 bands="" cc="at" country="Austria" operator="MTEL Austrija GmbH" status="" 91 bands="GSM-R" brand="GSM-R A" cc="at" country="Austria" operator="ÖBB" status="Operational" - 92 bands="" cc="at" country="Austria" operator="ArgoNET GmbH" status="" + 92 bands="CDMA 450" brand="ArgoNET" cc="at" country="Austria" operator="ArgoNET GmbH" status="Operational" 00-99 234 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" - 01 bands="GSM 1800" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" + 01 bands="MVNO" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="gb" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="gb" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" status="" 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" status="" - 07 bands="GSM 1800" cc="gb" country="United Kingdom" operator="Cable & Wireless Worldwide" status="Operational" - 08 cc="gb" country="United Kingdom" operator="OnePhone (UK) Ltd" status="" + 07 bands="GSM 1800" cc="gb" country="United Kingdom" operator="Vodafone" status="Operational" + 08 cc="gb" country="United Kingdom" operator="BT OnePhone (UK) Ltd" status="" 09 cc="gb" country="United Kingdom" operator="Tismi BV" status="" 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" 11 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" @@ -317,14 +320,18 @@ 36 bands="GSM 900 / GSM 1800 / LTE" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="Operational" 37 bands="" cc="gb" country="United Kingdom" operator="Synectiv Ltd" status="" 38 bands="" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="" - 39 bands="" cc="gb" country="United Kingdom" operator="SSE Energy Supply Limited" status="" + 39 bands="" cc="gb" country="United Kingdom" operator="Gamma Telecom Holdings Ltd." status="" 50 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" 51 bands="TD-LTE 3500 / TD-LTE 3700" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" 52 bands="" cc="gb" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" - 53 bands="" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="" + 53 bands="MVNO" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="Operational" 54 bands="" cc="gb" country="United Kingdom" operator="The Carphone Warehouse Limited" status="" 55 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Sure (Guernsey) Limited" status="Operational" + 56 bands="" cc="gb" country="United Kingdom" operator="CESG" status="" + 57 bands="" cc="gb" country="United Kingdom" operator="Sky UK Limited" status="" 58 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Pronto GSM" cc="gb" country="United Kingdom" operator="Manx Telecom" status="Operational" + 59 bands="MVNO" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="Operational" + 70 bands="" cc="gb" country="United Kingdom" operator="AMSUK Ltd." status="" 76 bands="GSM 900 / GSM 1800" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" 78 bands="TETRA" brand="Airwave" cc="gb" country="United Kingdom" operator="Airwave Solutions Ltd" status="Operational" 86 bands="" cc="gb" country="United Kingdom" operator="EE" status="" @@ -336,7 +343,7 @@ 03 bands="" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="" 77 brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="" 91 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" status="" - 92 cc="gb" country="United Kingdom" operator="Cable & Wireless UK" status="" + 92 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" status="" 94 cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="" 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" status="" 00-99 @@ -375,7 +382,7 @@ 06 bands="UMTS 2100" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" 07 bands="UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Tele2" cc="se" country="Sweden" operator="Tele2 Sverige AB" status="Operational" 08 bands="GSM 900 / GSM 1800" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Not operational" - 09 bands="MVNO" brand="djuice" cc="se" country="Sweden" operator="Telenor Mobile Sweden AS" status="Not operational" + 09 bands="" cc="se" country="Sweden" operator="Communication for Devices in Sweden AB" status="" 10 brand="Spring Mobil" cc="se" country="Sweden" operator="Spring Mobil AB" status="Operational" 11 bands="" cc="se" country="Sweden" operator="Lindholmen Science Park AB" status="Not operational" 12 bands="MVNO" brand="Lycamobile" cc="se" country="Sweden" operator="Lycamobile Sweden Limited" status="Operational" @@ -393,7 +400,7 @@ 24 bands="GSM 900 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" 25 bands="" cc="se" country="Sweden" operator="Digitel Mobile Srl" status="Not operational" 26 bands="GSM" cc="se" country="Sweden" operator="Beepsend AB" status="Operational" - 27 bands="MVNO" cc="se" country="Sweden" operator="Fogg Mobile AB" status="Operational" + 27 bands="MVNO" cc="se" country="Sweden" operator="GlobeTouch AB" status="Operational" 28 bands="" cc="se" country="Sweden" operator="CoolTEL Aps" status="" 29 bands="" cc="se" country="Sweden" operator="Mercury International Carrier Services" status="" 30 bands="" cc="se" country="Sweden" operator="NextGen Mobile Ltd." status="" @@ -435,42 +442,47 @@ 00-99 244 03 bands="GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" - 04 bands="MVNO" brand="AINA" cc="fi" country="Finland" operator="DNA Oy / Aina Oyj" status="Operational" + 04 bands="MVNO" brand="AINA" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj / Aina Oyj" status="Not operational" 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" 08 bands="GSM 1800 / UMTS 2100" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" 09 bands="GSM 900" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Not operational" - 10 bands="" cc="fi" country="Finland" operator="Viestintävirasto" status="" - 11 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Operational" + 10 bands="MVNO" cc="fi" country="Finland" operator="Viestintävirasto" status="Not operational" + 11 bands="MVNO" cc="fi" country="Finland" operator="Viestintävirasto" status="Not operational" 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" 13 bands="GSM 900 / GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Not operational" 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Ålcom" cc="fi" country="Finland" operator="Ålands Telekommunikation Ab" status="Operational" 15 bands="GSM 1800" brand="SAMK" cc="fi" country="Finland" operator="Satakunta University of Applied Sciences" status="Not operational" 16 bands="MVNO" brand="Tele2" cc="fi" country="Finland" operator="Oy Finland Tele2 AB" status="Not operational" - 17 bands="GSM-R" brand="RHK" cc="fi" country="Finland" operator="Finnish Transport Agency" status="Operational" + 17 bands="GSM-R" brand="Corenet" cc="fi" country="Finland" operator="Corenet Oy / Finnish Transport Agency" status="Operational" 21 bands="MVNO" brand="Elisa- Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" 25 bands="CDMA" brand="Datame" cc="fi" country="Finland" operator="Datame Oy" status="Not operational" 26 bands="MVNO" brand="Compatel" cc="fi" country="Finland" operator="Compatel Ltd" status="Operational" 27 bands="" cc="fi" country="Finland" operator="VTT Technical Research Centre of Finland" status="" 29 bands="MVNO" cc="fi" country="Finland" operator="SCNL Truphone" status="Not operational" - 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Operational" + 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Not Operational" 31 bands="MVNO" brand="Kuiri" cc="fi" country="Finland" operator="Ukko Mobile Oy" status="Operational" 32 bands="MVNO" brand="Voxbone" cc="fi" country="Finland" operator="Voxbone SA" status="Operational" 33 bands="TETRA" brand="VIRVE" cc="fi" country="Finland" operator="Virve Tuotteet ja Palvelut Oy" status="Operational" - 34 bands="" brand="Elektrobit Wireless" cc="fi" country="Finland" operator="Elektrobit Wireless Communications Oy" status="Operational" + 34 bands="MVNO" brand="Bittium Wireless" cc="fi" country="Finland" operator="Bittium Wireless Oy" status="Operational" 35 bands="LTE 450" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" - 36 bands="" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="" + 36 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera / DNA" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj / Suomen Yhteisverkko Oy" status="Operational" + 37 bands="MVNO" brand="Tismi" cc="fi" country="Finland" operator="Tismi BV" status="Operational" + 38 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" + 39 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" + 40 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" + 41 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" 91 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="Operational" 00-99 246 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Omnitel" cc="lt" country="Lithuania" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BITĖ" cc="lt" country="Lithuania" operator="UAB Bitė Lietuva" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Tele 2" cc="lt" country="Lithuania" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Omnitel" cc="lt" country="Lithuania" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="BITĖ" cc="lt" country="Lithuania" operator="UAB Bitė Lietuva" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Tele 2" cc="lt" country="Lithuania" status="Operational" 04 bands="" cc="lt" country="Lithuania" operator="Ministry of the Interior)" status="" 05 bands="GSM-R 900" brand="LitRail" cc="lt" country="Lithuania" operator="Lietuvos geležinkeliai (Lithuanian Railways)" status="Operational" - 06 bands="GSM 1800" brand="Mediafon" cc="lt" country="Lithuania" operator="UAB Mediafon" status="Operational" + 06 bands="" brand="Mediafon" cc="lt" country="Lithuania" operator="UAB Mediafon" status="Operational" 07 bands="" cc="lt" country="Lithuania" operator="Compatel Ltd." status="" - 08 bands="WiMAX 3500" brand="MEZON" cc="lt" country="Lithuania" operator="Lietuvos radijo ir televizijos centras" status="Operational" + 08 bands="WiMAX 3500 / LTE 3500" brand="MEZON" cc="lt" country="Lithuania" operator="Lietuvos radijo ir televizijos centras" status="Operational" 00-99 247 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" @@ -484,13 +496,13 @@ 09 bands="MVNO" brand="Camel Mobile" cc="lv" country="Latvia" operator="Camel Mobile" status="Operational" 00-99 248 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="EMT" cc="ee" country="Estonia" operator="Estonian Mobile Telecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="ee" country="Estonia" operator="Estonian Mobile Telecom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="ee" country="Estonia" operator="Elisa Eesti" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Tele 2" cc="ee" country="Estonia" operator="Tele 2 Eesti" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100 / LTE 2600" brand="Tele 2" cc="ee" country="Estonia" operator="Tele 2 Eesti" status="Operational" 04 bands="MVNO" cc="ee" country="Estonia" operator="OY Top Connect" status="Operational" 05 bands="" cc="ee" country="Estonia" operator="AS Bravocom Mobiil" status="" 06 bands="UMTS 2100" cc="ee" country="Estonia" operator="Progroup Holding" status="Operational" - 07 bands="" cc="ee" country="Estonia" operator="Televõrgu AS" status="" + 07 bands="CDMA2000 450" brand="Kou" cc="ee" country="Estonia" operator="Televõrgu AS" status="Not operational" 08 bands="MVNO" brand="VIVEX" cc="ee" country="Estonia" operator="VIVEX OU" status="Operational" 09 bands="" cc="ee" country="Estonia" operator="Bravo Telecom" status="" 10 bands="" cc="ee" country="Estonia" operator="Telcotrade OÜ" status="" @@ -499,7 +511,7 @@ 250 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications (purchased Tele2)" status="Operational" 04 bands="GSM 900" brand="Sibchallenge" cc="ru" country="Russian Federation" operator="Sibchallenge" status="Not operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA2000 450" brand="ETK" cc="ru" country="Russian Federation" operator="Yeniseytelecom" status="Operational" 06 bands="CDMA2000 450" brand="Skylink" cc="ru" country="Russian Federation" operator="CJSC Saratov System of Cellular Communications" status="Operational" @@ -520,6 +532,7 @@ 23 bands="GSM 900 / GSM 1800" brand="Mobicom - Novosibirsk" cc="ru" country="Russian Federation" operator="Mobicom - Novosibirsk" status="Not operational" 28 bands="GSM 900" brand="Beeline" cc="ru" country="Russian Federation" operator="Beeline" status="Not operational" 32 bands="GSM 900 / GSM 1800" brand="Win Mobile" cc="ru" country="Russian Federation" operator="K-Telecom" status="Operational" + 34 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Krymtelekom" cc="ru" country="Russian Federation" operator="Krymtelekom" status="Operational" 35 bands="GSM 1800 / LTE 1800" brand="MOTIV" cc="ru" country="Russian Federation" operator="EKATERINBURG-2000" status="Operational" 38 bands="GSM 900 / GSM 1800" brand="Tambov GSM" cc="ru" country="Russian Federation" operator="Central Telecommunication Company" status="Operational" 39 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / TD-LTE 2300 / LTE 2600" brand="Rostelecom" cc="ru" country="Russian Federation" operator="ROSTELECOM" status="Operational" @@ -533,12 +546,12 @@ 99 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Beeline" cc="ru" country="Russian Federation" operator="OJSC Vimpel-Communications" status="Operational" 00-99 255 - 01 bands="GSM 900 / GSM 1800 / CDMA 450 / UMTS 2100" brand="MTS" cc="ua" country="Ukraine" operator="MTS Ukraine" status="Operational" + 01 bands="GSM 900 / GSM 1800 / CDMA 450 / UMTS 2100" brand="Vodafone" cc="ua" country="Ukraine" operator="MTS Ukraine" status="Operational" 02 bands="GSM 900 / GSM 1800" brand="Beeline" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Not operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Kyivstar" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Operational" 04 bands="CDMA 800" brand="IT" cc="ua" country="Ukraine" operator="Intertelecom" status="Operational" 05 bands="GSM 1800" brand="Golden Telecom" cc="ua" country="Ukraine" operator="Kyivstar GSM JSC" status="Not operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="life:)" cc="ua" country="Ukraine" operator="Astelit" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="lifecell" cc="ua" country="Ukraine" operator="Astelit" status="Operational" 07 bands="UMTS 2100" brand="3Mob" cc="ua" country="Ukraine" operator="3Mob (Ukrtelecom UMTS )" status="Operational" 21 bands="CDMA 800" brand="PEOPLEnet" cc="ua" country="Ukraine" operator="Telesystems of Ukraine" status="Operational" 23 bands="CDMA 800" brand="CDMA Ukraine" cc="ua" country="Ukraine" operator="Intertelecom" status="Not operational" @@ -558,7 +571,7 @@ 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Moldcell" cc="md" country="Moldova" status="Operational" 03 bands="CDMA 450" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Eventis" cc="md" country="Moldova" operator="Eventis Telecom" status="Not operational" - 05 bands="UMTS 900 / UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" + 05 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 99 bands="UMTS 2100" brand="Unité" cc="md" country="Moldova" operator="Moldtelecom" status="Operational" 00-99 260 @@ -624,7 +637,7 @@ 16 bands="MVNO" cc="de" country="Germany" operator="Telogic Germany GmbH" status="Not operational" 17 bands="" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="" 18 bands="MVNO" cc="de" country="Germany" operator="NetCologne" status="Operational" - 19 bands="" cc="de" country="Germany" operator="Inquam Deutschland" status="" + 19 bands="CDMA 450" cc="de" country="Germany" operator="Inquam Deutschland" status="" 20 bands="GSM" brand="OnePhone" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" 33 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="simquadrat" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" 41 bands="" cc="de" country="Germany" operator="First Telecom GmbH" status="" @@ -691,7 +704,7 @@ 22 bands="" cc="is" country="Iceland" operator="Landhelgisgæslan (Icelandic Coast Guard)" status="" 00-99 276 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="AMC" cc="al" country="Albania" operator="Albanian Mobile Communications" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telekom.al" cc="al" country="Albania" operator="Telekom Albania" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 /LTE 1800 / LTE 2600" brand="Vodafone" cc="al" country="Albania" operator="Vodafone Albania" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Eagle Mobile" cc="al" country="Albania" operator="Eagle Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Plus Communication" cc="al" country="Albania" operator="Plus Communication" status="Operational" @@ -730,7 +743,7 @@ 284 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="M-Tel" cc="bg" country="Bulgaria" operator="Mobiltel" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vivacom" cc="bg" country="Bulgaria" operator="BTC" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Telenor" cc="bg" country="Bulgaria" operator="Telenor (Bulgaria)" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Telenor" cc="bg" country="Bulgaria" operator="Telenor (Bulgaria)" status="Operational" 07 bands="GSM-R" brand="НКЖИ" cc="bg" country="Bulgaria" operator="НАЦИОНАЛНА КОМПАНИЯ ЖЕЛЕЗОПЪТНА ИНФРАСТРУКТУРА" status="Operational" 09 bands="" cc="bg" country="Bulgaria" operator="COMPATEL LIMITED" status="Not operational" 11 bands="LTE 1800" cc="bg" country="Bulgaria" operator="Bulsatcom" status="Not operational" @@ -739,8 +752,8 @@ 286 01 bands="GSM 900 / UMTS 2100" brand="Turkcell" cc="tr" country="Turkey" operator="Turkcell Iletisim Hizmetleri A.S." status="Operational" 02 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="tr" country="Turkey" operator="Vodafone Turkey" status="Operational" - 03 bands="GSM 1800 / UMTS 2100" brand="Avea" cc="tr" country="Turkey" status="Operational" - 04 bands="GSM 1800" cc="tr" country="Turkey" operator="Aycell" status="Not operational" + 03 bands="GSM 1800 / UMTS 2100" brand="Türk Telekom" cc="tr" country="Turkey" operator="Türk Telekom" status="Operational" + 04 bands="GSM 1800" brand="Aycell" cc="tr" country="Turkey" operator="Aycell" status="Not operational" 00-99 288 01 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Faroese Telecom" cc="fo" country="Faroe Islands (Denmark)" operator="Faroese Telecom" status="Operational" @@ -855,7 +868,7 @@ 013 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" 014 bands="" cc="us" country="United States of America" status="" 015 bands="iDEN" brand="Southern LINC" cc="us" country="United States of America" operator="Southern Communications" status="" - 016 bands="CDMA2000 1900 / CDMA2000 1700" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Operational" + 016 bands="CDMA2000 1900 / CDMA2000 1700" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Not operational" 017 bands="iDEN" brand="ProxTel" cc="us" country="United States of America" operator="North Sight Communications Inc." status="" 020 bands="GSM 850 / GSM 1900 / UMTS" brand="Union Wireless" cc="us" country="United States of America" operator="Union Telephone Company" status="Operational" 030 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" @@ -872,12 +885,12 @@ 070 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 080 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 090 bands="GSM 1900" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Operational" - 100 bands="GSM 850 / UMTS 850 / UMTS AWS" brand="Plateau Wireless" cc="us" country="United States of America" operator="New Mexico RSA 4 East LP" status="Operational" + 100 bands="GSM 850 / UMTS 850 / UMTS 1700" brand="Plateau Wireless" cc="us" country="United States of America" operator="New Mexico RSA 4 East LP" status="Operational" 110 bands="CDMA / GSM 850 / LTE 700" brand="IT&E Wireless" cc="us" country="United States of America" operator="PTI Pacifica Inc." status="Operational" 120 bands="CDMA2000 1900 / LTE 850 / LTE 1900" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" 130 bands="CDMA2000 1900" brand="Carolina West Wireless" cc="us" country="United States of America" operator="Carolina West Wireless" status="Operational" 140 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="GTA Wireless" cc="us" country="United States of America" operator="Teleguam Holdings, LLC" status="Operational" - 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="Cricket Wireless" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" + 150 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 160 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" operator="T-Mobile US" status="Operational" 170 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 180 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="West Central" cc="us" country="United States of America" operator="West Central Wireless" status="Operational" @@ -891,71 +904,78 @@ 260 bands="GSM 1900 / UMTS 1900 / UMTS 1700 / LTE 700 / LTE 1900 / LTE 1700" brand="T-Mobile USA" cc="us" country="United States of America" operator="T-Mobile USA" status="Operational" 270 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 280 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not Operational" - 290 bands="GSM 1900" brand="nep" cc="us" country="United States of America" operator="NEP Cellcorp Inc." status="Operational" + 290 bands="GSM 1900" brand="nep" cc="us" country="United States of America" operator="NEP Cellcorp Inc." status="Not operational" 300 bands="GSM 1900" brand="Big Sky Mobile" cc="us" country="United States of America" operator="iSmart Mobile, LLC" status="Operational" 310 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" - 311 bands="GSM 1900" cc="us" country="United States of America" operator="Farmers Wireless" status="Operational" - 320 bands="GSM 850 / GSM 1900" brand="Cellular One" cc="us" country="United States of America" operator="Smith Bagley, Inc." status="Operational" + 311 bands="GSM 1900" cc="us" country="United States of America" operator="Farmers Wireless" status="Not operational" + 320 bands="GSM 850 / GSM 1900 / UMTS" brand="Cellular One" cc="us" country="United States of America" operator="Smith Bagley, Inc." status="Operational" 330 bands="CDMA" brand="Alltel" cc="us" country="United States of America" operator="Allied Wireless Communications Corporation (AWCC)" status="Not operational" 340 bands="GSM 1900" brand="Westlink Communications" cc="us" country="United States of America" operator="High Plains Midwest LLC" status="Not operational" 350 bands="CDMA" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" 360 bands="CDMA" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" 370 bands="GSM 1900 / UMTS 850 / LTE 700" brand="Docomo" cc="us" country="United States of America" operator="NTT Docomo Pacific" status="Operational" 380 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" - 390 bands="GSM 850" brand="Cellular One of East Texas" cc="us" country="United States of America" operator="TX-11 Acquisition, LLC" status="Operational" - 400 bands="GSM 1900" brand="i CAN_GSM" cc="us" country="United States of America" operator="Wave Runner LLC (Guam)" status="Operational" + 390 bands="GSM 850 / LTE 700 / CDMA" brand="Cellular One of East Texas" cc="us" country="United States of America" operator="TX-11 Acquisition, LLC" status="Operational" + 400 bands="GSM 1900 / UMTS 1900 / LTE 700" brand="iConnect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" 410 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 420 bands="GSM 1900 / UMTS 1700" brand="Cincinnati Bell" cc="us" country="United States of America" operator="Cincinnati Bell Wireless" status="Not operational" - 430 bands="GSM 1900" cc="us" country="United States of America" operator="Alaska Digitel" status="Operational" - 440 bands="GSM 1900" brand="Cellular One" cc="us" country="United States of America" status="" - 450 bands="GSM 850 / GSM 1900" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" - 460 bands="GSM 1900" brand="Simmetry" cc="us" country="United States of America" operator="TMP Corporation" status="Not operational" + 430 bands="GSM 1900 / UMTS 1900" brand="GCI" cc="us" country="United States of America" operator="GCI Communications Corp." status="Operational" + 440 bands="MVNO" cc="us" country="United States of America" operator="Numerex" status="Operational" + 450 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" + 460 bands="GSM 1900" brand="NewCore" cc="us" country="United States of America" operator="NewCore Wireless LLC" status="Operational" 470 bands="CDMA2000 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Communications, Inc." status="Operational" - 480 bands="" cc="us" country="United States of America" operator="Choice Phone" status="Operational" - 490 bands="GSM 850 / GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Operational" - 500 bands="CDMA2000 800 / CDMA2000 1900" brand="Alltel" cc="us" country="United States of America" status="Operational" - 510 bands="" brand="Airtel" cc="us" country="United States of America" operator="Airtel Wireless" status="Operational" - 520 bands="" brand="VeriSign" cc="us" country="United States of America" status="" - 530 bands="" cc="us" country="United States of America" operator="West Virginia Wireless" status="Operational" - 540 bands="GSM 1900" brand="Oklahoma Western" cc="us" country="United States of America" operator="Oklahoma Western Telephone Company" status="Operational" + 480 bands="iDEN" brand="Instant Connect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" + 490 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Operational" + 500 bands="CDMA2000 850 / CDMA2000 1900" brand="Alltel" cc="us" country="United States of America" operator="Public Service Cellular Inc." status="Operational" + 510 bands="" brand="Cellcom" cc="us" country="United States of America" operator="Nsighttel Wireless LLC" status="" + 520 bands="" brand="TNS" cc="us" country="United States of America" operator="Transaction Network Services" status="" + 530 bands="" brand="iWireless" cc="us" country="United States of America" operator="Iowa Wireless Services LLC" status="" + 540 bands="GSM 850 / GSM 1900" brand="Phoenix" cc="us" country="United States of America" operator="Oklahoma Western Telephone Company" status="Operational" + 550 bands="" cc="us" country="United States of America" operator="Syniverse Technologies" status="" 560 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 570 bands="GSM 850 / LTE 700" brand="Cellular One" cc="us" country="United States of America" operator="TX-10, LLC and Central Louisiana Cellular, LLC (MTPCS)" status="Operational" - 580 bands="" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" + 580 bands="CDMA2000" cc="us" country="United States of America" operator="Inland Cellular Telephone Company" status="Operational" 59 bands="CDMA" brand="Cellular One" cc="bm" country="Bermuda" status="Operational" - 590 bands="GSM 850 / GSM 1900" brand="Alltel" cc="us" country="United States of America" operator="Alltel Communications Inc" status="Operational" - 600 bands="CDMA 850 / CDMA 1900 / LTE 700" brand="Cellcom" cc="us" country="United States of America" operator="New-Cell Inc." status="Operational" - 610 bands="GSM 1900" brand="Epic Touch" cc="us" country="United States of America" operator="Elkhart Telephone Co." status="Operational" - 620 bands="GSM 1900" brand="Coleman County Telecom" cc="us" country="United States of America" operator="Coleman County Telecommunications" status="Operational" + 590 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 600 bands="CDMA2000 850 / CDMA2000 1900 / LTE 700" brand="Cellcom" cc="us" country="United States of America" operator="New-Cell Inc." status="Operational" + 610 bands="GSM 1900" brand="Epic PCS" cc="us" country="United States of America" operator="Elkhart Telephone Co." status="Not operational" + 620 bands="" brand="Cellcom" cc="us" country="United States of America" operator="Nsighttel Wireless LLC" status="" 630 bands="LTE 700" brand="miSpot" cc="us" country="United States of America" operator="Agri-Valley Communications" status="Not operational" - 640 bands="GSM 1900" brand="AirFire" cc="us" country="United States of America" operator="Airadigm Communications" status="Not Operational" - 650 bands="GSM 850" brand="Jasper" cc="us" country="United States of America" operator="Jasper Wireless, Inc." status="Operational" + 640 bands="MVNO" cc="us" country="United States of America" operator="Numerex" status="Operational" + 650 bands="MVNO" brand="Jasper" cc="us" country="United States of America" operator="Jasper Technologies" status="Operational" 660 bands="GSM 1900" brand="T-Mobile" cc="us" country="United States of America" status="Not operational" - 670 bands="" brand="Northstar" cc="us" country="United States of America" status="Operational" + 670 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="" 680 bands="GSM 850 / GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 690 bands="GSM 1900" brand="Limitless Mobile" cc="us" country="United States of America" operator="Limitless Mobile, LLC" status="Operational" + 700 bands="GSM" brand="Bigfoot Cellular" cc="us" country="United States of America" operator="Cross Valiant Cellular Partnership" status="" + 710 bands="GSM 850" brand="ASTAC" cc="us" country="United States of America" operator="Arctic Slope Telephone Association Cooperative" status="Operational" + 720 bands="" cc="us" country="United States of America" operator="Syniverse Technologies" status="" 730 bands="" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="" - 740 bands="" brand="Convey" cc="us" country="United States of America" operator="Convey Communications Inc." status="Operational" + 740 bands="" cc="us" country="United States of America" operator="Green Eagle Communications, Inc." status="" 750 bands="CDMA2000 850 / CDMA2000 1900" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" 760 bands="" cc="us" country="United States of America" operator="Lynch 3G Communications Corporation" status="Not operational" - 770 bands="GSM 1900" brand="i wireless" cc="us" country="United States of America" operator="Iowa Wireless Services" status="Operational" - 780 bands="GSM 1900" cc="us" country="United States of America" operator="Airlink PCS" status="Not operational" - 790 bands="GSM 1900" brand="PinPoint" cc="us" country="United States of America" operator="PinPoint Communications" status="Operational" + 770 bands="GSM 1900 / UMTS 1700 / LTE 1700 / LTE 1900" brand="iWireless" cc="us" country="United States of America" operator="Iowa Wireless Services" status="Operational" + 780 bands="iDEN" brand="Dispatch Direct" cc="us" country="United States of America" operator="D. D. Inc." status="Operational" + 790 bands="GSM 1900 / UMTS / LTE" brand="BLAZE" cc="us" country="United States of America" operator="PinPoint Communications Inc." status="Operational" 800 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" - 830 bands="GSM 850" brand="Caprock" cc="us" country="United States of America" operator="Caprock Cellular" status="Operational" - 840 bands="GSM 1900" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" - 850 bands="CDMA2000 850 / CDMA2000 1900 / GSM 850 / GSM 1900" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" + 810 bands="1900" cc="us" country="United States of America" operator="LCFR LLC" status="" + 820 bands="" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 830 bands="" cc="us" country="United States of America" operator="Clearwire Corporation" status="" + 840 bands="MVNO" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" + 850 bands="MVNO" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" 860 bands="CDMA" brand="Five Star Wireless" cc="us" country="United States of America" operator="TX RSA 15B2, LP" status="Operational" - 870 bands="GSM 850" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Operational" - 880 bands="GSM 850" brand="DTC Wireless" cc="us" country="United States of America" operator="Advantage Cellular Systems" status="Operational" - 890 bands="GSM 850 / GSM 1900" brand="Unicel" cc="us" country="United States of America" operator="Rural Cellular Corporation" status="Operational" + 870 bands="MVNO" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Operational" + 880 bands="GSM 850" brand="DTC Wireless" cc="us" country="United States of America" operator="Advantage Cellular Systems, Inc." status="Operational" + 890 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Verizon Wireless" status="" 900 bands="CDMA2000 850 / CDMA2000 1900" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Cable & Communications Corporation" status="Operational" - 910 bands="GSM 850" brand="First Cellular" cc="us" country="United States of America" operator="First Cellular of Southern Illinois" status="Operational" + 910 bands="GSM 850" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 920 bands="CDMA" cc="us" country="United States of America" operator="James Valley Wireless, LLC" status="Operational" 930 bands="CDMA" cc="us" country="United States of America" operator="Copper Valley Wireless" status="Operational" - 940 bands="" cc="us" country="United States of America" operator="Iris Wireless LLC" status="Operational" - 950 bands="GSM 850" brand="XIT Wireless" cc="us" country="United States of America" operator="Texas RSA 1 dba XIT Cellular" status="Operational" - 960 bands="CDMA / LTE 700" cc="us" country="United States of America" operator="Strata Networks" status="Operational" - 970 bands="Satellite" brand="Telemedicine Wireless" cc="us" country="United States of America" operator="Telemedicine Wireless (USA) Telecommunications,Inc" status="Operational" - 980 bands="CDMA / LTE 700" brand="Peoples Telephone Cooperative, Inc." cc="us" country="United States of America" operator="Texas RSA 7B3" status="Operational" + 940 bands="MVNO" cc="us" country="United States of America" operator="Iris Wireless LLC" status="" + 950 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" + 960 bands="CDMA / LTE 700" brand="STRATA" cc="us" country="United States of America" operator="UBET Wireless" status="Operational" + 970 bands="Satellite" cc="us" country="United States of America" operator="Globalstar" status="Operational" + 980 bands="CDMA / LTE 700" brand="Peoples Telephone" cc="us" country="United States of America" operator="Texas RSA 7B3" status="Not operational" 990 bands="LTE 700" brand="Evolve Broadband" cc="us" country="United States of America" operator="Worldcall Interconnect Inc." status="Operational" 000-999 311 @@ -972,7 +992,7 @@ 090 bands="GSM 1900" brand="Long Lines Wireless" cc="us" country="United States of America" operator="Long Lines Wireless LLC" status="Operational" 100 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" 110 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" - 120 bands="" cc="us" country="United States of America" operator="Choice Phone" status="Operational" + 120 bands="" brand="iConnect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" 130 bands="GSM 850" cc="us" country="United States of America" operator="Cell One Amarillo" status="Operational" 140 bands="CDMA" brand="Sprocket Wireless" cc="us" country="United States of America" operator="Cross Telephone / MBO Wireless" status="Operational" 150 bands="GSM 850" cc="us" country="United States of America" operator="Wilkes Cellular" status="Operational" @@ -983,7 +1003,7 @@ 210 bands="GSM 1900 / UMTS 2100" cc="us" country="United States of America" operator="Emery Telcom Wireless" status="Operational" 220 bands="CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" 230 bands="CDMA 850 / CDMA 1900 / LTE 1900 / LTE 1700" brand="C Spire Wireless" cc="us" country="United States of America" operator="Cellular South Inc." status="Operational" - 250 bands="iDEN / GSM 1900 / LTE 700" brand="iConnect" cc="gu" country="Guam (United States of America)" operator="Wave Runner LLC / Choice Phone LLC" status="Operational" + 250 bands="" brand="iConnect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" 330 bands="" brand="Bug Tussel Wireless" cc="us" country="United States of America" operator="Bug Tussel Wireless" status="Operational" 360 bands="UMTS 1700" cc="us" country="United States of America" operator="Stelera Wireless" status="Not operational" 370 bands="LTE 1700" brand="GCI Wireless" cc="us" country="United States of America" operator="General Communication Inc." status="Operational" @@ -994,7 +1014,7 @@ 481 cc="us" country="United States of America" 490 bands="LTE 850 / LTE 1900 / TD-LTE 2500" brand="Sprint Corporation" cc="us" country="United States of America" operator="Sprint" status="Operational" 500 bands="UMTS / LTE 700 / LTE 1700" cc="us" country="United States of America" operator="Mosaic Telecom" status="Operational" - 530 bands="" cc="us" country="United States of America" operator="Newcore Wireless" status="Operational" + 530 bands="GSM 1900" brand="NewCore" cc="us" country="United States of America" operator="NewCore Wireless LLC" status="Operational" 570 bands="UMTS 1700 / LTE 1700" cc="us" country="United States of America" operator="BendBroadband" status="Not operational" 580 bands="LTE 700 / LTE 850" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" 630 bands="" brand="C Spire Wireless" cc="us" country="United States of America" operator="Cellular South Inc." status="" @@ -1002,6 +1022,7 @@ 650 bands="CDMA / LTE 700 / WiMAX 3700" brand="United Wireless" cc="us" country="United States of America" operator="United Wireless" status="Operational" 660 bands="CDMA2000 1900 / CDMA 2000 1700 / LTE 1700" brand="metroPCS" cc="us" country="United States of America" operator="metroPCS" status="Operational" 750 bands="LTE" cc="us" country="United States of America" operator="NetAmerica Alliance" status="Operational" + 790 bands="" cc="us" country="United States of America" operator="Coleman County Telephone Cooperative, Inc." status="" 810 bands="CDMA / LTE 700" brand="Bluegrass Wireless" cc="us" country="United States of America" operator="Bluegrass Wireless" status="Operational" 830 bands="LTE 700" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" 870 bands="MVNO" brand="Boost" cc="us" country="United States of America" operator="Boost Mobile" status="Operational" @@ -1023,6 +1044,7 @@ 130 bands="LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" 180 bands="" cc="us" country="United States of America" operator="Limiteless Mobile LLC" status="" 220 bands="LTE 700" cc="us" country="United States of America" operator="Chariton Valley Telephone" status="Operational" + 260 bands="LTE 1900" brand="NewCore" cc="us" country="United States of America" operator="Central LTE Holdings" status="Operational" 270 bands="LTE 700" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" 280 bands="LTE 700" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" 330 bands="LTE 700" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular" status="Operational" @@ -1072,8 +1094,8 @@ 020 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not operational" 050 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="tc" country="Turks and Caicos Islands" operator="Digicel (Turks & Caicos) Limited" status="Operational" 070 bands="GSM / UMTS / CDMA" brand="Claro" cc="jm" country="Jamaica" operator="Oceanic Digital Jamaica Limited" status="Not operational" - 110 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" - 180 bands="GSM 850 / GSM 1900 / UMTS 850" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Operational" + 110 bands="" brand="FLOW" cc="jm" country="Jamaica" operator="Cable & Wireless Communications" status="Operational" + 180 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="FLOW" cc="jm" country="Jamaica" operator="Cable & Wireless Communications" status="Operational" 000-999 340 01 bands="GSM 900 / UMTS 2100" brand="Orange" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Orange Caraïbe Mobiles" status="Operational" @@ -1320,7 +1342,7 @@ 043 bands="CDMA 2000 / GSM 1800 / UMTS 2100" brand="TATA DOCOMO" cc="in" country="India" operator="Rajasthan" status="Operational" 044 bands="CDMA 2000 / GSM 1800" brand="TATA DOCOMO" cc="in" country="India" operator="Tamil Nadu including Chennai" status="Operational" 045 bands="CDMA 2000 / GSM 1800" brand="TATA DOCOMO" cc="in" country="India" operator="Uttar Pradesh (E)" status="Operational" - 046 bands="CDMA 2000 / GSM 1800 / UMTS 2100" brand="TATA DOCOMO" cc="in" country="India" operator="Uttar Pradesh (W) & Uttarkhand" status="Operational" + 046 bands="CDMA 2000 / GSM 1800 / UMTS 2100" brand="TATA DOCOMO" cc="in" country="India" operator="Uttar Pradesh (W) & Uttarakhand" status="Operational" 047 bands="CDMA 2000 / GSM 1800" brand="TATA DOCOMO" cc="in" country="India" operator="West Bengal" status="Operational" 05 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="Delhi & NCR" status="Operational" 06 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="Gujarat" status="Operational" @@ -1389,7 +1411,7 @@ 851 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Punjab" status="Operational" 852 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Tamil Nadu" status="Operational" 853 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="West Bengal" status="Operational" - 854 bands="" brand="Jio" cc="in" country="India" operator="Andra Pradesh" status="Reserved" + 854 bands="" brand="Jio" cc="in" country="India" operator="Andhra Pradesh" status="Reserved" 855 bands="" brand="Jio" cc="in" country="India" operator="Assam" status="Reserved" 856 bands="" brand="Jio" cc="in" country="India" operator="Bihar" status="Reserved" 857 bands="" brand="Jio" cc="in" country="India" operator="Gujarat" status="Reserved" @@ -1451,13 +1473,14 @@ 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Hutch" cc="lk" country="Sri Lanka" operator="Hutchison Telecommunications Lanka (Pvt) Ltd" status="Operational" 00-99 414 - 01 bands="GSM 900 / UMTS 2100" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Post and Telecommunication" status="Operational" + 01 bands="GSM 900 / UMTS 2100" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Posts and Telecommunications" status="Operational" + 03 bands="CDMA 800" brand="CDMA800" cc="mm" country="Myanmar" operator="Myanmar Economic Corporation" status="Operational" 05 bands="UMTS 900 / UMTS 2100" brand="Ooredoo" cc="mm" country="Myanmar" operator="Ooredoo Myanmar" status="Operational" 06 bands="GSM 900 / UMTS 2100" brand="Telenor Myanmar" cc="mm" country="Myanmar" operator="Telenor Myanmar (Comcel Myanmar)" status="Operational" 00-99 415 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" - 03 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="mtc touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" + 03 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" 05 bands="GSM 900" brand="Ogero Mobile" cc="lb" country="Lebanon" operator="Ogero Telecom" status="Operational" 00-99 416 @@ -1472,6 +1495,7 @@ 09 bands="" cc="sy" country="Syria" operator="Syrian Telecom" status="" 00-99 418 + 00 bands="GSM 900" brand="Asia Cell" cc="iq" country="Iraq" operator="Asia Cell Telecommunications Company" status="Operational" 05 bands="GSM 900" brand="Asia Cell" cc="iq" country="Iraq" operator="Asia Cell Telecommunications Company" status="Operational" 08 bands="GSM 900" brand="SanaTel" cc="iq" country="Iraq" status="Operational" 20 bands="GSM 900 / GSM 1800" brand="Zain" cc="iq" country="Iraq" operator="Zain Iraq" status="Operational" @@ -1509,13 +1533,13 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="du" cc="ae" country="United Arab Emirates" operator="Emirates Integrated Telecommunications Company" status="Operational" 00-99 425 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Orange" cc="il" country="Israel" operator="Partner Communications Company Ltd." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Partner" cc="il" country="Israel" operator="Partner Communications Company Ltd." status="Operational" 02 bands="GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Cellcom" cc="il" country="Israel" operator="Cellcom Israel Ltd." status="Operational" 03 bands="CDMA 800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Pelephone" cc="il" country="Israel" operator="Pelephone Communications Ltd." status="Operational" 04 bands="" cc="il" country="Israel" operator="Globalsim Ltd" status="" 05 bands="GSM 900" brand="Jawwal" cc="ps" country="Palestine" operator="Palestine Cellular Communications, Ltd." status="Operational" 06 bands="GSM 900 / GSM 1800" brand="Wataniya" cc="ps" country="Palestine" operator="Wataniya Palestine Mobile Telecommunications Company" status="Operational" - 07 bands="iDEN 800 / UMTS 2100" brand="Hot Mobile" cc="il" country="Israel" operator="Hot Mobile Ltd. (Former Mirs Communications)" status="Operational" + 07 bands="iDEN 800 / UMTS 2100" brand="Hot Mobile" cc="il" country="Israel" operator="Hot Mobile Ltd." status="Operational" 08 bands="UMTS 2100 / LTE 1800" brand="Golan Telecom" cc="il" country="Israel" operator="Golan Telecom Ltd" status="Operational" 11 bands="MVNO" cc="il" country="Israel" operator="365 Telecom" status="" 12 bands="MVNO" cc="il" country="Israel" operator="Free Telecom" status="" @@ -1531,6 +1555,7 @@ 23 bands="" cc="il" country="Israel" operator="Beezz Communication Solutions Ltd." status="" 24 bands="MVNO" brand="012 Telecom" cc="il" country="Israel" operator="Partner Communications Company Ltd." status="Operational" 25 bands="LTE" brand="IMOD" cc="il" country="Israel" operator="Israel Ministry of Defense" status="Not operational" + 28 bands="LTE 1800" cc="il" country="Israel" operator="PHI Networks" status="" 00-99 426 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Batelco" cc="bh" country="Bahrain" operator="Bahrain Telecommunications Company" status="Operational" @@ -1558,10 +1583,10 @@ 04 bands="GSM 900" brand="SmartCell" cc="np" country="Nepal" operator="Smart Telecom Pvt. Ltd." status="Operational" 00-99 432 - 11 bands="GSM 900 / GSM 1800 / UMTS" brand="IR-MCI (Hamrahe Avval)" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" + 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="IR-MCI (Hamrahe Avval)" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" 14 bands="GSM 900" brand="TKC" cc="ir" country="Iran" operator="Telecommunication Kish Company" status="Operational" 19 bands="GSM 900" brand="MTCE (Espadan)" cc="ir" country="Iran" operator="Mobile Telecommunications Company of Esfahan" status="Operational" - 20 bands="UMTS" brand="Rightel" cc="ir" country="Iran" status="Operational" + 20 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="Rightel" cc="ir" country="Iran" status="Operational" 32 bands="GSM 900 / GSM 1800" brand="Taliya" cc="ir" country="Iran" operator="Rafsanjan Industrial Complex" status="Operational" 35 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" 70 bands="GSM 900 / GSM 1800" brand="TCI" cc="ir" country="Iran" operator="Telephone Communications Company of Iran" status="Operational" @@ -1580,8 +1605,8 @@ 436 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="JV Somoncom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo Tajikistan" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Megafon Tajikistan" cc="tj" country="Tajikistan" operator="TT Mobile" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2100" brand="Babilon-M" cc="tj" country="Tajikistan" operator="Babilon-Mobile" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Megafon Tajikistan" cc="tj" country="Tajikistan" operator="TT Mobile" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2100" brand="Babilon-M" cc="tj" country="Tajikistan" operator="Babilon-Mobile" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="tj" country="Tajikistan" operator="Tacom" status="Operational" 12 bands="UMTS 2100" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo" status="" 00-99 @@ -1597,125 +1622,31 @@ 03 bands="CDMA 450" brand="AGTS CDMA" cc="tm" country="Turkmenistan" operator="AŞTU" status="Operational" 00-99 440 - 00 bands="UMTS 1700" brand="Y!Mobile" cc="jp" country="Japan" operator="EMOBILE Limited" status="Operational" - 01 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 02 bands="UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT DoCoMo - Kansai" status="Operational" - 03 bands="UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT DoCoMo - Hokuriku" status="Operational" - 04 bands="UMTS 900 / UMTS 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 06 bands="UMTS 900 / UMTS 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 07 bands="CDMA2000 / 1X EV-DO Rev.A" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 08 bands="CDMA2000" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 09 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Kansai" status="Operational" - 10 bands="UMTS 800 / UMTS 1700 / UMTS 2100 / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 11 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Tokai" status="Operational" - 12 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 13 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 14 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Tohoku" status="Operational" - 15 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 16 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 17 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 18 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Tokai" status="Operational" - 19 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Hokkaido" status="Operational" - 20 bands="UMTS 900 / UMTS 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 21 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 22 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Kansai" status="Operational" - 23 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Tokai" status="Operational" - 24 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Chugoku" status="Operational" - 25 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Hokkaido" status="Operational" - 26 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Kyushu" status="Operational" - 27 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Tohoku" status="Operational" - 28 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Shikoku" status="Operational" - 29 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 30 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 31 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Kansai" status="Operational" - 32 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo" status="Operational" - 33 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Tokai" status="Operational" - 34 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT docomo - Kyushu" status="Operational" - 35 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Kansai" status="Operational" - 36 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 37 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 38 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 39 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 40 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 41 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 42 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 43 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 44 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 45 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 46 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 47 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 48 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 49 bands="UMTS / HSDPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 50 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 51 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 52 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 53 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 54 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 55 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 56 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 58 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Kansai" status="Operational" - 60 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Kansai" status="Operational" - 61 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Chugoku" status="Operational" - 62 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Kyushu" status="Operational" - 63 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 64 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 65 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Shikoku" status="Operational" - 66 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 67 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Tohoku" status="Operational" - 68 bands="UMTS 800 / UMTS 1700 / UMTS 2100" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Kyushu" status="Operational" - 69 bands="UMTS / WCDMA / HSDPA / HSUPA / LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" - 70 bands="CDMA2000 800 / CDMA2000 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 71 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 72 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 73 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 74 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 75 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 76 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 77 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 78 bands="UMTS / HSDPA" cc="jp" country="Japan" operator="Okinawa Cellular Telephone" status="Operational" - 79 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 80 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Cellular Tokyo" status="Not operational" - 81 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Cellular Tokyo" status="Not operational" - 82 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Phone Kansai" status="Not operational" - 83 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Cellular Tokai" status="Not operational" - 84 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Phone Kansai" status="Not operational" - 85 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Cellular Tokai" status="Not operational" - 86 bands="GSM" brand="TU-KA" cc="jp" country="Japan" operator="TU-KA Cellular Tokyo" status="Not operational" - 87 bands="UMTS / HSDPA" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo - Chugoku" status="Operational" - 88 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 89 bands="WCDMA" brand="KDDI" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" - 90 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 92 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 93 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 94 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 95 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 96 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 97 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 98 bands="UMTS / HSPA+ / DC-HSDPA" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="Operational" - 99 bands="LTE (4G)" brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="Operational" + 00 bands="UMTS 1800" brand="Y!Mobile" cc="jp" country="Japan" operator="SoftBank Corp." status="Operational" + 01 bands="WiMAX 2500" brand="UQ WiMAX" cc="jp" country="Japan" operator="UQ Communications Inc." status="Operational" + 02 bands="WiMAX 2500" cc="jp" country="Japan" operator="Hanshin Cable Enginerring Co., Ltd." status="" + 05 bands="TD-LTE 2500" cc="jp" country="Japan" operator="Wireless City Planning Inc." status="Operational" + 10 bands="UMTS 850 / UMTS 1800 / UMTS 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 1800 / LTE 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT DoCoMo, Inc." status="Operational" + 20 bands="UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Corp." status="Operational" + 21 bands="UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Corp." status="Operational" + 50 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 51 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 52 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 53 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 54 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 70 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 71 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 72 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 73 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 74 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 75 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 76 bands="CDMA2000 850 / CDMA2000 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 2100" brand="au" cc="jp" country="Japan" operator="KDDI Corporation" status="Operational" + 78 bands="CDMA2000 850 / CDMA2000 2100" brand="au" cc="jp" country="Japan" operator="Okinawa Cellular Telephone" status="Operational" 00-99 441 - 40 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" - 41 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" - 42 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" - 43 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" - 44 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" - 45 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTTドコモ" status="" - 50 brand="TU-KA" cc="jp" country="Japan" operator="KDDI" status="" - 51 brand="TU-KA" cc="jp" country="Japan" operator="KDDI" status="" - 61 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" - 62 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" - 63 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" - 64 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" - 65 brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Mobile Corp" status="" - 70 brand="KDDI" cc="jp" country="Japan" operator="KDDI" status="" - 90 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" - 91 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" - 92 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" - 93 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" - 94 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" - 98 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" - 99 brand="NTT DoCoMo" cc="jp" country="Japan" operator="NTT DoCoMo" status="" + 00 bands="TD-LTE 2500" cc="jp" country="Japan" operator="Wireless City Planning Inc." status="Operational" + 01 bands="UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Corp." status="Operational" + 10 bands="WiMAX 2500" brand="UQ WiMAX" cc="jp" country="Japan" operator="UQ Communications Inc." status="Operational" 00-99 450 02 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" @@ -1894,6 +1825,7 @@ 30 bands="" cc="au" country="Australia" operator="Compatel Limited" status="" 31 bands="" cc="au" country="Australia" operator="BHP Billiton" status="" 32 bands="" cc="au" country="Australia" operator="Thales Australia" status="" + 33 bands="" cc="au" country="Australia" operator="CLX Networks Pty Ltd" status="" 38 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Crazy John's" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 62 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" 68 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" @@ -1905,17 +1837,17 @@ 00-99 510 00 bands="Satellite" brand="PSN" cc="id" country="Indonesia" operator="PT Pasifik Satelit Nusantara (ACeS)" status="Operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="INDOSAT" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Indosat Ooredoo" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" 03 bands="CDMA 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Not operational" 07 bands="CDMA 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Operational" - 08 bands="GSM 1800 / UMTS 2100" brand="AXIS" cc="id" country="Indonesia" operator="PT Natrindo Telepon Seluler" status="Operational" - 09 bands="CDMA 800 / CDMA 1900 / LTE 850 / LTE 1800 / TD-LTE 2300" brand="Smartfren" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" + 08 bands="GSM 1800 / UMTS 2100" brand="AXIS" cc="id" country="Indonesia" operator="PT Natrindo Telepon Seluler" status="Not operational" + 09 bands="CDMA 800 / CDMA 1900 / LTE 850 / TD-LTE 2300" brand="Smartfren" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" 20 bands="GSM 1800" brand="TELKOMMobile" cc="id" country="Indonesia" operator="PT Telkom Indonesia Tbk" status="Not operational" 21 bands="GSM 1800" brand="IM3" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Not operational" 27 bands="CDMA 450" brand="Ceria" cc="id" country="Indonesia" operator="PT Sampoerna Telekomunikasi Indonesia" status="Operational" - 28 bands="CDMA 800" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" + 28 bands="CDMA 800 LTE 850 / TD-LTE 2300" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" 88 bands="TD-LTE 2300" brand="BOLT! Super 4G" cc="id" country="Indonesia" operator="PT Internux" status="Operational" 89 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" @@ -1937,23 +1869,24 @@ 00-99 520 00 bands="UMTS 850" brand="my by CAT" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" - 01 bands="GSM 900 / UMTS 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Operational" - 02 bands="CDMA 800" brand="CAT CDMA" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" - 03 bands="UMTS 2100" brand="AIS 3G" cc="th" country="Thailand" operator="AWN" status="Operational" - 04 bands="UMTS 2100 / LTE 2100" brand="truemove H 4G LTE" cc="th" country="Thailand" operator="Real Future" status="Operational" - 05 bands="UMTS 2100 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTN" status="Operational" - 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="Operational" - 18 bands="GSM 1800 / UMTS 850 / LTE 1800" brand="dtac" cc="th" country="Thailand" operator="Total Access Communication" status="Operational" - 23 bands="GSM 1800" brand="AIS GSM 1800" cc="th" country="Thailand" operator="AIS)" status="Not operational" + 01 bands="GSM 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Operational" + 02 bands="CDMA 800" brand="CAT CDMA" cc="th" country="Thailand" operator="CAT Telecom" status="Not operational" + 03 bands="UMTS 2100 / LTE 1800" brand="AIS" cc="th" country="Thailand" operator="Advanced Wireless Network Company Ltd." status="Operational" + 04 bands="UMTS 2100 / LTE 1800 / LTE 2100" brand="TrueMove H 4G LTE" cc="th" country="Thailand" operator="Real Future Company Ltd." status="Operational" + 05 bands="UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTAC Network Company Ltd." status="Operational" + 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="TOT Public Company Limited" status="Operational" + 18 bands="GSM 1800" brand="dtac" cc="th" country="Thailand" operator="Total Access Communications Public Company Ltd." status="Operational" + 20 bands="Satellite" brand="ACeS" cc="th" country="Thailand" operator="ACeS" status="" + 23 bands="GSM 1800" brand="AIS GSM 1800" cc="th" country="Thailand" operator="Digital Phone Company Ltd." status="Not operational" 25 bands="PHS 1900" brand="WE PCT" cc="th" country="Thailand" operator="True Corporation" status="Operational" 47 bands="" cc="th" country="Thailand" operator="Telephone Organization of Thailand (TOT)" status="" - 99 bands="GSM 1800" brand="truemove" cc="th" country="Thailand" operator="True Corporation" status="Operational" + 99 bands="GSM 1800" brand="TrueMove" cc="th" country="Thailand" operator="True Corporation" status="Not operational" 00-99 525 - 01 bands="GSM 900/1800, UMTS 900/2100, LTE 1800/2600" brand="SingTel" cc="sg" country="Singapore" operator="Singapore Telecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="SingTel" cc="sg" country="Singapore" operator="Singapore Telecom" status="Operational" 02 bands="GSM 1800" brand="SingTel-G18" cc="sg" country="Singapore" operator="Singapore Telecom" status="Operational" - 03 bands="GSM 900/1800, UMTS 900/2100, LTE 1800/2600" brand="M1" cc="sg" country="Singapore" operator="M1 Limited" status="Operational" - 05 bands="GSM 1800, UMTS 900/2100, LTE 1800" brand="StarHub" cc="sg" country="Singapore" operator="StarHub Mobile" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="M1" cc="sg" country="Singapore" operator="M1 Limited" status="Operational" + 05 bands="GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="StarHub" cc="sg" country="Singapore" operator="StarHub Mobile" status="Operational" 06 bands="" brand="StarHub" cc="sg" country="Singapore" operator="StarHub Mobile" status="" 07 bands="" brand="SingTel" cc="sg" country="Singapore" operator="Singapore Telecom" status="" 12 bands="iDEN 800" brand="Grid" cc="sg" country="Singapore" operator="GRID Communications Pte Ltd." status="Operational" @@ -2126,7 +2059,7 @@ 03 bands="GSM 900" brand="Moov" cc="tg" country="Togo" operator="Moov Togo" status="Operational" 00-99 616 - 01 bands="GSM 900 / GSM 1800" brand="Libercom" cc="bj" country="Benin" operator="Benin Telecoms Mobile" status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 1800 / CDMA / WiMAX" brand="Libercom" cc="bj" country="Benin" operator="Benin Telecoms Mobile" status="Operational" 02 bands="GSM 900 / UMTS" brand="Moov" cc="bj" country="Benin" operator="Telecel Benin" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="MTN" cc="bj" country="Benin" operator="Spacetel Benin" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="BBCOM" cc="bj" country="Benin" operator="Bell Benin Communications" status="Operational" @@ -2341,7 +2274,7 @@ 647 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="re" country="Réunion (France)" operator="Orange La Réunion" status="Operational" 01 bands="" cc="re" country="Réunion (France)" operator="BJT Partners" status="" - 02 bands="GSM 900 / GSM 1800" brand="Outremer" cc="re" country="Réunion (France)" operator="Outremer Telecom" status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="only" cc="re" country="Réunion (France)" operator="Telco OI" status="Operational" 10 bands="GSM 900" brand="SFR Reunion" cc="re" country="Réunion (France)" operator="Societe Reunionnaise de Radiotelephone" status="Operational" 00-99 648 @@ -2354,6 +2287,7 @@ 02 bands="CDMA2000 800" brand="switch" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="TN Mobile" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" 04 bands="WiMAX 2500" cc="na" country="Namibia" operator="Paratus Telecommunications (Pty)" status="Operational" + 05 bands="" cc="na" country="Namibia" operator="Demshi Investments CC" status="" 00-99 650 01 bands="GSM 900 / GSM 1800" brand="TNM" cc="mw" country="Malawi" operator="Telecom Network Malawi" status="Operational" @@ -2390,6 +2324,7 @@ 17 bands="" cc="za" country="South Africa" operator="Sishen Iron Ore Company (Ltd) Pty" status="" 19 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" 21 bands="TETRA 410" cc="za" country="South Africa" operator="Cape Town Metropolitan Council" status="Operational" + 24 bands="" cc="za" country="South Africa" operator="SMS Portal (Pty) Ltd." status="" 25 bands="" cc="za" country="South Africa" operator="Wirels Connect" status="" 27 bands="" cc="za" country="South Africa" operator="A to Z Vaal Industrial Supplies Pty Ltd" status="" 30 bands="" cc="za" country="South Africa" operator="Bokamoso Consortium" status="Operational" @@ -2399,6 +2334,7 @@ 34 bands="" cc="za" country="South Africa" operator="Bokone Telecoms Pty Ltd" status="" 35 bands="" cc="za" country="South Africa" operator="Kingdom Communications Pty Ltd" status="" 36 bands="" cc="za" country="South Africa" operator="Amatole Telecommunications Pty Ltd" status="" + 38 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="" 41 bands="" cc="za" country="South Africa" operator="South African Police Service" status="" 50 bands="" cc="za" country="South Africa" operator="Ericsson South Africa (Pty) Ltd" status="" 51 bands="" cc="za" country="South Africa" operator="Integrat (Pty) Ltd" status="" @@ -2410,10 +2346,10 @@ 01 bands="GSM" brand="Sure" cc="sh" country="Saint Helena, Ascension and Tristan da Cunha" operator="Sure South Atlantic Ltd." status="Operational" 00-99 659 - 02 bands="GSM 900/1800, UMTS 2100" brand="MTN" cc="ss" country="South Sudan" operator="MTN South Sudan" status="Operational" - 03 bands="GSM 900/1800" brand="Gemtel" cc="ss" country="South Sudan" operator="Gemtel" status="Operational" - 04 bands="GSM 900/1800" brand="Vivacell" cc="ss" country="South Sudan" operator="Network of the World (NOW)" status="Operational" - 06 bands="GSM 900/1800" brand="Zain" cc="ss" country="South Sudan" operator="Zain South Sudan" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="ss" country="South Sudan" operator="MTN South Sudan" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="Gemtel" cc="ss" country="South Sudan" operator="Gemtel" status="Operational" + 04 bands="GSM 900 / GSM 1800" brand="Vivacell" cc="ss" country="South Sudan" operator="Network of the World (NOW)" status="Operational" + 06 bands="GSM 900 / GSM 1800" brand="Zain" cc="ss" country="South Sudan" operator="Zain South Sudan" status="Operational" 07 bands="CDMA" brand="Sudani" cc="ss" country="South Sudan" operator="Sudani" status="Operational" 00-99 702 @@ -2547,8 +2483,8 @@ 734 01 bands="GSM 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Not operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 1800" brand="Digitel GSM" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Operational" - 03 bands="GSM 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Not operational" - 04 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="movistar" cc="ve" country="Venezuela" operator="Telefónica Móviles Venezuela" status="Operational" + 03 bands="LTE 2600" brand="DirecTV" cc="ve" country="Venezuela" operator="Galaxy Entertainment de Venezuela C.A." status="" + 04 bands="GSM 850 / GSM 1900 / UMTS 1900 / LTE AWS" brand="movistar" cc="ve" country="Venezuela" operator="Telefónica Móviles Venezuela" status="Operational" 06 bands="CDMA2000 850 / GSM 850 / UMTS 1900" brand="Movilnet" cc="ve" country="Venezuela" operator="Telecomunicaciones Movilnet" status="Operational" 00-99 736 @@ -2559,11 +2495,13 @@ 738 01 bands="GSM 900" brand="Digicel" cc="gy" country="Guyana" operator="U-Mobile (Cellular) Inc." status="Operational" 02 bands="GSM 900" brand="GT&T Cellink Plus" cc="gy" country="Guyana" operator="Guyana Telephone & Telegraph Co." status="Operational" + 03 bands="TD-LTE" cc="gy" country="Guyana" operator="Quark Communications Inc." status="" + 05 bands="" cc="gy" country="Guyana" operator="eGovernment Unit, Ministry of the Presidency" status="" 00-99 740 00 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1900" brand="Movistar" cc="ec" country="Ecuador" operator="Otecel S.A." status="Operational" 01 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="Claro" cc="ec" country="Ecuador" operator="CONECEL S.A." status="Operational" - 02 bands="GSM 850 / UMTS / LTE 1700" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" + 02 bands="GSM 850 / UMTS 1900 / LTE 1700" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" 00-99 744 01 bands="GSM 1900 / UMTS 900" brand="VOX" cc="py" country="Paraguay" operator="Hola Paraguay S.A" status="Operational" @@ -2590,7 +2528,7 @@ 001 bands="GSM 900" brand="sure" cc="fk" country="Falkland Islands (United Kingdom)" operator="Batelco" status="Operational" 000-999 901 - 01 bands="Satellite" brand="ICO" country="International operators" operator="ICO Satellite Management" status="Operational" + 01 bands="Satellite" brand="ICO" country="International operators" operator="ICO Satellite Management" status="Not operational" 02 bands="" country="International operators" operator="Unassigned" status="Returned spare" 03 bands="Satellite" brand="Iridium" country="International operators" status="Operational" 04 bands="Satellite" country="International operators" operator="Unassigned" status="Returned spare" @@ -2599,7 +2537,7 @@ 07 bands="" country="International operators" operator="Unassigned" status="Returned spare" 08 bands="" country="International operators" operator="Unassigned" status="Returned spare" 09 bands="" country="International operators" operator="Unassigned" status="Returned spare" - 10 bands="Satellite" brand="ACeS" country="International operators" status="Operational" + 10 bands="Satellite" brand="ACeS" country="International operators" status="Not operational" 11 bands="Satellite" brand="Inmarsat" country="International operators" status="Operational" 12 bands="GSM 1800" brand="Telenor" country="International operators" operator="Maritime Communications Partner AS (MCP)" status="Operational" 13 bands="GSM 1800" brand="GSM.AQ" country="International operators" operator="BebbiCell AG" status="Operational" @@ -2607,7 +2545,7 @@ 15 bands="GSM 1800" brand="OnAir" country="International operators" operator="OnAir Switzerland Sarl" status="Operational" 16 bands="" country="International operators" operator="Jasper Systems" status="Operational" 17 bands="GSM 1800" brand="Navitas" country="International operators" operator="JT Group Limited" status="Not operational" - 18 bands="GSM 900 / GSM 1900 / CDMA2000 1900" brand="Cellular @Sea" country="International operators" operator="AT&T Mobility" status="Operational" + 18 bands="GSM 900 / GSM 1900 / CDMA2000 1900 / UMTS 1900" brand="Cellular @Sea" country="International operators" operator="AT&T Mobility" status="Operational" 19 bands="GSM 900 / GSM 1800 / UMTS 2100" country="International operators" operator="Vodafone Malta Maritime" status="Operational" 20 bands="" country="International operators" operator="Intermatica" status="" 21 bands="GSM 1800" country="International operators" operator="Wins Limited" status="Operational" @@ -2637,5 +2575,9 @@ 45 bands="" country="International operators" operator="Advanced Wireless Network Company Limited" status="" 46 bands="MVNO" country="International operators" operator="Telecom26 AG" status="Operational" 47 bands="" country="International operators" operator="Ooredoo" status="" + 48 bands="" country="International operators" operator="Communication for Devices in Sweden AB" status="" + 49 bands="" country="International operators" operator="Zain Kuwait" status="" + 50 bands="Satellite" country="International operators" operator="EchoStar Mobile" status="" + 51 bands="" country="International operators" operator="VisionNG" status="" 88 bands="" country="International operators" operator="UN Office for the Coordination of Humanitarian Affairs (OCHA)" status="" 00-99 diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index 7bd86c46..103e27a9 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,7 +1,7 @@ # generated from RangeMessage.xml, downloaded from # https://www.isbn-international.org/export_rangemessage.xml -# file serial e055fb55-2661-4102-a6dc-6885d2dab806 -# file date Thu, 3 Sep 2015 12:56:52 CEST +# file serial 91da4d76-b504-4412-94e1-741f2d6bbbe8 +# file date Wed, 2 Mar 2016 17:53:37 CET 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" @@ -28,8 +28,8 @@ 00-19,200-699,7000-7999,80000-84999,85-99 602 agency="Indonesia" 00-07,0800-0899,0900-1099,1100-1199,1200-1399,14000-14999,1500-1699 - 17000-17999,18000-18999,19000-19999,200-674,6750-6999,70000-74999 - 7500-7999,8000-9499,95000-99999 + 17000-17999,18000-18999,19000-19999,200-619,6200-6749,6750-6999 + 70000-74999,7500-7999,8000-9499,95000-99999 603 agency="Saudi Arabia" 00-04,05-49,500-799,8000-8999,90000-99999 604 agency="Vietnam" @@ -37,7 +37,7 @@ 605 agency="Turkey" 01-02,030-039,04-09,100-399,4000-5999,60000-89999,9000-9999 606 agency="Romania" - 0-0,10-49,500-799,8000-9199,92000-99999 + 0-0,10-49,500-799,8000-9099,910-919,92000-97499,975-999 607 agency="Mexico" 00-39,400-749,7500-9499,95000-99999 608 agency="Macedonia" @@ -112,8 +112,8 @@ 954 agency="Bulgaria" 00-28,2900-2999,300-799,8000-8999,90000-92999,9300-9999 955 agency="Sri Lanka" - 0000-1999,20-40,41000-43999,44000-44999,4500-4999,50000-54999,550-749 - 7500-7999,8000-9499,95000-99999 + 0000-1999,20-38,3900-4099,41000-43999,44000-44999,4500-4999,50000-54999 + 550-749,7500-7999,8000-9499,95000-99999 956 agency="Chile" 00-19,200-699,7000-9999 957 agency="Taiwan" @@ -140,8 +140,8 @@ 00-12,130-139,14-14,1500-1699,170-199,2000-2789,279-289,2900-2999 300-699,7000-8999,90000-90999,910-949,95000-97999,980-999 967 agency="Malaysia" - 00-00,0100-0999,10000-19999,300-499,5000-5999,60-89,900-989,9900-9989 - 99900-99999 + 00-00,0100-0999,10000-19999,2000-2499,300-499,5000-5999,60-89,900-989 + 9900-9989,99900-99999 968 agency="Mexico" 01-39,400-499,5000-7999,800-899,9000-9999 969 agency="Pakistan" diff --git a/stdnum/isil.dat b/stdnum/isil.dat index f507d5e0..79859301 100644 --- a/stdnum/isil.dat +++ b/stdnum/isil.dat @@ -28,7 +28,7 @@ NZ$ country="New Zealand" ra_url="http://natlib.govt.nz/" ra="National Library o QA$ country="Qatar" ra_url="http://www.qnl.qa/" ra="Qatar National Library (QNL)" RU$ country="Russian Federation" ra_url="http://english.gpntb.ru/" ra="Russian National Public Library for Science and Technology" SI$ country="The Republic of Slovenia" ra_url="http://www.nuk.uni-lj.si/nukeng3.asp?id=311364382" ra="National and University Library" -SK$ country="Slovak Republic" ra_url="http://www.snk.sk" ra="Slovak National Library" +SK$ country="Slovak Republic" ra_url="http://www.snk.sk/en/information-for/libraries-and-librarians/isil.html" ra="Slovak National Library" O$ ra="See OCLC" OCLC$ country="WorldCat Symbol" ra_url="http://www.oclc.org" ra="OCLC" ZDB$ country="Staatsbibliothek zu Berlin - Zeitschriftendatenbank" ra="Staatsbibliothek zu Berlin" From 41cecb5f2714d75a09e35385fd45b15fb8a03d29 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 5 Mar 2016 23:42:43 +0100 Subject: [PATCH 087/654] Get files ready for 1.3 release --- ChangeLog | 59 ++++++++++++++++++++++++++++++++++++++++++++++ NEWS | 9 +++++++ getnumlist.py | 4 ++-- setup.py | 2 +- stdnum/__init__.py | 4 ++-- 5 files changed, 73 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9307465d..a78944c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,62 @@ +2016-03-03 Arthur de Jong + + * [6457734] getcnloc.py, getiban.py, stdnum/cn/loc.dat, + stdnum/iban.dat, stdnum/imsi.dat, stdnum/isbn.dat, stdnum/isil.dat: + Update database files + + This also updates the getcnloc and getiban scripts to use new URLs. + +2015-10-30 Arthur de Jong + + * [0061564] stdnum/dk/cpr.py, stdnum/iban.py, stdnum/imei.py, + stdnum/isbn.py, stdnum/isil.py, stdnum/issn.py, stdnum/nl/bsn.py, + stdnum/us/ssn.py, stdnum/verhoeff.py: Integrate information from + the wiki + + This adds the information that was previously in the Trac wiki + into the source docstrings because the Trac instance is being + phased out. + + This also includes small updates to the ISIL module. + +2015-10-28 Arthur de Jong + + * [96c8151] stdnum/eu/vat.py: Fix SOAP client re-use + + This fixes a bug when checking re-use of the global SOAP client + object. The object could not be evaluated in boolean context + so is no explicitly compared to None. For suds a MethodNotFound + exception would be raised for __nonzero__() (which Python uses + for boolean comparison). + +2015-10-28 Lionel Elie Mamane + + * [2881b86] stdnum/eu/vat.py: Fix problem with check_vies_approx() + +2015-10-15 Ronald Paloschi + + * [fb0efe0] stdnum/iso6346.py, tests/test_iso6346.doctest: Fix + for when ISO 6346 checksum is 10 + + Bug fix for when the checksum is 10, it was compared to 0 and + failed. New doctest exposing the bug that passes after the fix + is applied. + + See: https://github.com/arthurdejong/python-stdnum/pull/30 + +2015-10-11 Arthur de Jong + + * [1361817] ChangeLog, MANIFEST.in, NEWS, README, docs/index.rst, + docs/stdnum.at.businessid.rst, docs/stdnum.br.cnpj.rst, + docs/stdnum.ch.uid.rst, docs/stdnum.ch.vat.rst, + docs/stdnum.cusip.rst, docs/stdnum.de.wkn.rst, + docs/stdnum.ee.ik.rst, docs/stdnum.fi.associationid.rst, + docs/stdnum.fi.ytunnus.rst, docs/stdnum.gb.sedol.rst, + docs/stdnum.imo.rst, docs/stdnum.isin.rst, docs/stdnum.mx.rfc.rst, + docs/stdnum.pl.pesel.rst, docs/stdnum.pl.regon.rst, + docs/stdnum.ru.inn.rst, setup.py, stdnum/__init__.py: Get files + ready for 1.2 release + 2015-10-11 Arthur de Jong * [1327045] getcnloc.py, stdnum/cn/loc.dat, stdnum/iban.dat, diff --git a/NEWS b/NEWS index f40fdee6..50e94c4a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ +changes from 1.2 to 1.3 +----------------------- + +* fix ISO 6346 check digit calculation (thanks Ronald Paloschi) +* fix problem with check_vies_approx() (thanks Lionel Elie Mamane) +* fix problem with SOAP client when using suds +* include documentation that was previously on the Trac wiki + + changes from 1.1 to 1.2 ----------------------- diff --git a/getnumlist.py b/getnumlist.py index 97c91bcf..4c74479d 100755 --- a/getnumlist.py +++ b/getnumlist.py @@ -2,7 +2,7 @@ # getnumlist.py - script to get a list of number formats in stdnum # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -57,7 +57,7 @@ def get_number_modules(): for module in get_number_modules(): print ' %s' % module.__name__.replace('stdnum.', '') print '' - print 'For index.xml:' + print 'For formats.xml:' print '' for module in get_number_modules(): print '
  • %s
  • ' % util.get_module_name(module) diff --git a/setup.py b/setup.py index 2562691f..d91a7a93 100755 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ # setup.py - python-stdnum installation script # -# Copyright (C) 2010-2015 Arthur de Jong +# Copyright (C) 2010-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public diff --git a/stdnum/__init__.py b/stdnum/__init__.py index 78c033dd..8da7c353 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -1,7 +1,7 @@ # __init__.py - main module # coding: utf-8 # -# Copyright (C) 2010-2015 Arthur de Jong +# Copyright (C) 2010-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -153,4 +153,4 @@ # the version number of the library -__version__ = '1.2' +__version__ = '1.3' From 095dcbb11f6fc9f5ddee90c27b4d466c4a75a7ed Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 1 Apr 2016 22:06:17 +0200 Subject: [PATCH 088/654] Document accuracy of RFC check digit test There is an online service that allows validating RFC numbers. It seems there are a lot of numbers that do not match the check digit algorithm which confirms disabling the check digit test by default is a good idea. Also see https://github.com/arthurdejong/python-stdnum/issues/32 --- stdnum/mx/rfc.py | 8 ++++++-- tests/test_mx_rfc.doctest | 9 +++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/stdnum/mx/rfc.py b/stdnum/mx/rfc.py index 72084e6c..2e47238d 100644 --- a/stdnum/mx/rfc.py +++ b/stdnum/mx/rfc.py @@ -31,13 +31,17 @@ The first two check digits are calculated based on the person's or company's full name. The last check digit is calculated over all the preceding digits -in the number. However, it seems a lot of numbers are in use with invalid -check digits so this test is disabled by default. +in the number. However, it seems a lot of numbers (estimated at around 1.5% +of all numbers) are in use with invalid check digits so this test is disabled +by default. More information can be found at: http://www.sisi.org.mx/jspsi/documentos/2005/seguimiento/06101/0610100162005_065.doc https://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico) +An online validation service is available at: + https://portalsat.plataforma.sat.gob.mx/ConsultaRFC/ + >>> validate('GODE 561231 GR8') # personal number 'GODE561231GR8' >>> validate('MAB-930714-8T4') # company number diff --git a/tests/test_mx_rfc.doctest b/tests/test_mx_rfc.doctest index 57cb54b0..2d5e2f30 100644 --- a/tests/test_mx_rfc.doctest +++ b/tests/test_mx_rfc.doctest @@ -416,7 +416,9 @@ numbers all have valid check digits (also see the list below). The following numbers were also found online, and while they appear to be in use and referencing existing persons or organisations, the check digit does -not validate. +not validate. All of these have been checked to be valid on +https://portalsat.plataforma.sat.gob.mx/ConsultaRFC/ +(note that this website expects ISO-8859-1 encoded numbers) >>> numbers = ''' ... @@ -461,7 +463,6 @@ not validate. ... EQU810430193 ... FAE8509042W7 ... FIS0008226ZA -... FISL7809158A0 ... FME9305279N0 ... FSA080813655 ... FSI900505I74 @@ -484,12 +485,10 @@ not validate. ... LMI0811119C5 ... LOCB6410225K0 ... LOMM8110052J4 -... MAEE620525S14 ... MALC721019EV6 ... MDI931014D37 ... MFA840320DX0 ... MGR070820G78 -... MOJO6101239H7 ... MPT000824LH7 ... MSA850111TE1 ... NIÑ7409256U1 @@ -499,7 +498,6 @@ not validate. ... OMD100907CJ4 ... OPP010927SA5 ... OTM090818KS6 -... PAC8608084O8 ... PEJE480914ES9 ... PERL640914HY9 ... PPA100118E37 @@ -523,7 +521,6 @@ not validate. ... TPT890516JP5 ... VAME720111AA4 ... WME000218GK3 -... YLO031113IP4 ... YME9610251W6 ... ... ''' From 619b097dfe1a549808f2ae6c0072cd6006107052 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 9 Apr 2016 20:14:09 +0200 Subject: [PATCH 089/654] Add Turkish personal identification number --- stdnum/tr/__init__.py | 0 stdnum/tr/tckimlik.py | 85 ++++++++++++ tests/test_tr_tckimlik.doctest | 234 +++++++++++++++++++++++++++++++++ 3 files changed, 319 insertions(+) create mode 100644 stdnum/tr/__init__.py create mode 100644 stdnum/tr/tckimlik.py create mode 100644 tests/test_tr_tckimlik.doctest diff --git a/stdnum/tr/__init__.py b/stdnum/tr/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/stdnum/tr/tckimlik.py b/stdnum/tr/tckimlik.py new file mode 100644 index 00000000..940024a6 --- /dev/null +++ b/stdnum/tr/tckimlik.py @@ -0,0 +1,85 @@ +# tckimlik.py - functions for handling T.C. Kimlik No. +# coding: utf-8 +# +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""T.C. Kimlik No. (Turkish personal identification number) + +The Turkish Identification Number (Türkiye Cumhuriyeti Kimlik Numarası) is a +unique personal identification number assigned to every citizen of Turkey. +The number consists of 11 digits and the last two digits are check digits. + +More information can be found at: + https://en.wikipedia.org/wiki/Turkish_Identification_Number + https://tckimlik.nvi.gov.tr/ + +>>> validate('17291716060') +'17291716060' +>>> validate('17291716050') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('1729171606') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> validate('07291716092') # number must not start with a 0 +Traceback (most recent call last): + ... +InvalidFormat: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number).strip() + + +def calc_check_digits(number): + """Calculate the check digits for the specified number. The number + passed should not have the check digit included.""" + check1 = (10 - sum((3 - 2 * (i % 2)) * int(n) + for i, n in enumerate(number[:9]))) % 10 + check2 = (check1 + sum(int(n) for n in number[:9])) % 10 + return '%d%d' % (check1, check2) + + +def validate(number): + """Checks to see if the number provided is a valid .C. Kimlik No.. + This checks the length and check digits""" + number = compact(number) + if not number.isdigit() or number[0] == '0': + raise InvalidFormat() + if len(number) != 11: + raise InvalidLength() + if calc_check_digits(number) != number[-2:]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid .C. Kimlik No.. + This checks the length and check digits""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_tr_tckimlik.doctest b/tests/test_tr_tckimlik.doctest new file mode 100644 index 00000000..c3cb4a2a --- /dev/null +++ b/tests/test_tr_tckimlik.doctest @@ -0,0 +1,234 @@ +test_tr_tckimlik.doctest - more detailed doctests for stdnum.tr.tckimlik + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.tr.tckimlik +module. + +>>> from stdnum.tr import tckimlik + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 10010405214 +... 10036951702 +... 10048987300 +... 10211782428 +... 10328097460 +... 10406257588 +... 10634889650 +... 10942702016 +... 10945940248 +... 10964454474 +... 11015620602 +... 11051965132 +... 11272211322 +... 11510943206 +... 11521565534 +... 11629545766 +... 11678091474 +... 11678588622 +... 11856036426 +... 12245687724 +... 12254905536 +... 12281024156 +... 12629254764 +... 12668958814 +... 12691048056 +... 12743195844 +... 12790164022 +... 12797231260 +... 13159065448 +... 13195732540 +... 13267669224 +... 13331822036 +... 13466947000 +... 13481622074 +... 13649294334 +... 13684258322 +... 13700315886 +... 13789534246 +... 13796225410 +... 14693160156 +... 14834750260 +... 14953629638 +... 15038532782 +... 15076154212 +... 16130649606 +... 16168925222 +... 16412902252 +... 16834076296 +... 16910960518 +... 17311901384 +... 17690240920 +... 18164076700 +... 18535119968 +... 18563796476 +... 18737290298 +... 18766481124 +... 18986317036 +... 19261708150 +... 19304490066 +... 19315991200 +... 19594888024 +... 19649559862 +... 19736210324 +... 19946754342 +... 20923453974 +... 21289134606 +... 22508375282 +... 22514314664 +... 22645425550 +... 22850263862 +... 23128444884 +... 23761367960 +... 23776369980 +... 23803533490 +... 23812308782 +... 23893394292 +... 23945549168 +... 24118906764 +... 24721853608 +... 25171067942 +... 25175346104 +... 25262304970 +... 26465047138 +... 26912437970 +... 27085445038 +... 27352676660 +... 27806346354 +... 27977266680 +... 28040246264 +... 28196469500 +... 28423494398 +... 29008505256 +... 29449926498 +... 29458830458 +... 29660083116 +... 29663288082 +... 29717351038 +... 30229834674 +... 30517382986 +... 30547067204 +... 30713063856 +... 30841564102 +... 31177269242 +... 31261062360 +... 31378085252 +... 31666319410 +... 31972018304 +... 32080659878 +... 32191139436 +... 32276435798 +... 32362147840 +... 32383033566 +... 32806023532 +... 32986865670 +... 33163817956 +... 33370005450 +... 33632324534 +... 33869149092 +... 34399824114 +... 34411781920 +... 34837267190 +... 35209878136 +... 35389844082 +... 35467790720 +... 35740345494 +... 35927206914 +... 35944794678 +... 36412601542 +... 36799571254 +... 37474709214 +... 37561226518 +... 37708357112 +... 37987046004 +... 38065982832 +... 38312029198 +... 38491580480 +... 38818946524 +... 39346988482 +... 39433505530 +... 39488099268 +... 39556079970 +... 39872148282 +... 40285129270 +... 40429332580 +... 41116624858 +... 41314615566 +... 41537123152 +... 41740577612 +... 42529353182 +... 42568749892 +... 42679341534 +... 43198351554 +... 43282542684 +... 43609945662 +... 43846057142 +... 43879752656 +... 44815212906 +... 45358790944 +... 45577460604 +... 46162064740 +... 46186184424 +... 46786024366 +... 47248345760 +... 47353662028 +... 48064083294 +... 48637402194 +... 48637792714 +... 48883810224 +... 49432850678 +... 49636373966 +... 49879800274 +... 50035230828 +... 50479247086 +... 51508004946 +... 51532505860 +... 51865395732 +... 53320726198 +... 53728014842 +... 54439040694 +... 54508382038 +... 54541189670 +... 54781681538 +... 55996400266 +... 56698147152 +... 57025178016 +... 57061155224 +... 59020072634 +... 59464150004 +... 59599009130 +... 59605521564 +... 61579176350 +... 61957262828 +... 62077362474 +... 62224350880 +... 62512131214 +... 63352195206 +... 64756048358 +... 68536141048 +... 69844021374 +... 71467095762 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not tckimlik.is_valid(x)] +[] From feab9177256f77da9413a397016691fad177be79 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 9 Apr 2016 21:51:47 +0200 Subject: [PATCH 090/654] Implement online TC Kimlik check This refactors out the SOAP client function that was implemented for VIES to the stdnum.utils module. --- stdnum/eu/vat.py | 15 ++------------- stdnum/tr/tckimlik.py | 34 +++++++++++++++++++++++++++++++++- stdnum/util.py | 20 +++++++++++++++++++- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index 2c6728ec..88d97efb 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -40,7 +40,7 @@ """ from stdnum.exceptions import * -from stdnum.util import clean, get_vat_module +from stdnum.util import clean, get_vat_module, get_soap_client country_codes = set([ @@ -118,18 +118,7 @@ def _get_client(): # pragma: no cover (no tests for this function) # it are not automatically tested global _vies_client if _vies_client is None: - try: - from urllib import getproxies - except ImportError: - from urllib.request import getproxies - # try suds first - try: - from suds.client import Client - _vies_client = Client(vies_wsdl, proxy=getproxies()).service - except ImportError: - # fall back to using pysimplesoap - from pysimplesoap.client import SoapClient - _vies_client = SoapClient(wsdl=vies_wsdl, proxy=getproxies()) + _vies_client = get_soap_client(vies_wsdl) return _vies_client diff --git a/stdnum/tr/tckimlik.py b/stdnum/tr/tckimlik.py index 940024a6..a465cf32 100644 --- a/stdnum/tr/tckimlik.py +++ b/stdnum/tr/tckimlik.py @@ -45,7 +45,15 @@ """ from stdnum.exceptions import * -from stdnum.util import clean +from stdnum.util import clean, get_soap_client + + +tckimlik_wsdl = 'https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL' +"""The WSDL URL of the T.C. Kimlik validation service.""" + + +# a cached version of the SOAP client for Kimlik validation +_tckimlik_client = None def compact(number): @@ -83,3 +91,27 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def _get_client(): # pragma: no cover (no tests for this function) + """Get a SOAP client for performing T.C. Kimlik validation.""" + # this function isn't automatically tested because the functions using + # it are not automatically tested + global _tckimlik_client + if _tckimlik_client is None: + _tckimlik_client = get_soap_client(tckimlik_wsdl) + return _tckimlik_client + + +def check_kps(number, name, surname, birth_year): # pragma: no cover + """Queries the online T.C. Kimlik validation service run by the + Directorate of Population and Citizenship Affairs. This returns a boolean + but may raise a SOAP exception for missing or invalid values.""" + # this function isn't automatically tested because it would require + # network access for the tests and unnecessarily load the online service + number = compact(number) + result = _get_client().TCKimlikNoDogrula( + TCKimlikNo=number, Ad=name, Soyad=surname, DogumYili=birth_year) + if hasattr(result, 'get'): + return result.get('TCKimlikNoDogrulaResult') + return result diff --git a/stdnum/util.py b/stdnum/util.py index efaa5ca2..266b2927 100644 --- a/stdnum/util.py +++ b/stdnum/util.py @@ -1,7 +1,7 @@ # util.py - common utility functions # coding: utf-8 # -# Copyright (C) 2012, 2013, 2015 Arthur de Jong +# Copyright (C) 2012-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -178,3 +178,21 @@ def get_vat_module(cc): cc = cc.lower() cc = _cc_translations.get(cc, cc) return __import__('stdnum.%s' % cc, globals(), locals(), ['vat']).vat + + +def get_soap_client(wsdlurl): # pragma: no cover (no tests for this function) + """Get a SOAP client for performing requests.""" + # this function isn't automatically tested because the functions using + # it are not automatically tested + try: + from urllib import getproxies + except ImportError: + from urllib.request import getproxies + # try suds first + try: + from suds.client import Client + return Client(wsdlurl, proxy=getproxies()).service + except ImportError: + # fall back to using pysimplesoap + from pysimplesoap.client import SoapClient + return SoapClient(wsdl=wsdlurl, proxy=getproxies()) From e28b5e10acc6050f016c1171c35b10354927a8b2 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 11 Apr 2016 22:58:17 +0200 Subject: [PATCH 091/654] Make more information links consistent Also fix a docstring in stdnum.nl.bsn and add a pointer to stdnum.nl.onderwijsnummer. --- stdnum/ch/uid.py | 7 ++++--- stdnum/ch/vat.py | 7 ++++--- stdnum/cusip.py | 5 +++-- stdnum/dk/cpr.py | 7 ++++--- stdnum/iban.py | 5 +++-- stdnum/imei.py | 3 ++- stdnum/isbn.py | 5 +++-- stdnum/isil.py | 7 ++++--- stdnum/isin.py | 3 ++- stdnum/issn.py | 5 +++-- stdnum/mx/rfc.py | 10 ++++++---- stdnum/nl/bsn.py | 9 +++++---- stdnum/nl/onderwijsnummer.py | 4 ++++ stdnum/pl/regon.py | 9 +++++---- stdnum/tr/tckimlik.py | 7 ++++--- stdnum/us/ssn.py | 7 ++++--- stdnum/verhoeff.py | 5 +++-- 17 files changed, 63 insertions(+), 42 deletions(-) diff --git a/stdnum/ch/uid.py b/stdnum/ch/uid.py index 6622f50b..62800bc1 100644 --- a/stdnum/ch/uid.py +++ b/stdnum/ch/uid.py @@ -27,9 +27,10 @@ This module only supports the "new" format that was introduced in 2011 which completely replaced the "old" 6-digit format in 2014. -More information is available at: - https://www.uid.admin.ch/ - https://de.wikipedia.org/wiki/Unternehmens-Identifikationsnummer +More information: + +* https://www.uid.admin.ch/ +* https://de.wikipedia.org/wiki/Unternehmens-Identifikationsnummer >>> validate('CHE-100.155.212') 'CHE100155212' diff --git a/stdnum/ch/vat.py b/stdnum/ch/vat.py index a61c49e2..6e32ea72 100644 --- a/stdnum/ch/vat.py +++ b/stdnum/ch/vat.py @@ -28,9 +28,10 @@ This module only supports the "new" format that was introduced in 2011 which completely replaced the "old" 6-digit format in 2014. -More information is available at: - https://www.ch.ch/en/value-added-tax-number-und-business-identification-number/ - https://www.uid.admin.ch/ +More information: + +* https://www.ch.ch/en/value-added-tax-number-und-business-identification-number/ +* https://www.uid.admin.ch/ >>> validate('CHE-107.787.577 IVA') 'CHE107787577IVA' diff --git a/stdnum/cusip.py b/stdnum/cusip.py index acd27d1a..f6858802 100644 --- a/stdnum/cusip.py +++ b/stdnum/cusip.py @@ -25,8 +25,9 @@ followed by two digits that identify and a check digit. More information: - https://en.wikipedia.org/wiki/CUSIP - https://www.cusip.com/ + +* https://en.wikipedia.org/wiki/CUSIP +* https://www.cusip.com/ >>> validate('DUS0421C5') 'DUS0421C5' diff --git a/stdnum/dk/cpr.py b/stdnum/dk/cpr.py index bdbbbb95..2566c641 100644 --- a/stdnum/dk/cpr.py +++ b/stdnum/dk/cpr.py @@ -31,9 +31,10 @@ numbers are also assigned to immigrants. More information: - https://en.wikipedia.org/wiki/Personal_identification_number_(Denmark) - https://da.wikipedia.org/wiki/CPR-nummer - https://cpr.dk/ + +* https://en.wikipedia.org/wiki/Personal_identification_number_(Denmark) +* https://da.wikipedia.org/wiki/CPR-nummer +* https://cpr.dk/ >>> validate('211062-5629') '2110625629' diff --git a/stdnum/iban.py b/stdnum/iban.py index ff33cddc..ae01a02d 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -28,8 +28,9 @@ this is currently not checked by this number. More information: - https://en.wikipedia.org/wiki/International_Bank_Account_Number - https://www.swift.com/products_services/bic_and_iban_format_registration_iban_format_r + +* https://en.wikipedia.org/wiki/International_Bank_Account_Number +* https://www.swift.com/products_services/bic_and_iban_format_registration_iban_format_r >>> validate('GR16 0110 1050 0000 1054 7023 795') 'GR1601101050000010547023795' diff --git a/stdnum/imei.py b/stdnum/imei.py index 8c0c1a0f..f0300713 100644 --- a/stdnum/imei.py +++ b/stdnum/imei.py @@ -25,7 +25,8 @@ validated using the Luhn algorithm. More information: - https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity + +* https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity >>> validate('35686800-004141-20') '3568680000414120' diff --git a/stdnum/isbn.py b/stdnum/isbn.py index 6b9233b5..b511c4c8 100644 --- a/stdnum/isbn.py +++ b/stdnum/isbn.py @@ -31,8 +31,9 @@ * a check digit More information: - https://en.wikipedia.org/wiki/International_Standard_Book_Number - https://www.isbn-international.org/range_file_generation + +* https://en.wikipedia.org/wiki/International_Standard_Book_Number +* https://www.isbn-international.org/range_file_generation This module also offers functions for converting to ISBN-13 and formatting based on how the number should be split into a bookland code, group diff --git a/stdnum/isil.py b/stdnum/isil.py index 219e89ee..30dea53d 100644 --- a/stdnum/isil.py +++ b/stdnum/isil.py @@ -38,9 +38,10 @@ web services for validation) but there is no common format to these services. More information: - https://en.wikipedia.org/wiki/ISBT_128 - http://biblstandard.dk/isil/ - http://www.iso.org/iso/catalogue_detail?csnumber=57332 + +* https://en.wikipedia.org/wiki/ISBT_128 +* http://biblstandard.dk/isil/ +* http://www.iso.org/iso/catalogue_detail?csnumber=57332 >>> validate('IT-RM0267') 'IT-RM0267' diff --git a/stdnum/isin.py b/stdnum/isin.py index c6e93d53..135326ae 100644 --- a/stdnum/isin.py +++ b/stdnum/isin.py @@ -28,7 +28,8 @@ security identifier part (e.g. when it is a CUSIP). More information: - https://en.wikipedia.org/wiki/International_Securities_Identification_Number + +* https://en.wikipedia.org/wiki/International_Securities_Identification_Number >>> validate('US0378331005') 'US0378331005' diff --git a/stdnum/issn.py b/stdnum/issn.py index 8be1f2cc..4fa113d0 100644 --- a/stdnum/issn.py +++ b/stdnum/issn.py @@ -27,8 +27,9 @@ ISBN-10). More information: - https://en.wikipedia.org/wiki/International_Standard_Serial_Number - http://www.issn.org/ + +* https://en.wikipedia.org/wiki/International_Standard_Serial_Number +* http://www.issn.org/ >>> validate('0024-9319') '00249319' diff --git a/stdnum/mx/rfc.py b/stdnum/mx/rfc.py index 2e47238d..10da251a 100644 --- a/stdnum/mx/rfc.py +++ b/stdnum/mx/rfc.py @@ -35,12 +35,14 @@ of all numbers) are in use with invalid check digits so this test is disabled by default. -More information can be found at: - http://www.sisi.org.mx/jspsi/documentos/2005/seguimiento/06101/0610100162005_065.doc - https://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico) +More information: + +* http://www.sisi.org.mx/jspsi/documentos/2005/seguimiento/06101/0610100162005_065.doc +* https://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico) An online validation service is available at: - https://portalsat.plataforma.sat.gob.mx/ConsultaRFC/ + +* https://portalsat.plataforma.sat.gob.mx/ConsultaRFC/ >>> validate('GODE 561231 GR8') # personal number 'GODE561231GR8' diff --git a/stdnum/nl/bsn.py b/stdnum/nl/bsn.py index 280cc9bd..c9e6f570 100644 --- a/stdnum/nl/bsn.py +++ b/stdnum/nl/bsn.py @@ -24,9 +24,10 @@ leading 0's are commonly left out) and contains a simple checksum. More information: - https://en.wikipedia.org/wiki/National_identification_number#Netherlands - https://nl.wikipedia.org/wiki/Burgerservicenummer - http://www.burgerservicenummer.nl/ + +* https://en.wikipedia.org/wiki/National_identification_number#Netherlands +* https://nl.wikipedia.org/wiki/Burgerservicenummer +* http://www.burgerservicenummer.nl/ >>> validate('1112.22.333') '111222333' @@ -56,7 +57,7 @@ def compact(number): def checksum(number): """Calculate the checksum over the number. A valid number should have - a check digit of 0.""" + a checksum of 0.""" return (sum((9 - i) * int(n) for i, n in enumerate(number[:-1])) - int(number[-1])) % 11 diff --git a/stdnum/nl/onderwijsnummer.py b/stdnum/nl/onderwijsnummer.py index 0fbb3fc3..b8d32c47 100644 --- a/stdnum/nl/onderwijsnummer.py +++ b/stdnum/nl/onderwijsnummer.py @@ -23,6 +23,10 @@ national identification number) for students without a BSN. It uses a checksum mechanism similar to the BSN. +More information: + +* https://nl.wikipedia.org/wiki/Onderwijsnummer + >>> validate('1012.22.331') '101222331' >>> validate('100252333') diff --git a/stdnum/pl/regon.py b/stdnum/pl/regon.py index ac8cffbe..82af03a8 100644 --- a/stdnum/pl/regon.py +++ b/stdnum/pl/regon.py @@ -25,10 +25,11 @@ number for businesses. National entities are assigned a 9-digit number, while local units append 5 digits to form a 14-digit number. -More information can be found at: - http://bip.stat.gov.pl/en/regon/ - http://www.stat.gov.pl/bip/regon_ENG_HTML.htm - https://wyszukiwarkaregon.stat.gov.pl/appBIR/index.aspx +More information: + +* http://bip.stat.gov.pl/en/regon/ +* http://www.stat.gov.pl/bip/regon_ENG_HTML.htm +* https://wyszukiwarkaregon.stat.gov.pl/appBIR/index.aspx >>> validate('192598184') '192598184' diff --git a/stdnum/tr/tckimlik.py b/stdnum/tr/tckimlik.py index a465cf32..4083229f 100644 --- a/stdnum/tr/tckimlik.py +++ b/stdnum/tr/tckimlik.py @@ -24,9 +24,10 @@ unique personal identification number assigned to every citizen of Turkey. The number consists of 11 digits and the last two digits are check digits. -More information can be found at: - https://en.wikipedia.org/wiki/Turkish_Identification_Number - https://tckimlik.nvi.gov.tr/ +More information: + +* https://en.wikipedia.org/wiki/Turkish_Identification_Number +* https://tckimlik.nvi.gov.tr/ >>> validate('17291716060') '17291716060' diff --git a/stdnum/us/ssn.py b/stdnum/us/ssn.py index d4058bf6..d08bd9af 100644 --- a/stdnum/us/ssn.py +++ b/stdnum/us/ssn.py @@ -35,9 +35,10 @@ Death Master File which can be ordered on DVD. More information: - https://en.wikipedia.org/wiki/Social_Security_number - https://www.ssa.gov/employer/verifySSN.htm - https://en.wikipedia.org/wiki/Death_Master_File + +* https://en.wikipedia.org/wiki/Social_Security_number +* https://www.ssa.gov/employer/verifySSN.htm +* https://en.wikipedia.org/wiki/Death_Master_File >>> validate('536-90-4399') '536904399' diff --git a/stdnum/verhoeff.py b/stdnum/verhoeff.py index 5d6fb150..02559d3f 100644 --- a/stdnum/verhoeff.py +++ b/stdnum/verhoeff.py @@ -24,8 +24,9 @@ and multiplications and as a result is more complex than the Luhn algorithm. More information: - https://en.wikipedia.org/wiki/Verhoeff_algorithm - https://en.wikibooks.org/wiki/Algorithm_Implementation/Checksums/Verhoeff_Algorithm + +* https://en.wikipedia.org/wiki/Verhoeff_algorithm +* https://en.wikibooks.org/wiki/Algorithm_Implementation/Checksums/Verhoeff_Algorithm The module provides the checksum() function to calculate the Verhoeff checksum a calc_check_digit() function to generate a check digit that can be From 21269472475774e94faf6dea72cc3fcc700d69b8 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 9 May 2016 19:39:18 +0200 Subject: [PATCH 092/654] Read numdb files in context manager This ensures that the file is explicitly closed in the function to avoid "unclosed file" warnings. See: https://github.com/arthurdejong/python-stdnum/issues/33 --- stdnum/numdb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdnum/numdb.py b/stdnum/numdb.py index 0a2e1550..c8cbc3c3 100644 --- a/stdnum/numdb.py +++ b/stdnum/numdb.py @@ -199,6 +199,6 @@ def get(name): if name not in _open_databases: import codecs reader = codecs.getreader('utf-8') - db = read(reader(resource_stream(__name__, name + '.dat'))) - _open_databases[name] = db + with reader(resource_stream(__name__, name + '.dat')) as fp: + _open_databases[name] = db = read(fp) return _open_databases[name] From 0a2f39e34e0ea19efc61ce5eb54e5c46012d858d Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 9 May 2016 19:52:43 +0200 Subject: [PATCH 093/654] Add United Kingdom NHS number Add module for United Kingdom National Health Service patient identifier. --- stdnum/gb/nhs.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 stdnum/gb/nhs.py diff --git a/stdnum/gb/nhs.py b/stdnum/gb/nhs.py new file mode 100644 index 00000000..3773afcb --- /dev/null +++ b/stdnum/gb/nhs.py @@ -0,0 +1,85 @@ +# nhs.py - functions for handling United Kingdom NHS numbers +# +# Copyright (C) 2012-2015 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""NHS (United Kingdom National Health Service patient identifier). + +The NHS number is used by the NHS (National Health Service) and its partners +to uniquely identify patients. The number is used in England, Wales and the +Isle of Man. The number is assigned at birth and consists of 10 digits where +the final digit is a check digit. + +More information: + +* https://en.wikipedia.org/wiki/NHS_number +* http://www.nhs.uk/NHSEngland/thenhs/records/nhs-number/ +* http://systems.hscic.gov.uk/nhsnumber +* http://www.datadictionary.nhs.uk/data_dictionary/attributes/n/nhs/nhs_number_de.asp + +>>> validate('943-476-5870') +'9434765870' +>>> validate('9434765871') # invalid check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('9434765870') +'943 476 5870' +""" + +from stdnum.util import clean +from stdnum.exceptions import * + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip() + + +def checksum(number): + """Calculate the checksum. The checksum is only used for the 9 digits + of the number and the result can either be 0 or 42.""" + return sum(i * int(n) for i, n in enumerate(reversed(number), 1)) % 11 + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 10: + raise InvalidLength() + if checksum(number) != 0: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number, separator=' '): + """Reformat the passed number to the standard format.""" + number = compact(number) + return separator.join((number[0:3], number[3:6], number[6:])) From a1afa76b39de86d76be947be07b846d44ea59ce9 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos Date: Sun, 22 May 2016 19:39:18 +0200 Subject: [PATCH 094/654] Add French NIR Add module for NIR also known as social security number. --- stdnum/fr/nir.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 stdnum/fr/nir.py diff --git a/stdnum/fr/nir.py b/stdnum/fr/nir.py new file mode 100644 index 00000000..bd9ce802 --- /dev/null +++ b/stdnum/fr/nir.py @@ -0,0 +1,80 @@ +# nir.py - functions for handling French NIR numbers +# +# Copyright (C) 2016 Dimitri Papadopoulos +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""NIR (French personal identification number). + +The NIR (Numero d'Inscription au Repertoire national d'identification +des personnes physiques) is a 15 digit number used to identify persons +in France. All persons born in France are registered in the Repertoire +national d'identification des personnes physiques (RNIPP) and assigned +a NIR which consists of 15 digits where the two final digits are check +digits. The NIR is used by French social security and is popularly known +as the "social security number". + +More information: + +* http://www.insee.fr/en/methodes/default.asp?page=definitions/nir.htm + +>>> validate('2 95 10 99 126 111 93') +'295109912611193' +>>> validate('295109912611199') # invalid check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('295109912611193') +'2 95 10 99 126 111 93' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' .').strip() + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 15: + raise InvalidLength() + if (97 - (int(number[:13]) % 97)) != int(number[13:]): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length + and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number, separator=' '): + """Reformat the passed number to the standard format.""" + number = compact(number) + return separator.join((number[:1], number[1:3], number[3:5], number[5:7], + number[7:10], number[10:13], number[13:])) From d85b27f9b03b0ccb25e6e40b6c4179a2ab51ba75 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 28 May 2016 11:29:34 +0200 Subject: [PATCH 095/654] Fix get_module_description() This fixes the initial implementation in 3f6d52a. --- stdnum/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/util.py b/stdnum/util.py index 266b2927..21307baf 100644 --- a/stdnum/util.py +++ b/stdnum/util.py @@ -162,7 +162,7 @@ def get_module_description(module): """Return a description of the number.""" doc = pydoc.splitdoc(pydoc.getdoc(module))[1] # remove the doctests - return _strip_doctest_re.sub('', doc[1]).strip(), + return _strip_doctest_re.sub('', doc).strip() def get_module_list(): From b5397ed3ed77bc8a75f65197309a928158fab138 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 28 May 2016 11:47:57 +0200 Subject: [PATCH 096/654] Small improvements to tests This includes a formatting fix and removes an unused variable from a test. --- tests/test_robustness.doctest | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test_robustness.doctest b/tests/test_robustness.doctest index b38ff973..8e2c4be2 100644 --- a/tests/test_robustness.doctest +++ b/tests/test_robustness.doctest @@ -1,6 +1,6 @@ test_robustness.doctest - test is_valid() functions to not break -Copyright (C) 2011, 2012 Arthur de Jong +Copyright (C) 2011-2016 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -22,12 +22,11 @@ This file contains some tests for modules in the stdnum package to check whether all provided is_valid() functions can handle clearly invalid junk. ->>> testvalues = ( None, '*&^%$', '', 0, False, object(), 'Q', 'QQ', '3') +>>> testvalues = (None, '*&^%$', '', 0, False, object(), 'Q', 'QQ', '3') >>> from stdnum.util import get_number_modules Go over each module and try every value. ->>> badmodules = [] >>> for mod in get_number_modules(): ... results = [ x for x in testvalues if mod.is_valid(x) != False ] ... if results: From f3c2491c45c39e2052be3e7ee769248f40aacb58 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 28 May 2016 13:17:52 +0200 Subject: [PATCH 097/654] Fix bug in Irish VAT number validation The last digits of the number that should be letters were not tested to be letters which could result in ValueError being raised for certain validations. This also clarifies the documentation and adds a convert() function to convert numbers from the old format (where the second character would be a letter or symbol) to the new format (7 digits followed by 1 or 2 letters). --- stdnum/ie/vat.py | 35 ++++++++++++++++++++-------- tests/test_ie_vat.doctest | 48 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 tests/test_ie_vat.doctest diff --git a/stdnum/ie/vat.py b/stdnum/ie/vat.py index c3740e7f..215480a3 100644 --- a/stdnum/ie/vat.py +++ b/stdnum/ie/vat.py @@ -1,6 +1,6 @@ # vat.py - functions for handling Irish VAT numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -17,10 +17,11 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA -"""VAT (Irish VAT number). +"""VAT (Irish tax reference number). -The Irish VAT number consists of 8 digits. The last digit is a check -letter, the second digit may be a number, a letter, "+" or "*". +The Irish VAT number consists of 8 or 9 digits. The number is either 7 digits +and 1 letter (optionally followed by a W for married women), 7 digits and 2 +letters, or 6 digits and 2 letters or symbols (in second and last position). >>> validate('IE 6433435F') # pre-2013 format '6433435F' @@ -36,6 +37,8 @@ Traceback (most recent call last): ... InvalidFormat: ... +>>> convert('1F23456T') +'0234561T' """ from stdnum.exceptions import * @@ -51,14 +54,16 @@ def compact(number): return number +_alphabet = 'WABCDEFGHIJKLMNOPQRSTUV' + + def calc_check_digit(number): """Calculate the check digit. The number passed should not have the check digit included.""" - alphabet = 'WABCDEFGHIJKLMNOPQRSTUV' number = compact(number).zfill(7) - return alphabet[( + return _alphabet[( sum((8 - i) * int(n) for i, n in enumerate(number[:7])) + - 9 * alphabet.index(number[7:])) % 23] + 9 * _alphabet.index(number[7:])) % 23] def validate(number): @@ -67,14 +72,16 @@ def validate(number): number = compact(number) if not number[:1].isdigit() or not number[2:7].isdigit(): raise InvalidFormat() + if not all(x in _alphabet for x in number[7:]): + raise InvalidFormat() if len(number) not in (8, 9): raise InvalidLength() if number[:7].isdigit(): - # new system + # new system (7 digits followed by 1 or 2 letters) if number[7] != calc_check_digit(number[:7] + number[8:]): raise InvalidChecksum() elif number[1] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ+*': - # old system + # old system (second character is a letter or symbol) if number[7] != calc_check_digit(number[2:7] + number[0]): raise InvalidChecksum() else: @@ -89,3 +96,13 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def convert(number): + """Convert an "old" style 8-digit VAT number where the second character + is a letter to the new 8-digit format where only the last digit is a + character.""" + number = compact(number) + if len(number) == 8 and not number[1].isdigit(): + number = '0' + number[2:7] + number[0] + number[7:] + return number diff --git a/tests/test_ie_vat.doctest b/tests/test_ie_vat.doctest new file mode 100644 index 00000000..cbdf9589 --- /dev/null +++ b/tests/test_ie_vat.doctest @@ -0,0 +1,48 @@ +test_ie_vat.doctest - more detailed doctests for stdnum.ie.vat module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ie.vat module. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.ie import vat + + +Extra tests for length checking and corner cases: + +>>> vat.validate('111222333') # check digits should be letters +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> vat.validate('1234567ABC') # too long +Traceback (most recent call last): + ... +InvalidLength: ... + + +The convert() function should leave invalid or already converted values +alone. + +>>> vat.convert('IE8D79739I') +'0797398I' +>>> vat.convert('IE 632 3420 C') +'6323420C' +>>> vat.convert('123') +'123' From 9b74840002acc370d4de405a73dd35fc9df62187 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 28 May 2016 17:48:09 +0200 Subject: [PATCH 098/654] Fix bug in Swiss SSN validation The validation was delegated to the EAN module but the number is supposed to be an EAN-13 only and and EAN-8 was also accepted. This also reformats the docstring. --- stdnum/ch/ssn.py | 20 +++++++++++--------- tests/test_ch_ssn.doctest | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 tests/test_ch_ssn.doctest diff --git a/stdnum/ch/ssn.py b/stdnum/ch/ssn.py index 548ffa1a..78d72a22 100644 --- a/stdnum/ch/ssn.py +++ b/stdnum/ch/ssn.py @@ -1,6 +1,7 @@ # vat.py - functions for handling Swiss social security numbers # # Copyright (C) 2014 Denis Krienbuehl +# Copyright (C) 2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,12 +20,10 @@ """Swiss social security number ("Sozialversicherungsnummer"). -Also known as "Neue AHV Nummer". +Also known as "Neue AHV Nummer". The Swiss Sozialversicherungsnummer is used +to identify individuals for taxation and pension purposes. -The Swiss Sozialversicherungsnummer is used to identify indivduals for taxation -and pension purposes. - -The number is validated using EAN-13, though dashes are substitued for dots. +The number is validated using EAN-13, though dashes are substituted for dots. >>> compact('756.9217.0769.85') '7569217076985' @@ -40,8 +39,8 @@ InvalidChecksum: ... """ -from stdnum.exceptions import ValidationError from stdnum import ean +from stdnum.exceptions import * from stdnum.util import clean @@ -58,9 +57,12 @@ def format(number): def validate(number): - """Checks to see if the number provided is a valid - Swiss Sozialversicherungsnummer.""" - return ean.validate(compact(number)) + """Checks to see if the number provided is a valid Swiss + Sozialversicherungsnummer.""" + number = compact(number) + if len(number) != 13: + raise InvalidLength() + return ean.validate(number) def is_valid(number): diff --git a/tests/test_ch_ssn.doctest b/tests/test_ch_ssn.doctest new file mode 100644 index 00000000..2a496ca7 --- /dev/null +++ b/tests/test_ch_ssn.doctest @@ -0,0 +1,33 @@ +test_ch_ssn.doctest - more detailed doctests for stdnum.ch.ssn module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ch.ssn module. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.ch import ssn + + +Extra tests for length checking and corner cases: + +>>> ssn.validate('54165168') # valid EAN-8 but incorrect length +Traceback (most recent call last): + ... +InvalidLength: ... From 4a57d84935d45c78bcd407c2cca558bb74df5a54 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 29 May 2016 12:06:32 +0200 Subject: [PATCH 099/654] Fix formatting of bulleted list --- stdnum/us/tin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/stdnum/us/tin.py b/stdnum/us/tin.py index bdac205f..b2696b10 100644 --- a/stdnum/us/tin.py +++ b/stdnum/us/tin.py @@ -21,6 +21,7 @@ The Taxpayer Identification Number is used used for tax purposes in the United States. A TIN may be: + * a Social Security Number (SSN) * an Individual Taxpayer Identification Number (ITIN) * an Employer Identification Number (EIN) From dc708f044a78297f0a283c389930b5d8b3a378a9 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 29 May 2016 13:07:57 +0200 Subject: [PATCH 100/654] Add more ISIL tests This moves a few of the tests from the module to a dedicated test file and adds tests for a number of ISIL numbers found online. --- stdnum/isil.py | 6 - tests/test_isil.doctest | 404 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 404 insertions(+), 6 deletions(-) create mode 100644 tests/test_isil.doctest diff --git a/stdnum/isil.py b/stdnum/isil.py index 30dea53d..ec1afd6e 100644 --- a/stdnum/isil.py +++ b/stdnum/isil.py @@ -51,14 +51,8 @@ Traceback (most recent call last): ... InvalidComponent: ... ->>> validate('WW-RM026712423345334534512334534545') # too long -Traceback (most recent call last): - ... -InvalidLength: ... >>> format('it-RM0267') 'IT-RM0267' ->>> format('zz-RM0267') # unknown agencies are left alone -'zz-RM0267' """ from stdnum.exceptions import * diff --git a/tests/test_isil.doctest b/tests/test_isil.doctest new file mode 100644 index 00000000..1668563b --- /dev/null +++ b/tests/test_isil.doctest @@ -0,0 +1,404 @@ +test_isil.doctest - more detailed doctests for the stdnum.isil module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.isil module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum import isil +>>> from stdnum.exceptions import * + + +The number should start with a valid country code or prefix: + +>>> isil.validate('ZZ-1234') +Traceback (most recent call last): + ... +InvalidComponent: ... + + +The number should not be too long: + +>>> isil.validate('WW-RM026712423345334534512334534545') +Traceback (most recent call last): + ... +InvalidLength: ... + + +A number with an unknown agency should not be upper-cased: + +>>> isil.format('zz-RM0267') +'zz-RM0267' + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... AT-FHJ-BG +... AT-FHK +... AT-FHK-FE +... AT-FHS-K +... AT-GEOL +... AT-HGMW +... AT-KWPU +... AT-LAST +... AT-LBB +... AT-NMW-Z +... AT-NOeLB +... AT-OBV +... AT-OeAW-BA +... AT-PHK +... AT-PHS +... AT-PHST +... AT-PHT +... AT-PHV +... AT-STICHWORT +... AT-UBG-SH +... AT-UBGL +... AT-UBI-HB +... AT-UBL +... AT-UBMG-HB +... AT-UBMS +... AT-UBMS-MUS +... AT-UBMUL-FBG +... AT-UBMUL-HB +... AT-UBMUW-360 +... AT-UBMUW-400 +... AT-UBMW +... AT-UBTUG-HB +... AT-UBVUW-UB +... AT-UBW +... AT-UBWW +... AT-UBWW-874 +... AT-VMW +... AT-WBR +... AT-WHK +... AT-WSTLA-B +... +... AU-ABC:ARC +... AU-ABC:PL +... AU-ABC:RN +... AU-ANL:AJA +... AU-ANU:ADBO +... AU-ANU:IR +... AU-ANU:ON +... AU-NABC +... AU-NABM +... AU-NACON +... AU-NACU:AA +... AU-NAIM +... AU-NEF +... AU-NJHS +... AU-NNCU:A +... AU-NRNA +... AU-NU +... AU-NU:DF +... AU-NUWS +... AU-QMINT +... AU-QU +... AU-SMUA +... AU-SUSA +... AU-TS:RL +... AU-TU +... AU-VAAPM +... AU-VACMU +... AU-VAGH +... AU-VAHRI +... AU-VAMD +... AU-VANDS +... AU-VDU +... AU-VEMU +... AU-VLGA +... AU-VPM +... AU-VS:NAH +... AU-VSWT +... AU-VU +... AU-WAHB +... AU-XACA +... +... BE-A0510 +... BE-A3004 +... BE-A5000 +... BE-A5001 +... BE-A5002 +... BE-AAR00 +... BE-ALN00 +... BE-ANN03 +... BE-ANT01 +... BE-BDE00 +... BE-BEE00 +... BE-BRL06 +... BE-BRL07 +... BE-BRL10 +... BE-BUE01 +... BE-DIT00 +... BE-DNE00 +... BE-DPE00 +... BE-EKN00 +... BE-GAN00 +... BE-GET02 +... BE-HCT00 +... BE-HED00 +... BE-HEN00 +... BE-HES01 +... BE-JEE00 +... BE-KLT00 +... BE-KNE00 +... BE-KRG00 +... BE-LLE00 +... BE-LNL00 +... BE-LUK01 +... BE-LUN00 +... BE-MSE00 +... BE-NET00 +... BE-OSE00 +... BE-RIT00 +... BE-SJS01 +... BE-ZEE00 +... BE-ZUE00 +... +... CA-QMCB +... +... CH-000050-X +... CH-000051-7 +... CH-000084-8 +... CH-000190-0 +... CH-000244-3 +... CH-000422-7 +... CH-000423-4 +... CH-000425-9 +... CH-000560-3 +... CH-000886-6 +... CH-001008-0 +... CH-001010-9 +... CH-001057-5 +... CH-001059-X +... CH-001113-6 +... CH-001243-0 +... CH-001283-6 +... CH-001350-0 +... CH-001539-4 +... CH-001631-1 +... CH-001644-X +... CH-001645-7 +... CH-001646-4 +... CH-001648-9 +... CH-001649-6 +... CH-001654-6 +... CH-001666-7 +... CH-001669-9 +... CH-001760-9 +... CH-001800-6 +... CH-001815-9 +... CH-001821-6 +... CH-001824-8 +... CH-001825-5 +... CH-001832-X +... CH-001839-0 +... CH-001844-0 +... CH-001845-8 +... CH-001846-5 +... CH-001851-5 +... +... CY-02-CUT +... +... DE-101c +... DE-16-18 +... DE-1769 +... DE-1786 +... DE-180-1-2 +... DE-1834h +... DE-1834k +... DE-1869 +... DE-188-878 +... DE-188-e +... DE-1886 +... DE-1935 +... DE-1939 +... DE-1988 +... DE-1996 +... DE-2300 +... DE-2343 +... DE-360 +... DE-379 +... DE-38-230 +... DE-412 +... DE-416 +... DE-450 +... DE-465M-15 +... DE-469 +... DE-46a +... DE-570 +... DE-6-235 +... DE-6-271 +... DE-6-321 +... DE-7-040 +... DE-7-061 +... DE-718 +... DE-758 +... DE-781 +... DE-82-204 +... DE-82-219 +... DE-Bor4 +... DE-Kn184 +... DE-Tue120 +... +... GB-NiBfQU +... GB-StAlCLS +... GB-StDnUAD +... GB-StGlU +... GB-StPaUWSP +... GB-UK-AbCCL +... GB-UK-DhCL +... GB-UK-LoRCN +... GB-UK-WiU +... GB-UkBrCC +... GB-UkBsBC +... GB-UkCU-TRH +... GB-UkCmUG +... GB-UkCoI +... GB-UkCvUL +... GB-UkCyUK +... GB-UkElC +... GB-UkExU +... GB-UkFlBUFL +... GB-UkHsBUUC +... GB-UkIfBRL +... GB-UkLRCM +... GB-UkLUC +... GB-UkLoBS +... GB-UkLoMdU +... GB-UkLoSTAC +... GB-UkLuBC +... GB-UkMaUHSM +... GB-UkNrSTB +... GB-UkOlOLS +... GB-UkRlWC +... GB-UkSbWC-T +... GB-UkScaSH +... GB-UkSfCL +... GB-UkSfSSSH +... GB-UkSofDA +... GB-UkTeS +... GB-UkWbSWB +... GB-UkWfC +... GB-WlCaUW +... +... IT-RM0267 +... +... NL-04-0041-000 +... NL-AlSARM +... NL-AsdUvA +... NL-AsnDA +... NL-CoGC +... NL-DdvHVA +... NL-DtAD +... NL-DtHHD +... NL-EhvRHCE +... NL-EmnGE +... NL-FwGF +... NL-GnADNG +... NL-GnGRA +... NL-GnPG +... NL-GnUMG +... NL-HAMuscom +... NL-HaKV +... NL-HaNIMH +... NL-HaNRK +... NL-HlGH +... NL-HnWFA +... NL-HvsSAGV +... NL-KrdGA +... NL-LdnRMV +... NL-LnsGDM +... NL-LwPF +... NL-MpGM +... NL-MssHVM +... NL-MtmGM +... NL-NmRAN +... NL-OmnHKO +... NL-OmnOO +... NL-OmsVHO +... NL-RtEUR +... NL-RtSA +... NL-SelGV +... NL-SloGS +... NL-VbGALV +... NL-WtGAW +... NL-WtslGT +... NL-ZhGZ +... Nl-GdSAMH +... +... OCLC-ABI +... OCLC-ATNHK +... OCLC-ATQCO +... OCLC-ATVMV +... OCLC-BEMCH +... OCLC-BRI +... OCLC-CKI +... OCLC-CSF +... OCLC-DEKNV +... OCLC-EMSBC +... OCLC-ENC +... OCLC-EZU +... OCLC-FLNSW +... OCLC-FNL +... OCLC-GYR +... OCLC-I8S +... OCLC-IDT +... OCLC-ILW +... OCLC-JAKUC +... OCLC-JXE +... OCLC-JYY +... OCLC-KW5 +... OCLC-LABMH +... OCLC-MLBVL +... OCLC-MSL +... OCLC-NEZH8 +... OCLC-OME +... OCLC-QBA +... OCLC-QP7 +... OCLC-SMP +... OCLC-SVZ +... OCLC-TXCLY +... OCLC-TY7 +... OCLC-U9V +... OCLC-UDU +... OCLC-WK6 +... OCLC-WYEMB +... OCLC-XOH +... OCLC-YA6 +... OCLC-YEJ +... +... US-DLC +... US-InU-Mu +... US-MdBJ-W +... +... ''' +>>> [x for x in numbers.splitlines() if x and not isil.is_valid(x)] +[] + + +These have been found online but seem invalid: + +... OCLC-B#P +... OCLC-LT$ +... OCLC-RE# +... OCLC-RG$ From 5ba3a8796fccc44136d325f466ee99f6e1dfd96d Mon Sep 17 00:00:00 2001 From: Yoann Aubineau Date: Fri, 27 May 2016 16:43:53 +0200 Subject: [PATCH 101/654] Add French SIRET number MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a SIRET (Système d'Identification du Répertoire des ETablissements, a French company etablishment identification number) module. --- stdnum/fr/siret.py | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 stdnum/fr/siret.py diff --git a/stdnum/fr/siret.py b/stdnum/fr/siret.py new file mode 100644 index 00000000..ab7d59fd --- /dev/null +++ b/stdnum/fr/siret.py @@ -0,0 +1,97 @@ +# siret.py - functions for handling French SIRET numbers +# coding: utf-8 +# +# Copyright (C) 2016 Yoann Aubineau +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""SIRET (a French company establishment identification number). + +The SIRET (Système d'Identification du Répertoire des ETablissements) +is a 14 digit number used to identify French companies' establishments +and facilities. The Luhn checksum is used to validate the numbers. + +>>> validate('73282932000074') +'73282932000074' +>>> validate('73282932000079') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> to_siren('732 829 320 00074') +'732 829 320' +>>> to_siren('73282932000074') +'732829320' +>>> to_tva('732 829 320 00074') +'44 732 829 320' +>>> to_tva('73282932000074') +'44732829320' +""" + +from stdnum import luhn +from stdnum.exceptions import * +from stdnum.fr import siren +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def validate(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 14: + raise InvalidLength() + luhn.validate(number) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid number. This checks + the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def to_siren(number): + """Return SIREN number from the given SIRET number. + + The SIREN number is the 9 first digits of the SIRET number. + """ + _siren = [] + digit_count = 0 + for char in number: + if digit_count < 9: + _siren.append(char) + if char.isdigit(): + digit_count += 1 + return ''.join(_siren) + + +def to_tva(number): + """Return TVA number from the given SIRET number. + + The TVA number is built from the SIREN number, prepended by two extra + error checking digits. + """ + return siren.to_tva(to_siren(number)) From fd9f9538c362aacf50e4ae32ae51b15ecaf79184 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 25 Jul 2016 16:23:54 +0200 Subject: [PATCH 102/654] Add extra tests for SIREN and SIRET This adds tests for a few numbers that have been found online and allows the dot as a seprator because those numbers were found. It also ensures that the SIREN validation is also called for SIRET and adds a SIRET formatting function. --- stdnum/fr/siren.py | 2 +- stdnum/fr/siret.py | 11 ++++- tests/test_fr_siren.doctest | 47 ++++++++++++++++++++ tests/test_fr_siret.doctest | 85 +++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 tests/test_fr_siren.doctest create mode 100644 tests/test_fr_siret.doctest diff --git a/stdnum/fr/siren.py b/stdnum/fr/siren.py index f57b0fa1..543f4285 100644 --- a/stdnum/fr/siren.py +++ b/stdnum/fr/siren.py @@ -50,7 +50,7 @@ def compact(number): """Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.""" - return clean(number, ' ').strip() + return clean(number, ' .').strip() def validate(number): diff --git a/stdnum/fr/siret.py b/stdnum/fr/siret.py index ab7d59fd..22efe208 100644 --- a/stdnum/fr/siret.py +++ b/stdnum/fr/siret.py @@ -38,6 +38,8 @@ '44 732 829 320' >>> to_tva('73282932000074') '44732829320' +>>> format('73282932000074') +'732 829 320 00074' """ from stdnum import luhn @@ -49,7 +51,7 @@ def compact(number): """Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.""" - return clean(number, ' ').strip() + return clean(number, ' .').strip() def validate(number): @@ -61,6 +63,7 @@ def validate(number): if len(number) != 14: raise InvalidLength() luhn.validate(number) + siren.validate(number[:9]) return number @@ -95,3 +98,9 @@ def to_tva(number): error checking digits. """ return siren.to_tva(to_siren(number)) + + +def format(number, separator=' '): + """Reformat the passed number to the standard format.""" + number = compact(number) + return separator.join((number[0:3], number[3:6], number[6:9], number[9:])) diff --git a/tests/test_fr_siren.doctest b/tests/test_fr_siren.doctest new file mode 100644 index 00000000..2169ec99 --- /dev/null +++ b/tests/test_fr_siren.doctest @@ -0,0 +1,47 @@ +test_fr_siren.doctest - more detailed doctests for the stdnum.fr.siren module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.fr.siren module. + +>>> from stdnum.fr import siren +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 217601 145 +... 3 1 0 1 8 8 4 2 0 +... 350792008 +... 480318245 +... 500 674 056 +... 529290488 +... 738 205 269 +... 752136200 +... 752490334 +... 775 699 309 +... 775672272 +... 776 944 944 +... 820043784 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not siren.is_valid(x)] +[] diff --git a/tests/test_fr_siret.doctest b/tests/test_fr_siret.doctest new file mode 100644 index 00000000..699ac33b --- /dev/null +++ b/tests/test_fr_siret.doctest @@ -0,0 +1,85 @@ +test_fr_siret.doctest - more detailed doctests for the stdnum.fr.siret module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.fr.siret module. + +>>> from stdnum.fr import siret +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 0 5 7 8 1 3 1 3 1 0 0 0 2 6 +... 1 800 700 39 00 110 +... 2 00 03 00 13 000 11 +... 2 101 005 33 000 12 +... 2 777 000 43 000 15 +... 3 1 0 1 8 8 4 2 0 00 0 8 0 +... 3 12 494 529 000 34 +... 3 24 34 54 20 000 40 +... 30206838200050 +... 314 901 323 00043 +... 31719324100013 +... 32228438100017 +... 32650798500058 +... 32738082000032 +... 329.338.88300153 +... 32929695800039 +... 33770320100034 +... 34530016400018 +... 380 321 430 00023 +... 38446899700034 +... 38536958200023 +... 389 011 529 00036 +... 38981890700203 +... 39039475700020 +... 39102766100050 +... 4 0 0 9 0 8 5 0 5 0 0 0 11 +... 4 0 3 3 1 4 6 6 9 0 0 0 4 1 +... 4 0 9 0 8 5 2 1 4 0 0 0 2 4 +... 4 2 0 3 0 9 6 2 7 0 0 0 3 2 +... 4 4 3 4 8 9 2 7 3 0 0 0 1 3 +... 4 4 3 5 4 9 8 7 8 0 0 0 4 1 +... 4 8 2 7 8 1 9 11 0 0 0 11 +... 40300300700032 +... 44126652500019 +... 44142526100019 +... 44796433900017 +... 479 461 675 00049 +... 5 12 326 653 000 15 +... 5 17 758 173 000 10 +... 50397442000021 +... 513 133 637 000 35 +... 52524288900042 +... 542 097 324 0006 6 +... 652 059 213 00023 +... 7 7821 0526 00019 +... 775.563.232.00104 +... 778 239 798 000 11 +... 79068156300017 +... 8 1 0 2 4 7 3 8 7 0 0 0 1 4 +... 8 1002665800015 +... 8 21 114 55000014 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not siret.is_valid(x)] +[] From 879f2d3c8a777b4ae8a1b97fdd0629e90d7bc871 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos Date: Sun, 29 May 2016 17:57:05 +0200 Subject: [PATCH 103/654] Improve French NIR validation Please note that the 7th character of the NIR might be 'A' or 'B'. Other than that the NIR contains digits only. --- stdnum/fr/nir.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/stdnum/fr/nir.py b/stdnum/fr/nir.py index bd9ce802..d8c26ee9 100644 --- a/stdnum/fr/nir.py +++ b/stdnum/fr/nir.py @@ -48,25 +48,34 @@ def compact(number): """Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.""" - return clean(number, ' .').strip() + return clean(number, ' .').strip().upper() def validate(number): """Checks to see if the number provided is valid. This checks the length - and check digit.""" + and check digits.""" number = compact(number) - if not number.isdigit(): + if not (number.isdigit() or ( + number[:5].isdigit() and number[7:].isdigit() and + number[5:7] in ('2A', '2B'))): raise InvalidFormat() if len(number) != 15: raise InvalidLength() - if (97 - (int(number[:13]) % 97)) != int(number[13:]): + department = number[5:7] + if department == '2A': + s = number[:5] + '19' + number[7:13] + elif department == '2B': + s = number[:5] + '18' + number[7:13] + else: + s = number[:13] + if (97 - (int(s) % 97)) != int(number[13:]): raise InvalidChecksum() return number def is_valid(number): """Checks to see if the number provided is valid. This checks the length - and check digit.""" + and check digits.""" try: return bool(validate(number)) except ValidationError: From 43b58d331a8e61694a5a9b77fa0968fa326f52cc Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 02:33:16 +0200 Subject: [PATCH 104/654] Move NIR check digit calculation to function This also fixes a number of formatting issues, improves the module description and adds tests for the 2A and 2B departments. --- stdnum/fr/nir.py | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/stdnum/fr/nir.py b/stdnum/fr/nir.py index d8c26ee9..bf1206a7 100644 --- a/stdnum/fr/nir.py +++ b/stdnum/fr/nir.py @@ -1,6 +1,8 @@ # nir.py - functions for handling French NIR numbers +# coding: utf-8 # # Copyright (C) 2016 Dimitri Papadopoulos +# Copyright (C) 2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,17 +21,23 @@ """NIR (French personal identification number). -The NIR (Numero d'Inscription au Repertoire national d'identification -des personnes physiques) is a 15 digit number used to identify persons -in France. All persons born in France are registered in the Repertoire -national d'identification des personnes physiques (RNIPP) and assigned -a NIR which consists of 15 digits where the two final digits are check -digits. The NIR is used by French social security and is popularly known -as the "social security number". +The NIR (Numero d'Inscription au Repertoire national d'identification des +personnes physiques) is used to identify persons in France. It is popularly +known as the "social security number" and sometimes referred to as an INSEE +number. All persons born in France are registered in the Repertoire national +d'identification des personnes physiques (RNIPP) and assigned a NIR. + +The number consists of 15 digits: the first digit indicates the gender, +followed by 2 digits for the year or birth, 2 for the month of birth, 5 for +the location of birth (COG), 3 for a serial and 2 check digits. More information: * http://www.insee.fr/en/methodes/default.asp?page=definitions/nir.htm +* https://en.wikipedia.org/wiki/INSEE_code +* http://resoo.org/docs/_docs/regles-numero-insee.pdf +* https://fr.wikipedia.org/wiki/Numéro_de_sécurité_sociale_en_France +* http://xml.insee.fr/schema/nir.html >>> validate('2 95 10 99 126 111 93') '295109912611193' @@ -37,6 +45,10 @@ Traceback (most recent call last): ... InvalidChecksum: ... +>>> validate('253072B07300470') +'253072B07300470' +>>> validate('253072A07300443') +'253072A07300443' >>> format('295109912611193') '2 95 10 99 126 111 93' """ @@ -51,6 +63,16 @@ def compact(number): return clean(number, ' .').strip().upper() +def calc_check_digits(number): + """Calculate the check digits for the number.""" + department = number[5:7] + if department == '2A': + number = number[:5] + '19' + number[7:] + elif department == '2B': + number = number[:5] + '18' + number[7:] + return '%02d' % (97 - (int(number[:13]) % 97)) + + def validate(number): """Checks to see if the number provided is valid. This checks the length and check digits.""" @@ -61,14 +83,7 @@ def validate(number): raise InvalidFormat() if len(number) != 15: raise InvalidLength() - department = number[5:7] - if department == '2A': - s = number[:5] + '19' + number[7:13] - elif department == '2B': - s = number[:5] + '18' + number[7:13] - else: - s = number[:13] - if (97 - (int(s) % 97)) != int(number[13:]): + if calc_check_digits(number) != number[13:]: raise InvalidChecksum() return number From 2409ee943859b11539be67b11da078e15e2bdc0d Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos Date: Sun, 22 May 2016 20:09:21 +0200 Subject: [PATCH 105/654] Add NIF - French tax identification number Add module for NIF also known as SPI number. --- stdnum/fr/nif.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 stdnum/fr/nif.py diff --git a/stdnum/fr/nif.py b/stdnum/fr/nif.py new file mode 100644 index 00000000..7d5a802a --- /dev/null +++ b/stdnum/fr/nif.py @@ -0,0 +1,75 @@ +# nif.py - functions for handling French tax identification numbers +# coding: utf-8 +# +# Copyright (C) 2016 Dimitri Papadopoulos +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""NIF (Numéro d'Immatriculation Fiscale, French tax identification number). + +The NIF (Numéro d'Immatriculation Fiscale, Numéro d'Identité Fiscale or +Numéro d'Identification Fiscale) also known as numéro fiscal de référence or +SPI (Simplification des Procédures d'Identification) is a 13-digit number +issued by the French tax authorities to people for tax reporting purposes. + +More information: + +* https://ec.europa.eu/taxation_customs/tin/tinByCountry.html +* https://fr.wikipedia.org/wiki/Num%C3%A9ro_d%27Immatriculation_Fiscale#France + +>>> validate('0701987765432') +'0701987765432' +>>> validate('070198776543') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> format('295109912611193') +'2 95 10 99 126 111 93' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def validate(number): + """Checks the length to see if the number provided is valid.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 13: + raise InvalidLength() + return number + + +def is_valid(number): + """Checks the length to see if the number provided is valid.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join((number[:2], number[2:4], number[4:7], + number[7:10], number[10:])) From 011c0f0c4b1d2e08f2987de1cc9c2cfb16e39998 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 15:39:22 +0200 Subject: [PATCH 106/654] Fix copyright notice --- stdnum/gb/nhs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/gb/nhs.py b/stdnum/gb/nhs.py index 3773afcb..c1367e3d 100644 --- a/stdnum/gb/nhs.py +++ b/stdnum/gb/nhs.py @@ -1,6 +1,6 @@ # nhs.py - functions for handling United Kingdom NHS numbers # -# Copyright (C) 2012-2015 Arthur de Jong +# Copyright (C) 2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public From cf428ac4c2f7f8d36042860e02e7d5b929b24b8f Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 17:19:58 +0200 Subject: [PATCH 107/654] Add pointer to ISO 6346 information --- stdnum/iso6346.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stdnum/iso6346.py b/stdnum/iso6346.py index 5b936fc4..fd6f1c95 100644 --- a/stdnum/iso6346.py +++ b/stdnum/iso6346.py @@ -28,6 +28,10 @@ as any operational marks. The standard is managed by the International Container Bureau (BIC). +More information: + +* http://en.wikipedia.org/wiki/ISO_6346 + >>> validate('csqu3054383') 'CSQU3054383' >>> validate('CSQU3054384') From 1907c67e756ce5f38422ab75fa1de98fd8368ddc Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 17:33:04 +0200 Subject: [PATCH 108/654] Add documentation to Brazillian CPF --- stdnum/br/cpf.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/stdnum/br/cpf.py b/stdnum/br/cpf.py index 742d4642..b8b4f6ed 100644 --- a/stdnum/br/cpf.py +++ b/stdnum/br/cpf.py @@ -1,7 +1,7 @@ # cpf.py - functions for handling CPF numbers # coding: utf-8 # -# Copyright (C) 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2011-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -20,6 +20,14 @@ """CPF (Cadastro de Pessoas Físicas, Brazillian national identifier). +The Cadastro de Pessoas Físicas is the Brazilian identification number +assigned to individuals for tax purposes. The number consists of 11 digits +and includes two check digits. + +More information: + +* https://en.wikipedia.org/wiki/Cadastro_de_Pessoas_Físicas + >>> validate('390.533.447-05') '39053344705' >>> validate('231.002.999-00') From 06e41651623798b0bffe37b141374e9ef56c8102 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 18:00:26 +0200 Subject: [PATCH 109/654] Improve validation to Swiss SSN number The EAN-13 number should start with 756. --- stdnum/ch/ssn.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/stdnum/ch/ssn.py b/stdnum/ch/ssn.py index 78d72a22..57e88cfd 100644 --- a/stdnum/ch/ssn.py +++ b/stdnum/ch/ssn.py @@ -1,4 +1,4 @@ -# vat.py - functions for handling Swiss social security numbers +# ssn.py - functions for handling Swiss social security numbers # # Copyright (C) 2014 Denis Krienbuehl # Copyright (C) 2016 Arthur de Jong @@ -25,10 +25,11 @@ The number is validated using EAN-13, though dashes are substituted for dots. ->>> compact('756.9217.0769.85') -'7569217076985' ->>> format('7569217076985') -'756.9217.0769.85' +More information: + +* https://en.wikipedia.org/wiki/National_identification_number#Switzerland +* https://de.wikipedia.org/wiki/Sozialversicherungsnummer#Versichertennummer + >>> validate('7569217076985') '7569217076985' >>> validate('756.9217.0769.85') @@ -37,6 +38,12 @@ Traceback (most recent call last): ... InvalidChecksum: ... +>>> validate('123.4567.8910.19') +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> format('7569217076985') +'756.9217.0769.85' """ from stdnum import ean @@ -62,6 +69,8 @@ def validate(number): number = compact(number) if len(number) != 13: raise InvalidLength() + if not number.startswith('756'): + raise InvalidComponent() return ean.validate(number) From 411d0381331334dd6b739f8d0527b56af741a90a Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 18:03:02 +0200 Subject: [PATCH 110/654] Fix French NIF format test Fixes 2409ee9. --- stdnum/fr/nif.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdnum/fr/nif.py b/stdnum/fr/nif.py index 7d5a802a..47715623 100644 --- a/stdnum/fr/nif.py +++ b/stdnum/fr/nif.py @@ -28,7 +28,7 @@ More information: * https://ec.europa.eu/taxation_customs/tin/tinByCountry.html -* https://fr.wikipedia.org/wiki/Num%C3%A9ro_d%27Immatriculation_Fiscale#France +* https://fr.wikipedia.org/wiki/Numéro_d%27Immatriculation_Fiscale#France >>> validate('0701987765432') '0701987765432' @@ -36,8 +36,8 @@ Traceback (most recent call last): ... InvalidLength: ... ->>> format('295109912611193') -'2 95 10 99 126 111 93' +>>> format('0701987765432') +'07 01 987 765 432' """ from stdnum.exceptions import * From aa1c298cf706eda127b07a2c2d6705fff423b569 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 21:38:15 +0200 Subject: [PATCH 111/654] Implement Damm algorithm This is a generic check digit algorithm. --- getnumlist.py | 5 ++- stdnum/damm.py | 93 +++++++++++++++++++++++++++++++++++++++++ tests/test_damm.doctest | 93 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 stdnum/damm.py create mode 100644 tests/test_damm.doctest diff --git a/getnumlist.py b/getnumlist.py index 4c74479d..c8b9b4da 100755 --- a/getnumlist.py +++ b/getnumlist.py @@ -28,7 +28,8 @@ # these are excluded -algortihms = ('stdnum.verhoeff', 'stdnum.luhn', 'stdnum.iso7064') +algortihms = ( + 'stdnum.verhoeff', 'stdnum.luhn', 'stdnum.iso7064', 'stdnum.damm') def get_number_modules(): @@ -36,7 +37,7 @@ def get_number_modules(): for module in util.get_number_modules(): if module.__name__ not in algortihms and \ not module.__name__.startswith('stdnum.iso7064'): - yield module + yield module if __name__ == '__main__': print 'For README:' diff --git a/stdnum/damm.py b/stdnum/damm.py new file mode 100644 index 00000000..dc93151a --- /dev/null +++ b/stdnum/damm.py @@ -0,0 +1,93 @@ +# damm.py - functions for performing the Damm checksum algorithm +# +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""The Damm algorithm. + +The Damm algorithm is a check digit algorithm that should detect all +single-digit errors and all adjacent transposition errors. Based on +anti-symmetric quasigroup of order 10 it uses a substitution table. + +This implementation uses the table from Wikipedia by default but a custom +table can be provided. + +More information: + +* https://en.wikipedia.org/wiki/Damm_algorithm + +>>> validate('572') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> calc_check_digit('572') +'4' +>>> validate('5724') +'5724' +""" + +from stdnum.exceptions import * + + +_operation_table = ( + (0, 3, 1, 7, 5, 9, 8, 6, 4, 2), + (7, 0, 9, 2, 1, 5, 4, 8, 6, 3), + (4, 2, 0, 6, 8, 7, 1, 3, 5, 9), + (1, 7, 5, 0, 9, 8, 3, 4, 2, 6), + (6, 1, 2, 3, 0, 4, 5, 9, 7, 8), + (3, 6, 7, 4, 2, 0, 9, 5, 8, 1), + (5, 8, 6, 9, 7, 2, 0, 1, 3, 4), + (8, 9, 4, 5, 3, 6, 2, 0, 1, 7), + (9, 4, 3, 8, 6, 1, 7, 2, 0, 5), + (2, 5, 8, 1, 4, 3, 6, 7, 9, 0)) + + +def checksum(number, table=None): + """Calculate the Damm checksum over the provided number. The checksum is + returned as an integer value and should be 0 when valid.""" + table = table or _operation_table + i = 0 + for n in str(number): + i = table[i][int(n)] + return i + + +def validate(number, table=None): + """Checks to see if the number provided passes the Damm algorithm.""" + if not bool(number): + raise InvalidFormat() + try: + valid = checksum(number, table=table) == 0 + except Exception: + raise InvalidFormat() + if not valid: + raise InvalidChecksum() + return number + + +def is_valid(number, table=None): + """Checks to see if the number provided passes the Damm algorithm.""" + try: + return bool(validate(number), table=table) + except ValidationError: + return False + + +def calc_check_digit(number, table=None): + """With the provided number, calculate the extra digit that should be + appended to make it pass the Damm check.""" + return str(checksum(number, table=table)) diff --git a/tests/test_damm.doctest b/tests/test_damm.doctest new file mode 100644 index 00000000..13d8c233 --- /dev/null +++ b/tests/test_damm.doctest @@ -0,0 +1,93 @@ +test_damm.doctest - more detailed doctests for stdnum.damm module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.damm module. It +tries to test more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum import damm + + +These are normal variations that should just work. Calculating checksums: + +>>> damm.checksum('572') +4 +>>> damm.checksum('5724') +0 +>>> damm.checksum('43881234567') +9 +>>> damm.checksum('438812345679') +0 + + +The same numbers but now simply ask for validation: + +>>> damm.validate('572') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> damm.validate('5724') +'5724' +>>> damm.validate('43881234567') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> damm.validate('438812345679') +'438812345679' + + +Adding a check digit to the numbers so they are all valid: + +>>> damm.calc_check_digit('572') +'4' +>>> damm.validate('5724') +'5724' +>>> damm.calc_check_digit('5724') +'0' +>>> damm.validate('57240') +'57240' +>>> damm.calc_check_digit('43881234567') +'9' +>>> damm.validate('438812345679') +'438812345679' +>>> damm.calc_check_digit('438812345679') +'0' +>>> damm.validate('4388123456790') +'4388123456790' + + +We can also use a different table if we really need to. This one is from +http://www.md-software.de/math/DAMM_Quasigruppen.txt + +>>> table = ( +... (0, 2, 3, 4, 5, 6, 7, 8, 9, 1), +... (2, 0, 4, 1, 7, 9, 5, 3, 8, 6), +... (3, 7, 0, 5, 2, 8, 1, 6, 4, 9), +... (4, 1, 8, 0, 6, 3, 9, 2, 7, 5), +... (5, 6, 2, 9, 0, 7, 4, 1, 3, 8), +... (6, 9, 7, 3, 1, 0, 8, 5, 2, 4), +... (7, 5, 1, 8, 4, 2, 0, 9, 6, 3), +... (8, 4, 6, 2, 9, 5, 3, 0, 1, 7), +... (9, 8, 5, 7, 3, 1, 6, 4, 0, 2), +... (1, 3, 9, 6, 8, 4, 2, 7, 5, 0)) +>>> damm.checksum('816', table=table) +9 +>>> damm.checksum('8169', table=table) +0 From 3e344d1e51b7abd8a68d3688973e7d0215ba55b5 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 21:56:08 +0200 Subject: [PATCH 112/654] Add formatting of ISO 6346 container codes --- stdnum/iso6346.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/stdnum/iso6346.py b/stdnum/iso6346.py index fd6f1c95..1956dfce 100644 --- a/stdnum/iso6346.py +++ b/stdnum/iso6346.py @@ -38,6 +38,8 @@ Traceback (most recent call last): ... InvalidChecksum: ... +>>> format('tasu117 000 0') +'TASU 117000 0' """ import re @@ -53,7 +55,7 @@ def compact(number): """Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.""" - return clean(number).strip().upper() + return clean(number, ' ').strip().upper() def calc_check_digit(number): @@ -85,3 +87,9 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join((number[:4], number[4:-1], number[-1:])) From 3e4e9e2c7682efb46d5bc25b7e640ab1cfd5f17e Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 23:08:54 +0200 Subject: [PATCH 113/654] Update database files This also updates the getmybp script to support the new layout. --- getmybp.py | 4 +- stdnum/cn/loc.dat | 2 +- stdnum/iban.dat | 2 +- stdnum/imsi.dat | 587 +++++++++++++++++++++++++--------------------- stdnum/isbn.dat | 16 +- stdnum/isil.dat | 5 +- 6 files changed, 330 insertions(+), 286 deletions(-) diff --git a/getmybp.py b/getmybp.py index 53da0157..f9dfa9cb 100755 --- a/getmybp.py +++ b/getmybp.py @@ -2,7 +2,7 @@ # getmybp.py - script to donwnload data from Malaysian government site # -# Copyright (C) 2013 Arthur de Jong +# Copyright (C) 2013-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -43,7 +43,7 @@ def parse(f): """Parse the specified file.""" soup = BeautifulSoup.BeautifulSoup(f, convertEntities='html') # find all table rows - for tr in soup.find('div', id='inner-main').findAll('tr'): + for tr in soup.find('div', {'class': 'box-content'}).findAll('tr'): # find the rows with four columns of text tds = [ clean(''.join(x.string for x in td.findAll(text=True))) diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat index f7b1a79e..96003c76 100644 --- a/stdnum/cn/loc.dat +++ b/stdnum/cn/loc.dat @@ -1,6 +1,6 @@ # generated from National Bureau of Statistics of the People's # Republic of China, downloaded from https://github.com/cn/GB2260 -# 2016-03-02 22:38:33.696025 +# 2016-07-26 20:51:28.113057 110101 county="东城区" prefecture="市辖区" province="北京市" 110102 county="西城区" prefecture="市辖区" province="北京市" 110103 county="崇文区" prefecture="市辖区" province="北京市" diff --git a/stdnum/iban.dat b/stdnum/iban.dat index e9fce125..50d61cd9 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -54,7 +54,7 @@ PL country="Poland" bban="8!n16!n" PT country="Portugal" bban="4!n4!n11!n2!n" QA country="Qatar" bban="4!a21!c" RO country="Romania" bban="4!a16!c" -LC country="Saint Lucia" bban="4!a24!n" +LC country="Saint Lucia" bban="4!a24!c" SM country="San Marino" bban="1!a5!n5!n12!c" ST country="Sao Tome And Principe" bban="8!n11!n2!n" SA country="Saudi Arabia" bban="2!n18!c" diff --git a/stdnum/imsi.dat b/stdnum/imsi.dat index f665ff84..bc3bce1d 100644 --- a/stdnum/imsi.dat +++ b/stdnum/imsi.dat @@ -4,16 +4,21 @@ 01 bands="GSM 900 / GSM 1800" brand="TEST" country="Test networks" operator="Test Network" status="Operational" 00-99 202 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Cosmote" cc="gr" country="Greece" operator="COSMOTE - Mobile Telecommunications S.A." status="Operational" 03 bands="" cc="gr" country="Greece" operator="OTE" status="" - 04 bands="" cc="gr" country="Greece" operator="EDISY" status="" - 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="gr" country="Greece" operator="Vodafone Greece" status="Operational" - 06 bands="" cc="gr" country="Greece" operator="Cosmoline" status="" + 04 bands="GSM-R?" cc="gr" country="Greece" operator="OTE" status="" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="gr" country="Greece" operator="Vodafone Greece" status="Operational" + 06 bands="" cc="gr" country="Greece" operator="Cosmoline" status="Not operational" 07 bands="" cc="gr" country="Greece" operator="AMD Telecom" status="" 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Wind" cc="gr" country="Greece" operator="Wind Hellas Telecommunications S.A." status="Operational" + 11 bands="" cc="gr" country="Greece" operator="interConnect" status="" + 12 bands="MVNO" cc="gr" country="Greece" operator="Yuboto" status="Operational" + 13 bands="" cc="gr" country="Greece" operator="Compatel Limited" status="" 14 bands="MVNO" brand="Cyta Hellas" cc="gr" country="Greece" operator="CYTA" status="Operational" + 15 bands="" cc="gr" country="Greece" operator="BWS" status="" + 16 bands="MVNO" cc="gr" country="Greece" operator="Inter Telecom" status="Operational" 00-99 204 01 bands="" cc="nl" country="Netherlands" operator="RadioAccess Network Services BV" status="" @@ -21,7 +26,7 @@ 03 bands="MVNE / PrivateGSM 1800" brand="Voiceworks" cc="nl" country="Netherlands" operator="Voiceworks B.V." status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="nl" country="Netherlands" operator="Vodafone Libertel B.V." status="Operational" 05 bands="" cc="nl" country="Netherlands" operator="Elephant Talk Communications Premium Rate Services" status="" - 06 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="nl" country="Netherlands" operator="Mundio Mobile (Netherlands) Ltd" status="Operational" + 06 bands="MVNO" brand="Vectone Mobile" cc="nl" country="Netherlands" operator="Mundio Mobile (Netherlands) Ltd" status="Operational" 07 bands="MVNE" cc="nl" country="Netherlands" operator="Teleena (MVNE)" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="KPN" cc="nl" country="Netherlands" operator="KPN Mobile The Netherlands B.V." status="Operational" 09 bands="MVNO" brand="Lycamobile" cc="nl" country="Netherlands" operator="Lycamobile Netherlands Limited" status="Operational" @@ -33,7 +38,7 @@ 15 bands="LTE 2600" brand="Ziggo" cc="nl" country="Netherlands" operator="Ziggo B.V." status="Operational" 16 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile (BEN)" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 17 bands="MVNE" brand="Intercity Zakelijk" cc="nl" country="Netherlands" operator="Intercity Mobile Communications B.V." status="Operational" - 18 bands="MVNO" cc="nl" country="Netherlands" operator="UPC Nederland B.V." status="Operational" + 18 bands="MVNO" brand="upc" cc="nl" country="Netherlands" operator="UPC Nederland B.V." status="Operational" 19 bands="" cc="nl" country="Netherlands" operator="Mixe Communication Solutions B.V." status="" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 21 bands="GSM-R 900" cc="nl" country="Netherlands" operator="ProRail B.V." status="Operational" @@ -57,16 +62,16 @@ 00-99 206 00 bands="" brand="Proximus" cc="be" country="Belgium" operator="Belgacom Mobile" status="" - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Proximus" cc="be" country="Belgium" operator="Belgacom Mobile" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Proximus" cc="be" country="Belgium" operator="Belgacom Mobile" status="Operational" 02 bands="GSM-R" cc="be" country="Belgium" operator="N.M.B.S." status="Operational" 05 bands="MVNO" brand="Telenet" cc="be" country="Belgium" operator="Telenet" status="Operational" 06 bands="MVNO" brand="Lycamobile" cc="be" country="Belgium" operator="Lycamobile sprl" status="Operational" 07 bands="MVNO" brand="Vectone Mobile" cc="be" country="Belgium" operator="Mundio Mobile Belgium nv" status="Reserved" 09 bands="MVNO" brand="Voxbone" cc="be" country="Belgium" operator="Voxbone mobile" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Mobistar" cc="be" country="Belgium" operator="Orange S.A." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="be" country="Belgium" operator="Orange S.A." status="Operational" 15 bands="" cc="be" country="Belgium" operator="Elephant Talk Communications Schweiz GmbH" status="Not operational" - 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="BASE" cc="be" country="Belgium" operator="KPN Group Belgium" status="Operational" - 40 bands="MVNO" cc="be" country="Belgium" operator="JOIN Experience (Belgium)" status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="BASE" cc="be" country="Belgium" operator="Telenet" status="Operational" + 40 bands="MVNO" brand="JOIN" cc="be" country="Belgium" operator="JOIN Experience (Belgium)" status="Operational" 00-99 208 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Orange" cc="fr" country="France" operator="Orange S.A." status="Operational" @@ -77,14 +82,14 @@ 06 bands="Satellite" cc="fr" country="France" operator="Globalstar Europe" status="Operational" 07 bands="Satellite" cc="fr" country="France" operator="Globalstar Europe" status="Operational" 08 bands="MVNO" brand="Completel Mobile" cc="fr" country="France" operator="Completel" status="Operational" - 09 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" - 11 bands="UMTS 2100" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" + 09 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="SFR" cc="fr" country="France" operator="Altice" status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 LTE 2600" brand="SFR" cc="fr" country="France" operator="Altice" status="Operational" + 11 bands="UMTS 2100" brand="SFR" cc="fr" country="France" operator="Altice" status="Operational" 12 bands="" cc="fr" country="France" operator="Hewlett-Packard France" status="" - 13 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="SFR" cc="fr" country="France" operator="Vivendi" status="Operational" + 13 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="SFR" cc="fr" country="France" operator="Altice" status="Operational" 14 bands="GSM-R" brand="RFF" cc="fr" country="France" operator="RFF" status="Operational" - 15 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" - 16 bands="UMTS 900 / UMTS 2100 / LTE 2600" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" + 15 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" + 16 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Free Mobile" cc="fr" country="France" operator="Iliad" status="Operational" 17 bands="" brand="LEGOS" cc="fr" country="France" operator="Local Exchange Global Operation Services" status="" 18 bands="MVNO" brand="Voxbone" cc="fr" country="France" operator="Voxbone mobile" status="Operational" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Bouygues" cc="fr" country="France" operator="Bouygues Telecom" status="Operational" @@ -133,7 +138,7 @@ 18 bands="MVNO" brand="ONO" cc="es" country="Spain" operator="Cableuropa S.A.U." status="Operational" 19 bands="MVNO" brand="Simyo" cc="es" country="Spain" operator="E-PLUS Moviles Virtuales España S.L.U." status="Operational" 20 bands="MVNO" brand="Fonyou" cc="es" country="Spain" operator="Fonyou Telecom S.L." status="Operational" - 21 bands="MVNO" brand="Jazztel" cc="es" country="Spain" operator="Jazz Telecom S.A.U." status="Operational" + 21 bands="MVNO" brand="Jazztel" cc="es" country="Spain" operator="Orange S.A." status="Operational" 22 bands="MVNO" brand="DigiMobil" cc="es" country="Spain" operator="Best Spain Telecom" status="Operational" 23 bands="MVNO" brand="Barablu" cc="es" country="Spain" operator="Barablu Móvil España" status="" 24 bands="MVNO" brand="Eroski" cc="es" country="Spain" operator="Eroski Móvil España" status="Operational" @@ -147,6 +152,7 @@ 32 bands="MVNO" brand="Tuenti" cc="es" country="Spain" operator="Tuenti Technologies S.L." status="Operational" 33 bands="WiMAX" cc="es" country="Spain" operator="EURONA WIRELESS TELECOM, S.A." status="Operational" 34 bands="LTE 2600" cc="es" country="Spain" operator="Aire Networks del Mediterráneo, S.L.U." status="Operational" + 35 bands="MVNO" cc="es" country="Spain" operator="INGENIUM OUTSOURCING SERVICES, S.L." status="" 51 bands="GSM-R" brand="ADIF" cc="es" country="Spain" operator="Administrador de Infraestructuras Ferroviarias" status="Operational" 00-99 216 @@ -155,7 +161,7 @@ 03 bands="1800" brand="DIGI" cc="hu" country="Hungary" operator="DIGI Telecommunication Ltd." status="" 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" 70 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" - 71 bands="MVNO" brand="UPC Hungary" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" + 71 bands="MVNO" brand="upc" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" 99 bands="GSM-R 900" brand="MAV GSM-R" cc="hu" country="Hungary" operator="Magyar Államvasutak" status="Planned" 00-99 218 @@ -164,13 +170,13 @@ 90 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BH Mobile" cc="ba" country="Bosnia and Herzegovina" operator="BH Telecom" status="Operational" 00-99 219 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="hr" country="Croatia" operator="T-Mobile Croatia" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Tele2" cc="hr" country="Croatia" operator="Tele2" status="Operational" - 10 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vip" cc="hr" country="Croatia" operator="Vipnet" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="hr" country="Croatia" operator="T-Hrvatski Telekom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Tele2" cc="hr" country="Croatia" operator="Tele2" status="Operational" + 10 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Vip" cc="hr" country="Croatia" operator="Vipnet" status="Operational" 12 bands="MVNO" cc="hr" country="Croatia" operator="TELE FOCUS d.o.o." status="" 00-99 220 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Serbia" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Serbia" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Montenegro" status="Not operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="mt:s" cc="rs" country="Serbia" operator="Telekom Srbija" status="Operational" 04 bands="GSM" brand="T-Mobile" cc="rs" country="Serbia" operator="T-Mobile Montenegro LLC" status="Not operational" @@ -209,7 +215,7 @@ 06 bands="UMTS 2100" brand="Telekom/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="ro" country="Romania" operator="Orange România" status="Operational" 11 bands="MVNO" cc="ro" country="Romania" operator="Enigma-System" status="" - 15 bands="WiMAX" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Operational" + 15 bands="WiMAX / TD-LTE 2600" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Operational" 16 bands="MVNO" brand="Lycamobile" cc="ro" country="Romania" operator="Lycamobile Romania" status="Operational" 00-99 228 @@ -225,17 +231,17 @@ 50 bands="UMTS 2100" cc="ch" country="Switzerland" operator="3G Mobile AG" status="Not operational" 51 bands="MVNO" cc="ch" country="Switzerland" operator="BebbiCell AG" status="Operational" 52 brand="Barablu" cc="ch" country="Switzerland" operator="Barablu" status="Not operational" - 53 bands="MVNO" cc="ch" country="Switzerland" operator="UPC Cablecom GmbH" status="Operational" - 54 bands="MVNO" cc="ch" country="Switzerland" operator="Lycamobile AG" status="Operational" + 53 bands="MVNO" brand="upc cablecom" cc="ch" country="Switzerland" operator="UPC Cablecom GmbH" status="Operational" + 54 bands="MVNO" brand="Lycamobile" cc="ch" country="Switzerland" operator="Lycamobile AG" status="Operational" 55 bands="" cc="ch" country="Switzerland" operator="WeMobile SA" status="" 56 bands="" cc="ch" country="Switzerland" operator="SMSRelay AG" status="Not operational" 57 bands="" cc="ch" country="Switzerland" operator="Mitto AG" status="" - 58 bands="MVNO" cc="ch" country="Switzerland" operator="Beeone Communications SA" status="Operational" + 58 bands="MVNO" brand="beeone" cc="ch" country="Switzerland" operator="Beeone Communications SA" status="Operational" 60 bands="" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="" 99 cc="ch" country="Switzerland" operator="Swisscom" status="" 00-99 230 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="T-Mobile" cc="cz" country="Czech Republic" operator="T-Mobile Czech Republic" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100 / LTE 2600" brand="T-Mobile" cc="cz" country="Czech Republic" operator="T-Mobile Czech Republic" status="Operational" 02 bands="CDMA 450 / GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="cz" country="Czech Republic" operator="O2 Czech Republic" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2100" brand="Vodafone" cc="cz" country="Czech Republic" operator="Vodafone Czech Republic" status="Operational" 04 bands="CDMA2000 410 - 430" brand="U:fon" cc="cz" country="Czech Republic" operator="Air Telecom a. s." status="Operational" @@ -243,7 +249,7 @@ 06 bands="" cc="cz" country="Czech Republic" operator="OSNO TELECOMUNICATION, s.r.o." status="Not operational" 07 bands="MVNO" cc="cz" country="Czech Republic" operator="ASTELNET, s.r.o." status="Not operational" 08 bands="" cc="cz" country="Czech Republic" operator="Compatel s.r.o." status="" - 09 bands="MVNO" cc="cz" country="Czech Republic" operator="Mundio Distribution Czech Republic s.r.o." status="" + 09 bands="MVNO" brand="Vectone Mobile" cc="cz" country="Czech Republic" operator="Mundio Distribution Czech Republic s.r.o." status="" 98 bands="GSM-R 900" cc="cz" country="Czech Republic" operator="Správa železniční dopravní cesty, s.o." status="Operational" 99 bands="GSM 1800" brand="Vodafone" cc="cz" country="Czech Republic" operator="Vodafone Czech Republic" status="Operational" 00-99 @@ -259,17 +265,17 @@ 232 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="A1.net" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" 02 cc="at" country="Austria" operator="A1 Telekom Austria" status="Reserved" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria" status="Operational" 04 bands="" brand="T-Mobile AT" cc="at" country="Austria" operator="T-Mobile Austria Gmbh" status="" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange AT" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="3" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" 06 bands="" brand="Orange AT" cc="at" country="Austria" operator="Orange Austria GmbH" status="Not operational" 07 bands="MVNO" brand="tele.ring" cc="at" country="Austria" operator="T-Mobile Austria" status="Operational" 08 bands="MVNO" brand="Lycamobile" cc="at" country="Austria" operator="Lycamobile Austria" status="Operational" 09 bands="MVNO" brand="Tele2Mobil" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" - 10 bands="UMTS 2100 / LTE 1800 / LTE 2600" brand="3AT" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" + 10 bands="UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Operational" 11 bands="MVNO" brand="bob" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" 12 bands="MVNO" brand="yesss!" cc="at" country="Austria" operator="A1 Telekom Austria" status="Operational" - 13 bands="MVNO" brand="UPC Mobile" cc="at" country="Austria" operator="UPC Austria" status="Operational" + 13 bands="MVNO" brand="upc" cc="at" country="Austria" operator="UPC Austria" status="Operational" 14 bands="" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Reserved" 15 bands="MVNO" brand="Vectone Mobile" cc="at" country="Austria" operator="Mundio Mobile Austria" status="Operational" 16 bands="" cc="at" country="Austria" operator="Hutchison Drei Austria" status="Reserved" @@ -284,7 +290,7 @@ 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" 01 bands="MVNO" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="gb" country="United Kingdom" operator="Jersey Airtel Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="je" country="Jersey (United Kingdom)" operator="Jersey Airtel Limited" status="Operational" 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="gb" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" status="" 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" status="" @@ -301,35 +307,35 @@ 17 cc="gb" country="United Kingdom" operator="FleXtel Limited" status="" 18 bands="MVNO" brand="Cloud9" cc="gb" country="United Kingdom" operator="Cloud9" status="Operational" 19 bands="GSM 1800" brand="Private Mobile Networks PMN" cc="gb" country="United Kingdom" operator="Teleware plc" status="Operational" - 20 bands="UMTS 2100 / LTE 1800" brand="3" cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" + 20 bands="UMTS 2100 / LTE 800 / LTE 1800" brand="3" cc="gb" country="United Kingdom" operator="Hutchison 3G UK Ltd" status="Operational" 21 bands="" cc="gb" country="United Kingdom" operator="LogicStar Ltd" status="Not operational" 22 bands="" cc="gb" country="United Kingdom" operator="Telesign Mobile Limited" status="" 23 bands="" cc="gb" country="United Kingdom" operator="Icron Network Limited" status="" - 24 bands="" brand="Greenfone" cc="gb" country="United Kingdom" operator="Stour Marine Limited" status="Operational" + 24 bands="MVNO" brand="Greenfone" cc="gb" country="United Kingdom" operator="Stour Marine Limited" status="Operational" 25 bands="MVNO" brand="Truphone" cc="gb" country="United Kingdom" operator="Truphone" status="Operational" 26 bands="MVNO" brand="Lycamobile" cc="gb" country="United Kingdom" operator="Lycamobile UK Limited" status="Operational" 27 bands="MVNE" cc="gb" country="United Kingdom" operator="Teleena UK Limited" status="Operational" 28 bands="MVNO" cc="gb" country="United Kingdom" operator="Marathon Telecom Limited" status="Operational" 29 bands="" brand="aql" cc="gb" country="United Kingdom" operator="(aq) Limited" status="" - 30 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile UK" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 31 bands="MVNO" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" - 32 bands="MVNO" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" - 33 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" - 34 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange (UK)" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 30 bands="GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile UK" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 31 bands="MVNO" brand="Virgin Mobile" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" + 32 bands="MVNO" brand="Virgin Mobile" cc="gb" country="United Kingdom" operator="Virgin Media" status="Operational" + 33 bands="GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="gb" country="United Kingdom" operator="EE" status="Operational" + 34 bands="GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="gb" country="United Kingdom" operator="EE" status="Operational" 35 bands="" cc="gb" country="United Kingdom" operator="JSC Ingenium (UK) Limited" status="Not operational" - 36 bands="GSM 900 / GSM 1800 / LTE" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Sure (Isle of Man) Limited" status="Operational" + 36 bands="GSM 900 / GSM 1800 / LTE" brand="Sure Mobile" cc="im" country="Isle of Man (United Kingdom)" operator="Sure Isle of Man Ltd." status="Operational" 37 bands="" cc="gb" country="United Kingdom" operator="Synectiv Ltd" status="" - 38 bands="" brand="Virgin Mobile UK" cc="gb" country="United Kingdom" operator="Virgin Media" status="" + 38 bands="" brand="Virgin Mobile" cc="gb" country="United Kingdom" operator="Virgin Media" status="" 39 bands="" cc="gb" country="United Kingdom" operator="Gamma Telecom Holdings Ltd." status="" 50 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" 51 bands="TD-LTE 3500 / TD-LTE 3700" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" 52 bands="" cc="gb" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" 53 bands="MVNO" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="Operational" 54 bands="" cc="gb" country="United Kingdom" operator="The Carphone Warehouse Limited" status="" - 55 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sure Mobile" cc="gb" country="United Kingdom" operator="Sure (Guernsey) Limited" status="Operational" + 55 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sure Mobile" cc="je" country="Jersey (United Kingdom)" operator="Sure (Jersey) Limited" status="Operational" 56 bands="" cc="gb" country="United Kingdom" operator="CESG" status="" 57 bands="" cc="gb" country="United Kingdom" operator="Sky UK Limited" status="" - 58 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Pronto GSM" cc="gb" country="United Kingdom" operator="Manx Telecom" status="Operational" + 58 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Pronto GSM" cc="im" country="Isle of Man (United Kingdom)" operator="Manx Telecom" status="Operational" 59 bands="MVNO" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="Operational" 70 bands="" cc="gb" country="United Kingdom" operator="AMSUK Ltd." status="" 76 bands="GSM 900 / GSM 1800" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" @@ -337,7 +343,7 @@ 86 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 00-99 235 - 00 cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="" + 00 brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="" 01 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 02 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 03 bands="" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="" @@ -348,7 +354,7 @@ 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" status="" 00-99 238 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" 03 bands="" cc="dk" country="Denmark" operator="MACH Connectivity" status="" 04 bands="" cc="dk" country="Denmark" operator="NextGen Mobile Ltd T/A CardBoardFish" status="" @@ -364,13 +370,14 @@ 15 bands="" cc="dk" country="Denmark" operator="Ice Danmark ApS" status="" 16 bands="" cc="dk" country="Denmark" operator="Tismi B.V." status="" 17 bands="MVNO" cc="dk" country="Denmark" operator="Naka AG" status="" + 18 bands="" cc="dk" country="Denmark" operator="Cubic Telecom" status="" 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="dk" country="Denmark" operator="Telia" status="Operational" 23 bands="GSM-R" brand="GSM-R DK" cc="dk" country="Denmark" operator="Banedanmark" status="Operational" 28 bands="" cc="dk" country="Denmark" operator="CoolTEL ApS" status="" 30 bands="" cc="dk" country="Denmark" operator="Interactive digital media GmbH" status="" 40 bands="" cc="dk" country="Denmark" operator="Ericsson Danmark A/S" status="" 43 bands="" cc="dk" country="Denmark" operator="MobiWeb Limited" status="" - 66 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" cc="dk" country="Denmark" operator="TT-Netværket P/S" status="" + 66 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" cc="dk" country="Denmark" operator="TT-Netværket P/S" status="Operational" 77 bands="GSM 900 / GSM 1800" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" 00-99 240 @@ -392,11 +399,11 @@ 16 bands="GSM" cc="se" country="Sweden" operator="42 Telecom AB" status="Operational" 17 bands="MVNO" brand="Gotanet" cc="se" country="Sweden" operator="Götalandsnätet AB" status="Operational" 18 bands="" cc="se" country="Sweden" operator="Generic Mobile Systems Sweden AB" status="" - 19 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="se" country="Sweden" operator="Mundio Mobile (Sweden) Limited" status="Operational" + 19 bands="MVNO" brand="Vectone Mobile" cc="se" country="Sweden" operator="Mundio Mobile (Sweden) Limited" status="Operational" 20 bands="GSM" cc="se" country="Sweden" operator="Wireless Maingate Messaging Services AB" status="Operational" 21 bands="GSM-R 900" brand="MobiSir" cc="se" country="Sweden" operator="Trafikverket ICT" status="Operational" 22 bands="" cc="se" country="Sweden" operator="EuTel AB" status="" - 23 bands="" cc="se" country="Sweden" operator="Infobip Limited" status="Operational" + 23 bands="" cc="se" country="Sweden" operator="Infobip Limited" status="Not operational" 24 bands="GSM 900 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" 25 bands="" cc="se" country="Sweden" operator="Digitel Mobile Srl" status="Not operational" 26 bands="GSM" cc="se" country="Sweden" operator="Beepsend AB" status="Operational" @@ -422,7 +429,7 @@ 00-99 242 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="NetCom" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telia" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Operational" 03 brand="Teletopia" cc="no" country="Norway" operator="Teletopia Gruppen AS" status="Not operational" 04 bands="MVNO" brand="Tele2" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" 05 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Network Norway" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" @@ -436,48 +443,53 @@ 14 bands="" cc="no" country="Norway" operator="ICE Communication Norge AS" status="" 20 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" 21 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" - 23 bands="MVNO" brand="Lyca" cc="no" country="Norway" operator="Lyca Mobile Ltd" status="Operational" + 23 bands="MVNO" brand="Lycamobile" cc="no" country="Norway" operator="Lyca Mobile Ltd" status="Operational" 24 bands="" cc="no" country="Norway" operator="Mobile Norway AS" status="" 25 bands="" cc="no" country="Norway" operator="Forsvarets kompetansesenter KKIS" status="" 00-99 244 03 bands="GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" - 04 bands="MVNO" brand="AINA" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj / Aina Oyj" status="Not operational" + 04 bands="" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="" 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" - 07 bands="GSM 900 / GSM 1800" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" - 08 bands="GSM 1800 / UMTS 2100" brand="Nokia" cc="fi" country="Finland" operator="Nokia Test Network" status="Not operational" - 09 bands="GSM 900" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Not operational" - 10 bands="MVNO" cc="fi" country="Finland" operator="Viestintävirasto" status="Not operational" - 11 bands="MVNO" cc="fi" country="Finland" operator="Viestintävirasto" status="Not operational" + 06 bands="" brand="Elisa" cc="fi" country="Finland" operator="Elisa Oyj" status="Not operational" + 07 bands="GSM 900 / GSM 1800" brand="Nokia" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="" + 08 bands="GSM 1800 / UMTS 2100" brand="Nokia" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="" + 09 bands="GSM 900" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="" + 10 bands="" cc="fi" country="Finland" operator="Viestintävirasto" status="" + 11 bands="" cc="fi" country="Finland" operator="Viestintävirasto" status="" 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" 13 bands="GSM 900 / GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Not operational" - 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Ålcom" cc="fi" country="Finland" operator="Ålands Telekommunikation Ab" status="Operational" - 15 bands="GSM 1800" brand="SAMK" cc="fi" country="Finland" operator="Satakunta University of Applied Sciences" status="Not operational" + 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Ålcom" cc="fi" country="Finland" operator="Ålands Telekommunikation Ab" status="Operational" + 15 bands="GSM 1800" brand="SAMK" cc="fi" country="Finland" operator="Satakunnan ammattikorkeakoulu Oy" status="Not operational" 16 bands="MVNO" brand="Tele2" cc="fi" country="Finland" operator="Oy Finland Tele2 AB" status="Not operational" - 17 bands="GSM-R" brand="Corenet" cc="fi" country="Finland" operator="Corenet Oy / Finnish Transport Agency" status="Operational" + 17 bands="GSM-R" cc="fi" country="Finland" operator="Liikennevirasto" status="Operational" 21 bands="MVNO" brand="Elisa- Saunalahti" cc="fi" country="Finland" operator="Elisa Oyj" status="Operational" + 22 bands="" cc="fi" country="Finland" operator="EXFO Oy" status="" + 23 bands="" cc="fi" country="Finland" operator="EXFO Oy" status="" + 24 bands="" cc="fi" country="Finland" operator="TTY-säätiö" status="" 25 bands="CDMA" brand="Datame" cc="fi" country="Finland" operator="Datame Oy" status="Not operational" 26 bands="MVNO" brand="Compatel" cc="fi" country="Finland" operator="Compatel Ltd" status="Operational" - 27 bands="" cc="fi" country="Finland" operator="VTT Technical Research Centre of Finland" status="" + 27 bands="" cc="fi" country="Finland" operator="Teknologian tutkimuskeskus VTT Oy" status="" 29 bands="MVNO" cc="fi" country="Finland" operator="SCNL Truphone" status="Not operational" 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Not Operational" 31 bands="MVNO" brand="Kuiri" cc="fi" country="Finland" operator="Ukko Mobile Oy" status="Operational" 32 bands="MVNO" brand="Voxbone" cc="fi" country="Finland" operator="Voxbone SA" status="Operational" 33 bands="TETRA" brand="VIRVE" cc="fi" country="Finland" operator="Virve Tuotteet ja Palvelut Oy" status="Operational" 34 bands="MVNO" brand="Bittium Wireless" cc="fi" country="Finland" operator="Bittium Wireless Oy" status="Operational" - 35 bands="LTE 450" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" + 35 bands="LTE 450 / LTE 2600" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" 36 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera / DNA" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj / Suomen Yhteisverkko Oy" status="Operational" 37 bands="MVNO" brand="Tismi" cc="fi" country="Finland" operator="Tismi BV" status="Operational" - 38 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" - 39 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" - 40 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" - 41 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Operational" + 38 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Test Network" + 39 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Test Network" + 40 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Test Network" + 41 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Test Network" 91 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="Operational" + 92 bands="" brand="Sonera" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj" status="" 00-99 246 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Omnitel" cc="lt" country="Lithuania" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="BITĖ" cc="lt" country="Lithuania" operator="UAB Bitė Lietuva" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Tele 2" cc="lt" country="Lithuania" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Tele2" cc="lt" country="Lithuania" status="Operational" 04 bands="" cc="lt" country="Lithuania" operator="Ministry of the Interior)" status="" 05 bands="GSM-R 900" brand="LitRail" cc="lt" country="Lithuania" operator="Lietuvos geležinkeliai (Lithuanian Railways)" status="Operational" 06 bands="" brand="Mediafon" cc="lt" country="Lithuania" operator="UAB Mediafon" status="Operational" @@ -498,20 +510,20 @@ 248 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="ee" country="Estonia" operator="Estonian Mobile Telecom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Elisa" cc="ee" country="Estonia" operator="Elisa Eesti" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100 / LTE 2600" brand="Tele 2" cc="ee" country="Estonia" operator="Tele 2 Eesti" status="Operational" - 04 bands="MVNO" cc="ee" country="Estonia" operator="OY Top Connect" status="Operational" - 05 bands="" cc="ee" country="Estonia" operator="AS Bravocom Mobiil" status="" - 06 bands="UMTS 2100" cc="ee" country="Estonia" operator="Progroup Holding" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100 / LTE 2600" brand="Tele2" cc="ee" country="Estonia" operator="Tele2 Eesti" status="Operational" + 04 bands="MVNO" brand="Top Connect" cc="ee" country="Estonia" operator="OY Top Connect" status="Operational" + 05 bands="" cc="ee" country="Estonia" operator="AS Bravocom Mobiil" status="Not operational" + 06 bands="UMTS 2100" cc="ee" country="Estonia" operator="Progroup Holding" status="Not operational" 07 bands="CDMA2000 450" brand="Kou" cc="ee" country="Estonia" operator="Televõrgu AS" status="Not operational" 08 bands="MVNO" brand="VIVEX" cc="ee" country="Estonia" operator="VIVEX OU" status="Operational" - 09 bands="" cc="ee" country="Estonia" operator="Bravo Telecom" status="" - 10 bands="" cc="ee" country="Estonia" operator="Telcotrade OÜ" status="" + 09 bands="" cc="ee" country="Estonia" operator="Bravo Telecom" status="Not operational" + 10 bands="" cc="ee" country="Estonia" operator="Telcotrade OÜ" status="Not operational" 71 bands="" cc="ee" country="Estonia" operator="Siseministeerium (Ministry of Interior)" status="" 00-99 250 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications (purchased Tele2)" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications (purchased by Tele2)" status="Operational" 04 bands="GSM 900" brand="Sibchallenge" cc="ru" country="Russian Federation" operator="Sibchallenge" status="Not operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA2000 450" brand="ETK" cc="ru" country="Russian Federation" operator="Yeniseytelecom" status="Operational" 06 bands="CDMA2000 450" brand="Skylink" cc="ru" country="Russian Federation" operator="CJSC Saratov System of Cellular Communications" status="Operational" @@ -531,7 +543,8 @@ 22 bands="TD-LTE 2300" cc="ru" country="Russian Federation" operator="Vainakh Telecom" status="Operational" 23 bands="GSM 900 / GSM 1800" brand="Mobicom - Novosibirsk" cc="ru" country="Russian Federation" operator="Mobicom - Novosibirsk" status="Not operational" 28 bands="GSM 900" brand="Beeline" cc="ru" country="Russian Federation" operator="Beeline" status="Not operational" - 32 bands="GSM 900 / GSM 1800" brand="Win Mobile" cc="ru" country="Russian Federation" operator="K-Telecom" status="Operational" + 32 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Win Mobile" cc="ru" country="Russian Federation" operator="K-Telecom" status="Operational" + 33 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sevmobile" cc="ru" country="Russian Federation" operator="Sevtelekom" status="Operational" 34 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Krymtelekom" cc="ru" country="Russian Federation" operator="Krymtelekom" status="Operational" 35 bands="GSM 1800 / LTE 1800" brand="MOTIV" cc="ru" country="Russian Federation" operator="EKATERINBURG-2000" status="Operational" 38 bands="GSM 900 / GSM 1800" brand="Tambov GSM" cc="ru" country="Russian Federation" operator="Central Telecommunication Company" status="Operational" @@ -539,6 +552,7 @@ 44 bands="" cc="ru" country="Russian Federation" operator="Stavtelesot / North Caucasian GSM" status="Not operational" 50 bands="GSM 900 / GSM 1800" brand="MTS" cc="ru" country="Russian Federation" operator="Bezlimitno.ru" status="Operational" 54 bands="LTE 1800" brand="TTK" cc="ru" country="Russian Federation" operator="Tattelecom" status="Operational" + 60 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Volna mobile" cc="ru" country="Russian Federation" operator="KTK Telecom" status="Operational" 811 cc="ru" country="Russian Federation" operator="Votek Mobile" status="" 91 bands="GSM 1800" brand="Sonic Duo" cc="ru" country="Russian Federation" operator="Sonic Duo CJSC" status="Not operational" 92 bands="" cc="ru" country="Russian Federation" operator="Primtelefon" status="Not operational" @@ -563,7 +577,7 @@ 03 bands="CDMA 450" brand="DIALLOG" cc="by" country="Belarus" operator="BelCel" status="Not operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="life:)" cc="by" country="Belarus" operator="Belarusian Telecommunications Network" status="Operational" 05 bands="" cc="by" country="Belarus" operator="Beltelecom" status="" - 06 bands="" cc="by" country="Belarus" operator="Belorussian Cloud Technologies" status="" + 06 bands="LTE 1800" brand="beCloud" cc="by" country="Belarus" operator="Belorussian Cloud Technologies" status="Operational" 501 bands="" brand="BelCel JV" cc="by" country="Belarus" status="" 00-99 259 @@ -593,29 +607,36 @@ 16 bands="LTE 1800" brand="Mobyland" cc="pl" country="Poland" operator="Mobyland Sp. z o.o." status="Operational" 17 bands="UMTS 900 / TD-LTE 2600" brand="Aero2" cc="pl" country="Poland" operator="Aero 2 Sp. z o.o." status="Operational" 18 bands="" brand="AMD Telecom" cc="pl" country="Poland" operator="AMD Telecom S.A." status="" - 19 bands="" brand="Teleena" cc="pl" country="Poland" operator="Teleena Holding BV" status="" + 19 bands="" brand="Teleena" cc="pl" country="Poland" operator="Teleena Holding BV" status="Not operational" 20 bands="" brand="Mobile.Net" cc="pl" country="Poland" operator="Mobile.Net Sp. z o.o." status="" - 21 bands="" brand="Exteri" cc="pl" country="Poland" operator="Exteri Sp. z o.o." status="" + 21 bands="" brand="Exteri" cc="pl" country="Poland" operator="Exteri Sp. z o.o." status="Not operational" 22 bands="" brand="Arcomm" cc="pl" country="Poland" operator="Arcomm Sp. z o.o." status="" - 23 bands="" brand="Amicomm" cc="pl" country="Poland" operator="Amicomm Sp. z o.o." status="" - 24 bands="" brand="WideNet" cc="pl" country="Poland" operator="WideNet Sp. z o.o." status="" + 23 bands="" brand="Amicomm" cc="pl" country="Poland" operator="Amicomm Sp. z o.o." status="Not operational" + 24 bands="" brand="WideNet" cc="pl" country="Poland" operator="WideNet Sp. z o.o." status="Not operational" 25 bands="" brand="BS&T" cc="pl" country="Poland" operator="Best Solutions & Technology Experience Sp. z o.o." status="" - 26 bands="" brand="ATE" cc="pl" country="Poland" operator="Advanced Technology & Experience Sp. z o.o." status="" - 27 bands="" brand="Intertelcom" cc="pl" country="Poland" operator="Intertelcom Sp. z o.o." status="" - 28 bands="" brand="PhoneNet" cc="pl" country="Poland" operator="PhoneNet Sp. z o.o." status="" - 29 bands="" brand="Interfonica" cc="pl" country="Poland" operator="Interfonica Sp. z o.o." status="" - 30 bands="" brand="GrandTel" cc="pl" country="Poland" operator="GrandTel Sp. z o.o." status="" + 26 bands="" brand="ATE" cc="pl" country="Poland" operator="Advanced Technology & Experience Sp. z o.o." status="Not operational" + 27 bands="" brand="Intertelcom" cc="pl" country="Poland" operator="Intertelcom Sp. z o.o." status="Not operational" + 28 bands="" brand="PhoneNet" cc="pl" country="Poland" operator="PhoneNet Sp. z o.o." status="Not operational" + 29 bands="" brand="Interfonica" cc="pl" country="Poland" operator="Interfonica Sp. z o.o." status="Not operational" + 30 bands="" brand="GrandTel" cc="pl" country="Poland" operator="GrandTel Sp. z o.o." status="Not operational" 31 bands="" brand="Phone IT" cc="pl" country="Poland" operator="Phone IT Sp. z o.o." status="" 32 bands="" cc="pl" country="Poland" operator="Compatel Limited" status="" 33 bands="MVNO" brand="Truphone" cc="pl" country="Poland" operator="Truphone Poland Sp. z o.o." status="Operational" 34 bands="UMTS 900" brand="NetWorkS!" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" 35 bands="GSM-R" cc="pl" country="Poland" operator="PKP Polskie Linie Kolejowe S.A." status="Operational" - 36 bands="MVNO" brand="Vectone Mobile" cc="pl" country="Poland" operator="Mundio Mobile" status="Operational" + 36 bands="MVNO" brand="Vectone Mobile" cc="pl" country="Poland" operator="Mundio Mobile" status="Not operational" 37 bands="" cc="pl" country="Poland" operator="NEXTGEN MOBILE LTD" status="" 38 bands="" cc="pl" country="Poland" operator="CALLFREEDOM Sp. z o.o." status="" 39 bands="MVNO" brand="Voxbone" cc="pl" country="Poland" operator="VOXBONE SA" status="Operational" 40 bands="" cc="pl" country="Poland" operator="Interactive Digital Media GmbH" status="" 41 bands="" cc="pl" country="Poland" operator="EZ PHONE MOBILE Sp. z o.o." status="" + 42 bands="" cc="pl" country="Poland" operator="MobiWeb Telecom Limited" status="" + 43 bands="" cc="pl" country="Poland" operator="Smart Idea International Sp. z o.o." status="" + 44 bands="" cc="pl" country="Poland" operator="Rebtel Poland Sp. z o.o." status="" + 45 bands="MVNO" cc="pl" country="Poland" operator="Virgin Mobile Polska Sp. z o.o." status="Operational" + 46 bands="" cc="pl" country="Poland" operator="Terra Telekom Sp. z o.o." status="" + 47 bands="" cc="pl" country="Poland" operator="SMShighway Limited" status="" + 48 bands="" cc="pl" country="Poland" operator="AGILE TELECOM S.P.A." status="" 98 bands="LTE 1800" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Not Operational" 00-99 262 @@ -630,7 +651,7 @@ 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Vodafone" cc="de" country="Germany" operator="Vodafone D2 GmbH" status="Operational" 10 bands="GSM-R" cc="de" country="Germany" operator="DB Netz AG" status="Operational" 11 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="O2" cc="de" country="Germany" operator="Telefónica Germany GmbH & Co. oHG" status="Reserved" - 12 bands=""full" MVNO / MVNE" brand="Dolphin Telecom" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" + 12 bands="MVNO" brand="Dolphin Telecom" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" 13 bands="UMTS 2100" cc="de" country="Germany" operator="Mobilcom Multimedia" status="Not operational" 14 bands="UMTS 2100" cc="de" country="Germany" operator="Group 3G UMTS" status="Not operational" 15 bands="TD-SCDMA" brand="Airdata" cc="de" country="Germany" status="Operational" @@ -638,16 +659,22 @@ 17 bands="" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="" 18 bands="MVNO" cc="de" country="Germany" operator="NetCologne" status="Operational" 19 bands="CDMA 450" cc="de" country="Germany" operator="Inquam Deutschland" status="" - 20 bands="GSM" brand="OnePhone" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" - 33 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="simquadrat" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" - 41 bands="" cc="de" country="Germany" operator="First Telecom GmbH" status="" + 20 bands="MVNO" brand="OnePhone" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" + 21 bands="" cc="de" country="Germany" operator="Multiconnect GmbH" status="" + 22 bands="MVNO" cc="de" country="Germany" operator="sipgate Wireless GmbH" status="" + 33 bands="MVNO" brand="simquadrat" cc="de" country="Germany" operator="sipgate GmbH" status="Operational" + 41 bands="" cc="de" country="Germany" operator="First Telecom GmbH" status="Not operational" 42 bands="GSM 1800" brand="CCC Event" cc="de" country="Germany" operator="Chaos Computer Club" status="Temporary operational" - 43 bands="" brand="LYCA" cc="de" country="Germany" operator="Lycamobile" status="Operational" + 43 bands="MVNO" brand="Lycamobile" cc="de" country="Germany" operator="Lycamobile" status="Operational" 60 bands="GSM-R 900" cc="de" country="Germany" operator="DB Telematik" status="Operational" + 72 bands="" cc="de" country="Germany" operator="Ericsson GmbH" status="" + 73 bands="" cc="de" country="Germany" operator="Xantaro Deutschland GmbH" status="" + 74 bands="" cc="de" country="Germany" operator="Qualcomm CDMA Technologies GmbH" status="" + 75 cc="de" country="Germany" operator="Core Network Dynamics GmbH" status="Not operational" 76 bands="GSM 900" cc="de" country="Germany" operator="Siemens AG" status="Not operational" 77 bands="GSM 900" brand="E-Plus" cc="de" country="Germany" operator="E-Plus Mobilfunk" status="Operational" 78 bands="" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="" - 79 bands="" cc="de" country="Germany" operator="ng4T GmbH" status="" + 79 bands="" cc="de" country="Germany" operator="ng4T GmbH" status="Not operational" 901 bands="" brand="Debitel" cc="de" country="Germany" status="Operational" 92 bands="GSM 1800 / UMTS 2100" cc="de" country="Germany" operator="Nash Technologies" status="Operational" 00-99 @@ -663,7 +690,7 @@ 04 bands="MVNO" brand="LycaMobile" cc="pt" country="Portugal" operator="LycaMobile" status="Operational" 05 bands="UMTS 2100" cc="pt" country="Portugal" operator="Oniway - Inforcomunicaçôes, S.A." status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="MEO" cc="pt" country="Portugal" operator="Telecomunicações Móveis Nacionais" status="Operational" - 07 bands="MVNO" brand="Vectone Mobile / Delight Mobile" cc="pt" country="Portugal" operator="Mundio Mobile (Portugal) Limited" status="Operational" + 07 bands="MVNO" brand="Vectone Mobile" cc="pt" country="Portugal" operator="Mundio Mobile (Portugal) Limited" status="Operational" 11 bands="" cc="pt" country="Portugal" operator="Compatel, Limited" status="" 12 bands="GSM-R" cc="pt" country="Portugal" operator="Refer Telecom - Serviços de Telecomunicações, S.A." status="Operational" 21 bands="CDMA2000 450" brand="Zapp" cc="pt" country="Portugal" operator="Zapp Portugal" status="Not operational" @@ -687,7 +714,7 @@ 09 bands="" cc="ie" country="Ireland" operator="Clever Communications" status="" 11 bands="MVNO" brand="Tesco Mobile" cc="ie" country="Ireland" operator="Liffey Telecom" status="Operational" 13 bands="MVNO" brand="Lycamobile" cc="ie" country="Ireland" operator="Lycamobile" status="Operational" - 15 bands="MVNO" brand="UPC Mobile" cc="ie" country="Ireland" operator="UPC" status="Operational" + 15 bands="MVNO" brand="Virgin Mobile" cc="ie" country="Ireland" operator="UPC" status="Operational" 16 bands="MVNO" brand="Carphone Warehouse" cc="ie" country="Ireland" operator="Carphone Warehouse" status="Operational" 00-99 274 @@ -705,8 +732,8 @@ 00-99 276 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telekom.al" cc="al" country="Albania" operator="Telekom Albania" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 /LTE 1800 / LTE 2600" brand="Vodafone" cc="al" country="Albania" operator="Vodafone Albania" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Eagle Mobile" cc="al" country="Albania" operator="Eagle Mobile" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Vodafone" cc="al" country="Albania" operator="Vodafone Albania" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Eagle Mobile" cc="al" country="Albania" operator="Albtelecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="Plus Communication" cc="al" country="Albania" operator="Plus Communication" status="Operational" 00-99 278 @@ -714,18 +741,18 @@ 11 bands="MVNO" cc="mt" country="Malta" operator="YOM Ltd." status="Operational" 21 bands="GSM 1800 / UMTS 2100" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="Operational" 30 bands="" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="" - 77 bands="UMTS 2100" brand="Melita" cc="mt" country="Malta" operator="Melita Plc" status="Operational" + 77 bands="UMTS 2100" brand="Melita" cc="mt" country="Malta" operator="Melita" status="Operational" 00-99 280 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cytamobile-Vodafone" cc="cy" country="Cyprus" operator="Cyprus Telecommunications Authority" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cytamobile-Vodafone" cc="cy" country="Cyprus" operator="Cyprus Telecommunications Authority" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN" cc="cy" country="Cyprus" operator="MTN Group" status="Operational" 20 bands="LTE 1800" brand="PrimeTel" cc="cy" country="Cyprus" operator="PrimeTel PLC" status="Operational" 22 bands="MVNO" brand="lemontel" cc="cy" country="Cyprus" operator="Lemontel Ltd" status="Operational" - 23 bands="MVNO" cc="cy" country="Cyprus" operator="Mundio Mobile Cyprus Ltd." status="" + 23 bands="MVNO" brand="Vectone Mobile" cc="cy" country="Cyprus" operator="Mundio Mobile Cyprus Ltd." status="" 00-99 282 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Geocell" cc="ge" country="Georgia" operator="Geocell Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MagtiCom" cc="ge" country="Georgia" operator="Magticom GSM" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="MagtiCom" cc="ge" country="Georgia" operator="Magticom GSM" status="Operational" 03 bands="CDMA 450" brand="MagtiCom" cc="ge" country="Georgia" operator="Magtifix" status="Operational" 04 bands="GSM 1800 / LTE 800" brand="Beeline" cc="ge" country="Georgia" operator="Mobitel LLC" status="Operational" 05 bands="CDMA 800" brand="Silknet" cc="ge" country="Georgia" operator="JSC Silknet" status="Operational" @@ -741,12 +768,12 @@ 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="am" country="Armenia" operator="Orange S.A." status="Operational" 00-99 284 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="M-Tel" cc="bg" country="Bulgaria" operator="Mobiltel" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vivacom" cc="bg" country="Bulgaria" operator="BTC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="M-Tel" cc="bg" country="Bulgaria" operator="Mobiltel" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vivacom" cc="bg" country="Bulgaria" operator="BTC" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Telenor" cc="bg" country="Bulgaria" operator="Telenor (Bulgaria)" status="Operational" 07 bands="GSM-R" brand="НКЖИ" cc="bg" country="Bulgaria" operator="НАЦИОНАЛНА КОМПАНИЯ ЖЕЛЕЗОПЪТНА ИНФРАСТРУКТУРА" status="Operational" 09 bands="" cc="bg" country="Bulgaria" operator="COMPATEL LIMITED" status="Not operational" - 11 bands="LTE 1800" cc="bg" country="Bulgaria" operator="Bulsatcom" status="Not operational" + 11 bands="LTE 1800" cc="bg" country="Bulgaria" operator="Bulsatcom" status="Operational" 13 bands="LTE 1800" brand="MAX" cc="bg" country="Bulgaria" operator="Max Telecom LTD" status="Operational" 00-99 286 @@ -777,12 +804,13 @@ 40 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Si.mobil" cc="si" country="Slovenia" operator="SI.MOBIL d.d." status="Operational" 41 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800" brand="Mobitel" cc="si" country="Slovenia" operator="Telekom Slovenije" status="Operational" 64 bands="UMTS 2100" brand="T-2" cc="si" country="Slovenia" operator="T-2 d.o.o." status="Operational" - 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Tušmobil" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" + 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Telemach" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" 00-99 294 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom.mk" cc="mk" country="Macedonia" operator="Makedonski Telekom" status="Operational" 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="ONE" cc="mk" country="Macedonia" operator="One" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vip MK" cc="mk" country="Macedonia" operator="VIP Operator" status="Operational" + 04 bands="MVNO" brand="Lycamobile" cc="mk" country="Macedonia" operator="Lycamobile LLC" status="Operational" 10 bands="" cc="mk" country="Macedonia" operator="WTI Macedonia" status="" 11 bands="" cc="mk" country="Macedonia" operator="MOBIK TELEKOMUNIKACII DOOEL Skopje" status="" 00-99 @@ -790,9 +818,10 @@ 01 bands="GSM 900 / GSM 1800" brand="Swisscom" cc="li" country="Liechtenstein" operator="Swisscom Schweiz AG" status="Operational" 02 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="7acht" cc="li" country="Liechtenstein" operator="Salt Liechtenstein AG" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="FL1" cc="li" country="Liechtenstein" operator="Telecom Liechtenstein AG" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cubic Telecom" cc="li" country="Liechtenstein" operator="Cubic Telecom AG" status="Operational" - 07 bands="" cc="li" country="Liechtenstein" operator="First Mobile AG" status="" + 06 bands="MVNO" brand="Cubic Telecom" cc="li" country="Liechtenstein" operator="Cubic Telecom AG" status="Operational" + 07 bands="MVNO" cc="li" country="Liechtenstein" operator="First Mobile AG" status="" 09 bands="MVNO" cc="li" country="Liechtenstein" operator="EMnify GmbH" status="" + 10 bands="MVNO" cc="li" country="Liechtenstein" operator="Soracom LI Ltd." status="" 77 bands="GSM 900" brand="Alpmobil" cc="li" country="Liechtenstein" operator="Alpcom AG" status="Not operational" 00-99 297 @@ -807,6 +836,7 @@ 250 bands="" brand="ALO" cc="ca" country="Canada" operator="ALO Mobile Inc." status="" 270 bands="UMTS 1700 / LTE 1700" brand="EastLink" cc="ca" country="Canada" operator="Bragg Communications" status="Operational" 290 bands="iDEN 900" brand="Airtel Wireless" cc="ca" country="Canada" operator="Airtel Wireless" status="Operational" + 300 bands="" cc="ca" country="Canada" operator="ECOTEL Inc." status="" 320 bands="UMTS 1700" brand="Mobilicity" cc="ca" country="Canada" operator="DAVE Wireless" status="Operational" 340 bands="MVNO" brand="Execulink" cc="ca" country="Canada" operator="Execulink" status="Operational" 350 bands="GSM 850" brand="FIRST" cc="ca" country="Canada" operator="FIRST Networks Operations" status="Not operational" @@ -878,7 +908,7 @@ 035 bands="" brand="ETEX Wireless" cc="us" country="United States of America" operator="ETEX Communications, LP" status="" 040 bands="CDMA" brand="MTA" cc="us" country="United States of America" operator="Matanuska Telephone Association, Inc." status="Operational" 050 bands="CDMA" brand="GCI" cc="us" country="United States of America" operator="Alaska Communications" status="Operational" - 053 bands="CDMA2000 1900" cc="us" country="United States of America" operator="Virgin Mobile US" status="Operational" + 053 bands="MVNO" brand="Virgin Mobile" cc="us" country="United States of America" operator="Sprint" status="Operational" 054 bands="" cc="us" country="United States of America" operator="Alltel US" status="Operational" 060 bands="" brand="CTEL" cc="us" country="United States of America" operator="Consolidated Telcom" status="" 066 bands="GSM / CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" @@ -962,7 +992,7 @@ 820 bands="" cc="us" country="United States of America" operator="Verizon Wireless" status="" 830 bands="" cc="us" country="United States of America" operator="Clearwire Corporation" status="" 840 bands="MVNO" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" - 850 bands="MVNO" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" + 850 bands="CDMA" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" 860 bands="CDMA" brand="Five Star Wireless" cc="us" country="United States of America" operator="TX RSA 15B2, LP" status="Operational" 870 bands="MVNO" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Operational" 880 bands="GSM 850" brand="DTC Wireless" cc="us" country="United States of America" operator="Advantage Cellular Systems, Inc." status="Operational" @@ -979,17 +1009,17 @@ 990 bands="LTE 700" brand="Evolve Broadband" cc="us" country="United States of America" operator="Worldcall Interconnect Inc." status="Operational" 000-999 311 - 000 bands="CDMA2000 850 / CDMA2000 1900" cc="us" country="United States of America" operator="Mid-Tex Cellular" status="Operational" - 010 bands="GSM 1900" brand="Chariton Valley" cc="us" country="United States of America" operator="Chariton Valley Communications" status="Operational" + 000 bands="CDMA2000 850 / CDMA2000 1900" brand="West Central Wireless" cc="us" country="United States of America" operator="Mid-Tex Cellular Ltd." status="Operational" + 010 bands="CDMA2000 850 / CDMA2000 1900" brand="Chariton Valley" cc="us" country="United States of America" operator="Chariton Valley Communications" status="Operational" 012 bands="CDMA2000 850 / CDMA2000 1900" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" - 020 bands="GSM 850" cc="us" country="United States of America" operator="Missouri RSA 5 Partnership" status="Operational" - 030 bands="GSM 1900" cc="us" country="United States of America" operator="Indigo Wireless" status="Operational" - 040 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" - 050 bands="CDMA" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" + 020 bands="GSM 850" brand="Chariton Valley" cc="us" country="United States of America" operator="Missouri RSA 5 Partnership" status="Operational" + 030 bands="GSM 850 / GSM 1900 / UMTS 850" brand="Indigo Wireless" cc="us" country="United States of America" operator="Americell PA 3 Partnership" status="Operational" + 040 bands="GSM 850 / GSM 1900" brand="Choice Wireless" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" + 050 bands="CDMA2000 850" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" 060 bands="GSM 850 / GSM 1900" brand="Farmers Cellular" cc="us" country="United States of America" operator="Farmers Cellular Telephone" status="Operational" 070 bands="GSM 850" brand="Easterbrooke" cc="us" country="United States of America" operator="Easterbrooke Cellular Corporation" status="Operational" 080 bands="GSM 850 / LTE" brand="Pine Cellular" cc="us" country="United States of America" operator="Pine Telephone Company" status="Operational" - 090 bands="GSM 1900" brand="Long Lines Wireless" cc="us" country="United States of America" operator="Long Lines Wireless LLC" status="Operational" + 090 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 100 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" 110 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" 120 bands="" brand="iConnect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" @@ -1073,26 +1103,26 @@ 011 bands="iDEN 800" brand="Southern LINC" cc="us" country="United States of America" operator="Southern Communications Services" status="Operational" 000-999 330 - 00 bands="PCS 1900" brand="Open Mobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" + 000 bands="CDMA 1900" brand="Open Mobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" 110 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="Claro Puerto Rico" cc="pr" country="Puerto Rico" operator="América Móvil" status="Operational" - 120 bands="LTE 700" brand="tmobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" - 00-99 + 120 bands="LTE 700" brand="Open Mobile" cc="pr" country="Puerto Rico" operator="PR Wireless" status="Operational" + 000-999 334 001 bands="" cc="mx" country="Mexico" operator="Comunicaciones Digitales Del Norte, S.A. de C.V." status="" - 010 bands="iDEN 800" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" + 010 bands="iDEN 800" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" 020 bands="TDMA 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="Telcel" cc="mx" country="Mexico" operator="América Móvil" status="Operational" 030 bands="CDMA2000 800 / CDMA2000 1900 / GSM 1900 / UMTS 850 / LTE 1900" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles" status="Operational" - 040 bands="CDMA2000 800 / CDMA2000 1900" brand="Iusacell / Unefon" cc="mx" country="Mexico" operator="Iusacell / Unefon" status="Operational" - 050 bands="GSM 850 / GSM 1900" brand="Iusacell" cc="mx" country="Mexico" operator="Iusacell" status="Operational" + 040 bands="CDMA2000 800 / CDMA2000 1900" brand="Unefon" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" + 050 bands="GSM 850 / GSM 1900" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" 060 bands="" cc="mx" country="Mexico" operator="Servicios de Acceso Inalambrico, S.A. de C.V." status="" 066 bands="" cc="mx" country="Mexico" operator="Telefonos de México, S.A.B. de C.V." status="" 070 bands="" cc="mx" country="Mexico" operator="Unefon" status="" 080 bands="" cc="mx" country="Mexico" operator="Unefon" status="" - 090 bands="UMTS 1700" brand="Nextel" cc="mx" country="Mexico" operator="Nextel México" status="Operational" + 090 bands="UMTS 1700" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" 000-999 338 - 020 bands="" brand="LIME" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not operational" - 050 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="tc" country="Turks and Caicos Islands" operator="Digicel (Turks & Caicos) Limited" status="Operational" + 020 bands="" brand="FLOW" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not operational" + 050 bands="GSM 900 / GSM 1800 / GSM 1900 / LTE 700" brand="Digicel" cc="tc" country="Turks and Caicos Islands" operator="Digicel (Turks & Caicos) Limited" status="Operational" 070 bands="GSM / UMTS / CDMA" brand="Claro" cc="jm" country="Jamaica" operator="Oceanic Digital Jamaica Limited" status="Not operational" 110 bands="" brand="FLOW" cc="jm" country="Jamaica" operator="Cable & Wireless Communications" status="Operational" 180 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="FLOW" cc="jm" country="Jamaica" operator="Cable & Wireless Communications" status="Operational" @@ -1108,51 +1138,51 @@ 20 bands="GSM 900 / UMTS 2100" brand="Digicel" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="DIGICEL Antilles Française Guyane" status="Operational" 00-99 342 - 600 bands="GSM 1900 / UMTS" brand="LIME" cc="bb" country="Barbados" operator="LIME (formerly known as Cable & Wireless)" status="Operational" + 600 bands="GSM 1900 / UMTS" brand="FLOW" cc="bb" country="Barbados" operator="LIME (formerly known as Cable & Wireless)" status="Operational" 750 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="bb" country="Barbados" operator="Digicel (Barbados) Limited" status="Operational" 820 bands="" cc="bb" country="Barbados" operator="Sunbeach Communications" status="Reserved" 000-999 344 030 bands="GSM 1900" brand="APUA" cc="ag" country="Antigua and Barbuda" operator="Antigua Public Utilities Authority" status="Operational" 050 bands="GSM 900 / GSM 1900 / UMTS 850 / LTE 700" brand="Digicel" cc="ag" country="Antigua and Barbuda" operator="Antigua Wireless Ventures Limited" status="Operational" - 920 bands="GSM 850 / GSM 1800 / GSM 1900 / UMTS / LTE 1700" brand="LIME" cc="ag" country="Antigua and Barbuda" operator="Cable & Wireless Caribbean Cellular (Antigua) Limited" status="Operational" + 920 bands="GSM 850 / GSM 1800 / GSM 1900 / UMTS / LTE 1700" brand="FLOW" cc="ag" country="Antigua and Barbuda" operator="Cable & Wireless Caribbean Cellular (Antigua) Limited" status="Operational" 930 bands="" cc="ag" country="Antigua and Barbuda" operator="AT&T Wireless" status="" 000-999 346 050 bands="GSM 900 / GSM 1800 / UMTS / LTE 1800" brand="Digicel" cc="ky" country="Cayman Islands (United Kingdom)" operator="Digicel Cayman Ltd." status="Operational" - 140 bands="GSM 850 / GSM 1900 / UMTS / LTE 700" brand="LIME" cc="ky" country="Cayman Islands (United Kingdom)" operator="Cable & Wireless (Cayman Islands) Limited" status="Operational" + 140 bands="GSM 850 / GSM 1900 / UMTS / LTE 700" brand="FLOW" cc="ky" country="Cayman Islands (United Kingdom)" operator="Cable & Wireless (Cayman Islands) Limited" status="Operational" 000-999 348 - 170 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="LIME" cc="vg" country="British Virgin Islands" operator="Cable & Wireless" status="Operational" + 170 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="FLOW" cc="vg" country="British Virgin Islands" operator="Cable & Wireless" status="Operational" 370 bands="" cc="vg" country="British Virgin Islands" operator="BVI Cable TV Ltd" status="" 570 bands="GSM 900 / GSM 1900" brand="CCT Boatphone" cc="vg" country="British Virgin Islands" operator="Caribbean Cellular Telephone" status="Operational" 770 bands="GSM 1800 / GSM 1900 / UMTS" brand="Digicel" cc="vg" country="British Virgin Islands" operator="Digicel (BVI) Limited" status="Operational" 000-999 350 - 00 bands="GSM 1900 / UMTS 850" brand="CellOne" cc="bm" country="Bermuda" operator="Bermuda Digital Communications Ltd." status="Operational" + 00 bands="GSM 1900 / UMTS 850 / LTE 700 / LTE 1900" brand="CellOne" cc="bm" country="Bermuda" operator="Bermuda Digital Communications Ltd." status="Operational" 01 bands="GSM 1900" brand="Digicel Bermuda" cc="bm" country="Bermuda" operator="Telecommunications (Bermuda & West Indies) Ltd" status="Reserved" 02 bands="GSM 1900 / UMTS" brand="Mobility" cc="bm" country="Bermuda" operator="M3 Wireless" status="Operational" 00-99 352 030 bands="GSM 900 / GSM 1800" brand="Digicel" cc="gd" country="Grenada" operator="Digicel Grenada Ltd." status="Operational" - 110 bands="GSM 850" brand="Cable & Wireless" cc="gd" country="Grenada" operator="Cable & Wireless Grenada Ltd." status="Operational" + 110 bands="GSM 850" brand="FLOW" cc="gd" country="Grenada" operator="Cable & Wireless Grenada Ltd." status="Operational" 000-999 354 - 860 bands="GSM 850" brand="Cable & Wireless" cc="ms" country="Montserrat (United Kingdom)" operator="Cable & Wireless" status="Operational" + 860 bands="GSM 850" brand="FLOW" cc="ms" country="Montserrat (United Kingdom)" operator="Cable & Wireless" status="Operational" 000-999 356 050 bands="GSM 900 / GSM 1800" brand="Digicel" cc="kn" country="Saint Kitts and Nevis" operator="Wireless Ventures (St Kitts-Nevis) Limited" status="Operational" 070 brand="Chippie" cc="kn" country="Saint Kitts and Nevis" operator="UTS" status="Operational" - 110 bands="GSM 850 / GSM 1900" brand="LIME" cc="kn" country="Saint Kitts and Nevis" operator="Cable & Wireless St. Kitts & Nevis Ltd" status="Operational" + 110 bands="GSM 850 / GSM 1900" brand="FLOW" cc="kn" country="Saint Kitts and Nevis" operator="Cable & Wireless St. Kitts & Nevis Ltd" status="Operational" 000-999 358 050 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="lc" country="Saint Lucia" status="" - 110 bands="GSM 850" cc="lc" country="Saint Lucia" operator="Cable & Wireless" status="" + 110 bands="GSM 850" brand="FLOW" cc="lc" country="Saint Lucia" operator="Cable & Wireless" status="" 000-999 360 - 070 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="vc" country="Saint Vincent and the Grenadines" operator="Digicel (St. Vincent and the Grenadines) Limited" status="Operational" + 050 bands="GSM 900 / GSM 1800 / GSM 1900" brand="Digicel" cc="vc" country="Saint Vincent and the Grenadines" operator="Digicel (St. Vincent and the Grenadines) Limited" status="Operational" 100 bands="GSM 850" brand="Cingular Wireless" cc="vc" country="Saint Vincent and the Grenadines" status="" - 110 bands="GSM 850" brand="Lime" cc="vc" country="Saint Vincent and the Grenadines" operator="Cable & Wireless (St. Vincent & the Grenadines) Ltd" status="Operational" + 110 bands="GSM 850" brand="FLOW" cc="vc" country="Saint Vincent and the Grenadines" operator="Cable & Wireless (St. Vincent & the Grenadines) Ltd" status="Operational" 000-999 362 31 bands="GSM" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Eutel N.V." status="" @@ -1180,11 +1210,11 @@ 000-999 365 010 bands="" cc="ai" country="Anguilla" operator="Weblinks Limited" status="Operational" - 840 bands="GSM 850 / UMTS" brand="LIME" cc="ai" country="Anguilla" operator="Cable & Wireless" status="Operational" + 840 bands="GSM 850 / UMTS / LTE 700" brand="FLOW" cc="ai" country="Anguilla" operator="Cable & Wireless" status="Operational" 000-999 366 020 bands="GSM 900 / GSM 1900 / UMTS" brand="Digicel" cc="dm" country="Dominica" operator="Digicel Group Limited" status="Operational" - 110 bands="GSM 850 / UMTS" brand="LIME" cc="dm" country="Dominica" operator="Cable & Wireless" status="Operational" + 110 bands="GSM 850 / UMTS" brand="FLOW" cc="dm" country="Dominica" operator="Cable & Wireless" status="Operational" 000-999 368 01 bands="GSM 900 / GSM 850" brand="CUBACEL" cc="cu" country="Cuba" operator="Empresa de Telecomunicaciones de Cuba, SA" status="Operational" @@ -1197,19 +1227,19 @@ 05 bands="TD-LTE 2600" brand="Wind" cc="do" country="Dominican Republic" operator="WIND Telecom, S.A" status="Operational" 00-99 372 - 01 bands="GSM 850" brand="Voila" cc="ht" country="Haiti" operator="Communication Cellulaire d'Haiti S.A." status="Operational" + 01 bands="GSM 850" brand="Voila" cc="ht" country="Haiti" operator="Communication Cellulaire d'Haiti S.A." status="Not operational" 02 bands="GSM 1800" brand="Digicel" cc="ht" country="Haiti" operator="Unigestion Holding S.A." status="Operational" 03 bands="GSM 900 / GSM 1800 / UTMS 2100" brand="Natcom" cc="ht" country="Haiti" operator="NATCOM S.A." status="Operational" 00-99 374 - 12 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="bmobile" cc="tt" country="Trinidad and Tobago" operator="TSTT" status="Operational" + 12 bands="GSM 850 / GSM 1900 / UMTS 1900 / TD-LTE 2600" brand="bmobile" cc="tt" country="Trinidad and Tobago" operator="TSTT" status="Operational" 130 bands="GSM 850 / GSM 1900 / UMTS 1900" brand="Digicel" cc="tt" country="Trinidad and Tobago" operator="Digicel (Trinidad & Tobago) Limited" status="Operational" 140 bands="CDMA" cc="tt" country="Trinidad and Tobago" operator="LaqTel Ltd." status="Not operational" 00-99 376 - 350 bands="GSM 850" brand="C&W" cc="tc" country="Turks and Caicos Islands" operator="Cable & Wireless West Indies Ltd (Turks & Caicos)" status="Operational" - 352 bands="UMTS 850" brand="IslandCom" cc="tc" country="Turks and Caicos Islands" operator="IslandCom Telecommunications" status="Operational" - 360 bands="" brand="IslandCom" cc="tc" country="Turks and Caicos Islands" operator="IslandCom Telecommunications" status="" + 350 bands="GSM 850 / LTE 700" brand="FLOW" cc="tc" country="Turks and Caicos Islands" operator="Cable & Wireless West Indies Ltd (Turks & Caicos)" status="Operational" + 352 bands="UMTS 850" brand="FLOW" cc="tc" country="Turks and Caicos Islands" operator="Cable & Wireless West Indies Ltd (Turks & Caicos)" status="Operational" + 360 bands="" brand="FLOW" cc="tc" country="Turks and Caicos Islands" operator="Cable & Wireless West Indies Ltd (Turks & Caicos)" status="" 000-999 400 01 bands="GSM 900 / GSM 1800/ UMTS 2100 / LTE 1800" brand="Azercell" cc="az" country="Azerbaijan" status="Operational" @@ -1228,86 +1258,86 @@ 00-99 402 11 bands="GSM 900 / UMTS 850 / UMTS 2100 / LTE 1800" brand="B-Mobile" cc="bt" country="Bhutan" operator="B-Mobile / Bhutan Telecom Ltd." status="Operational" - 77 bands="GSM 900 / GSM 1800 / UMTS" brand="TashiCell" cc="bt" country="Bhutan" operator="Tashi InfoComm Limited" status="Operational" + 77 bands="GSM 900 / GSM 1800 / UMTS / LTE 700" brand="TashiCell" cc="bt" country="Bhutan" operator="Tashi InfoComm Limited" status="Operational" 00-99 404 - 01 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Haryana" status="Operational" + 01 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Haryana" status="Operational" 02 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Punjab" status="Operational" 03 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 04 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Delhi & NCR" status="Operational" - 05 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Gujarat" status="Operational" + 05 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Gujarat" status="Operational" 07 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 09 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Assam" status="Operational" 10 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Delhi & NCR" status="Operational" - 11 bands="GSM 900 / GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Delhi & NCR" status="Operational" + 11 bands="GSM 900 / GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Delhi & NCR" status="Operational" 12 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Haryana" status="Operational" - 13 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" + 13 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 14 bands="GSM 900 / GSM 1800" brand="IDEA" cc="in" country="India" operator="Punjab" status="Operational" - 15 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" + 15 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" 16 bands="GSM 900" brand="Airtel" cc="in" country="India" operator="North East" status="Operational" 17 bands="GSM 900 / GSM 1800" brand="AIRCEL" cc="in" country="India" operator="West Bengal" status="Operational" 18 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 19 bands="GSM 900 / GSM 1800" brand="IDEA" cc="in" country="India" operator="Kerala" status="Operational" - 20 bands="GSM 900 / UMTS 2100" brand="Vodafone IN" cc="in" country="India" operator="Mumbai" status="Operational" + 20 bands="GSM 900 / UMTS 2100" brand="Vodafone India" cc="in" country="India" operator="Mumbai" status="Operational" 21 bands="GSM 900" brand="Loop Mobile" cc="in" country="India" operator="Mumbai" status="Operational" 22 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Maharashtra & Goa" status="Operational" 24 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Gujarat" status="Operational" 25 bands="GSM 900 / GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Bihar" status="Operational" - 27 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Maharashtra & Goa" status="Operational" + 27 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Maharashtra & Goa" status="Operational" 28 bands="GSM 900" brand="AIRCEL" cc="in" country="India" operator="Orissa" status="Operational" 29 bands="GSM 900" brand="AIRCEL" cc="in" country="India" operator="Assam" status="Operational" - 30 bands="GSM 900 / GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Kolkata" status="Operational" + 30 bands="GSM 900 / GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Kolkata" status="Operational" 31 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Kolkata" status="Operational" - 34 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Haryana" status="Operational" + 34 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Haryana" status="Operational" 36 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Bihar & Jharkhand" status="Operational" 37 bands="GSM 900 / UMTS 2100" brand="Aircel" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" - 38 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Assam" status="Operational" + 38 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Assam" status="Operational" 40 bands="" brand="AirTel" cc="in" country="India" operator="Chennai" status="Operational" 41 bands="GSM 900" brand="Aircel" cc="in" country="India" operator="Chennai" status="Operational" 42 bands="GSM 900" brand="Aircel" cc="in" country="India" operator="Tamil Nadu" status="Operational" - 43 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Tamil Nadu" status="Operational" - 44 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Karnataka" status="Operational" - 45 bands="GSM" brand="Airtel" cc="in" country="India" operator="Karnataka" status="Operational" - 46 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Kerala" status="Operational" + 43 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Tamil Nadu" status="Operational" + 44 bands="GSM 900 / LTE 1800" brand="IDEA" cc="in" country="India" operator="Karnataka" status="Operational" + 45 bands="GSM / TD-LTE 2300" brand="Airtel" cc="in" country="India" operator="Karnataka" status="Operational" + 46 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Kerala" status="Operational" 48 bands="GSM 900" brand="Dishnet Wireless" cc="in" country="India" operator="" status="Operational" 49 bands="GSM 900" brand="Airtel" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" 50 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="North East" status="Operational" - 51 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Himachal Pradesh" status="Operational" + 51 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 52 bands="GSM 900" brand="Reliance" cc="in" country="India" operator="Orissa" status="Operational" - 53 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Punjab" status="Operational" - 54 bands="GSM 900 / UTMS 2100" brand="CellOne" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" - 55 bands="GSM 900 / UTMS 2100" brand="CellOne" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" + 53 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Punjab" status="Operational" + 54 bands="GSM 900 / UTMS 2100" brand="cellone" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" + 55 bands="GSM 900 / UTMS 2100" brand="cellone" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" 56 bands="GSM 900" brand="IDEA" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" - 57 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Gujarat" status="Operational" - 58 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" - 59 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Rajasthan" status="Operational" - 60 bands="GSM 900" brand="Vodafone IN" cc="in" country="India" operator="Rajasthan" status="Operational" - 62 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" - 64 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Chennai" status="Operational" - 66 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Maharashtra & Goa" status="Operational" + 57 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Gujarat" status="Operational" + 58 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" + 59 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Rajasthan" status="Operational" + 60 bands="GSM 900" brand="Vodafone India" cc="in" country="India" operator="Rajasthan" status="Operational" + 62 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" + 64 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Chennai" status="Operational" + 66 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Maharashtra & Goa" status="Operational" 67 bands="GSM 900 / UMTS 2100" brand="Reliance" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" 68 bands="GSM 900 / UMTS 2100" brand="DOLPHIN" cc="in" country="India" operator="Delhi & NCR" status="Operational" 69 bands="GSM 900 / UMTS 2100" brand="DOLPHIN" cc="in" country="India" operator="Mumbai" status="Operational" 70 bands="" brand="AirTel" cc="in" country="India" operator="Rajasthan" status="Operational" - 71 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Karnataka (Bangalore)" status="Operational" - 72 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Kerala" status="Operational" - 73 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" - 74 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="West Bengal" status="Operational" - 75 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Bihar" status="Operational" - 76 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Orissa" status="Operational" - 77 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="North East" status="Operational" - 78 bands="GSM 900 / UMTS 2100" brand="Idea Cellular Ltd" cc="in" country="India" operator="Madhya Pradesh & Chattishgarh" status="Operational" - 79 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Andaman Nicobar" status="Operational" - 80 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Tamil Nadu" status="Operational" - 81 bands="GSM 900 / UMTS 2100" brand="CellOne" cc="in" country="India" operator="Kolkata" status="Operational" - 82 bands="" brand="Idea" cc="in" country="India" operator="Himachal Pradesh" status="Operational" + 71 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Karnataka (Bangalore)" status="Operational" + 72 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Kerala" status="Operational" + 73 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" + 74 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="West Bengal" status="Operational" + 75 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Bihar" status="Operational" + 76 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Orissa" status="Operational" + 77 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="North East" status="Operational" + 78 bands="GSM 900 / UMTS 2100" brand="IDEA" cc="in" country="India" operator="Madhya Pradesh & Chattishgarh" status="Operational" + 79 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Andaman Nicobar" status="Operational" + 80 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Tamil Nadu" status="Operational" + 81 bands="GSM 900 / UMTS 2100" brand="cellone" cc="in" country="India" operator="Kolkata" status="Operational" + 82 bands="" brand="IDEA" cc="in" country="India" operator="Himachal Pradesh" status="Operational" 83 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="Kolkata" status="Operational" - 84 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Chennai" status="Operational" + 84 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Chennai" status="Operational" 85 bands="GSM 1800" brand="Reliance" cc="in" country="India" operator="West Bengal" status="Operational" - 86 bands="GSM 900 / UMTS 2100" brand="Vodafone IN" cc="in" country="India" operator="Karnataka" status="Operational" + 86 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vodafone India" cc="in" country="India" operator="Karnataka" status="Operational" 87 bands="" brand="IDEA" cc="in" country="India" operator="Rajasthan" status="Operational" - 88 bands="" brand="Vodafone IN" cc="in" country="India" operator="Vodafone Punjab" status="Operational" - 89 bands="" brand="Idea" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" + 88 bands="" brand="Vodafone India" cc="in" country="India" operator="Vodafone Punjab" status="Operational" + 89 bands="" brand="IDEA" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" 90 bands="GSM 1800" brand="AirTel" cc="in" country="India" operator="Maharashtra" status="Operational" 91 bands="GSM 900" brand="AIRCEL" cc="in" country="India" operator="Kolkata" status="Operational" 92 bands="GSM 1800 / UMTS 2100" brand="AirTel" cc="in" country="India" operator="Mumbai" status="Operational" @@ -1368,16 +1398,16 @@ 54 bands="GSM 900" brand="AirTel" cc="in" country="India" operator="Uttar Pradesh (East)" status="Operational" 55 bands="GSM 900 / UTMS 2100" brand="Airtel" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" 56 bands="GSM 900 / GSM 1800" brand="AirTel" cc="in" country="India" operator="Assam" status="Operational" - 66 bands="GSM 900 / GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" - 67 bands="" brand="Vodafone IN" cc="in" country="India" operator="West Bengal" status="Operational" + 66 bands="GSM 900 / GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Uttar Pradesh (West)" status="Operational" + 67 bands="" brand="Vodafone India" cc="in" country="India" operator="West Bengal" status="Operational" 70 bands="GSM 1800" brand="IDEA" cc="in" country="India" operator="Bihar & Jharkhand" status="Operational" - 750 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" - 751 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Assam" status="Operational" - 752 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Bihar & Jharkhand" status="Operational" - 753 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Orissa" status="Operational" - 754 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Himachal Pradesh" status="Operational" - 755 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="North East" status="Operational" - 756 bands="GSM 1800" brand="Vodafone IN" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" + 750 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Jammu & Kashmir" status="Operational" + 751 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Assam" status="Operational" + 752 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Bihar & Jharkhand" status="Operational" + 753 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Orissa" status="Operational" + 754 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Himachal Pradesh" status="Operational" + 755 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="North East" status="Operational" + 756 bands="GSM 1800" brand="Vodafone India" cc="in" country="India" operator="Madhya Pradesh & Chhattisgarh" status="Operational" 799 bands="GSM 900 / GSM 1800" brand="IDEA" cc="in" country="India" operator="Mumbai" status="Operational" 800 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Delhi & NCR" status="Operational" 801 bands="GSM 1800" brand="AIRCEL" cc="in" country="India" operator="Andhra Pradesh and Telangana" status="Operational" @@ -1418,7 +1448,7 @@ 858 bands="" brand="Jio" cc="in" country="India" operator="Haryana" status="Reserved" 859 bands="" brand="Jio" cc="in" country="India" operator="Himachal Pradesh" status="Reserved" 860 bands="" brand="Jio" cc="in" country="India" operator="Jammu Kashmir" status="Reserved" - 861 bands="" brand="Jio" cc="in" country="India" operator="Karnataka" status="Reserved" + 861 bands="LTE 1800 / TD-LTE 2300" brand="Jio" cc="in" country="India" operator="Karnataka" status="Reserved" 862 bands="" brand="Jio" cc="in" country="India" operator="Kerala" status="Reserved" 863 bands="" brand="Jio" cc="in" country="India" operator="Madhyya Pradesh" status="Reserved" 864 bands="" brand="Jio" cc="in" country="India" operator="Maharashtra" status="Reserved" @@ -1476,7 +1506,7 @@ 01 bands="GSM 900 / UMTS 2100" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Posts and Telecommunications" status="Operational" 03 bands="CDMA 800" brand="CDMA800" cc="mm" country="Myanmar" operator="Myanmar Economic Corporation" status="Operational" 05 bands="UMTS 900 / UMTS 2100" brand="Ooredoo" cc="mm" country="Myanmar" operator="Ooredoo Myanmar" status="Operational" - 06 bands="GSM 900 / UMTS 2100" brand="Telenor Myanmar" cc="mm" country="Myanmar" operator="Telenor Myanmar (Comcel Myanmar)" status="Operational" + 06 bands="GSM 900 / UMTS 2100" brand="Telenor" cc="mm" country="Myanmar" operator="Telenor Myanmar" status="Operational" 00-99 415 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" @@ -1584,11 +1614,12 @@ 00-99 432 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="IR-MCI (Hamrahe Avval)" cc="ir" country="Iran" operator="Mobile Communications Company of Iran" status="Operational" + 12 bands="LTE 800" brand="Avacell" cc="ir" country="Iran" operator="Dadeh Dostar asr Novin p.j.s. co & Information Technology Company of Iran" status="Operational" 14 bands="GSM 900" brand="TKC" cc="ir" country="Iran" operator="Telecommunication Kish Company" status="Operational" 19 bands="GSM 900" brand="MTCE (Espadan)" cc="ir" country="Iran" operator="Mobile Telecommunications Company of Esfahan" status="Operational" - 20 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="Rightel" cc="ir" country="Iran" status="Operational" - 32 bands="GSM 900 / GSM 1800" brand="Taliya" cc="ir" country="Iran" operator="Rafsanjan Industrial Complex" status="Operational" - 35 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" + 20 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="Rightel" cc="ir" country="Iran" operator="Social Security Investment Co." status="Operational" + 32 bands="GSM 900 / GSM 1800" brand="Taliya" cc="ir" country="Iran" operator="TCI of Iran and Iran Mobin" status="Operational" + 35 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" 70 bands="GSM 900 / GSM 1800" brand="TCI" cc="ir" country="Iran" operator="Telephone Communications Company of Iran" status="Operational" 93 bands="GSM 1800" brand="Iraphone" cc="ir" country="Iran" operator="Iraphone" status="Operational" 00-99 @@ -1605,7 +1636,7 @@ 436 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="JV Somoncom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo Tajikistan" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Megafon Tajikistan" cc="tj" country="Tajikistan" operator="TT Mobile" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="MegaFon" cc="tj" country="Tajikistan" operator="TT Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2100" brand="Babilon-M" cc="tj" country="Tajikistan" operator="Babilon-Mobile" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="tj" country="Tajikistan" operator="Tacom" status="Operational" 12 bands="UMTS 2100" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo" status="" @@ -1624,7 +1655,7 @@ 440 00 bands="UMTS 1800" brand="Y!Mobile" cc="jp" country="Japan" operator="SoftBank Corp." status="Operational" 01 bands="WiMAX 2500" brand="UQ WiMAX" cc="jp" country="Japan" operator="UQ Communications Inc." status="Operational" - 02 bands="WiMAX 2500" cc="jp" country="Japan" operator="Hanshin Cable Enginerring Co., Ltd." status="" + 02 bands="WiMAX 2500" cc="jp" country="Japan" operator="Hanshin Cable Engineering Co., Ltd." status="" 05 bands="TD-LTE 2500" cc="jp" country="Japan" operator="Wireless City Planning Inc." status="Operational" 10 bands="UMTS 850 / UMTS 1800 / UMTS 2100 / LTE 700 / LTE 850 / LTE 1500 / LTE 1800 / LTE 2100" brand="NTT docomo" cc="jp" country="Japan" operator="NTT DoCoMo, Inc." status="Operational" 20 bands="UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="SoftBank" cc="jp" country="Japan" operator="SoftBank Corp." status="Operational" @@ -1675,7 +1706,7 @@ 04 bands="GSM 900 / GSM 1800" brand="3 (2G)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 05 bands="CDMA 800" brand="3 (CDMA)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2600" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" - 07 bands="MVNO" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" + 07 bands="MVNO" brand="China Unicom" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" 08 bands="MVNO" brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" 09 bands="MVNO" cc="hk" country="Hong Kong" operator="China Motion Telecom" status="Operational" 10 bands="GSM 1800" brand="New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" @@ -1691,7 +1722,7 @@ 20 bands="" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="" 21 bands="" cc="hk" country="Hong Kong" operator="21Vianet Mobile Ltd." status="" 22 bands="" cc="hk" country="Hong Kong" operator="Delcom (HK) Ltd" status="" - 23 bands="MVNO" cc="hk" country="Hong Kong" operator="Lycamobile Hong Kong Ltd" status="Operational" + 23 bands="MVNO" brand="Lycamobile" cc="hk" country="Hong Kong" operator="Lycamobile Hong Kong Ltd" status="Operational" 29 bands="CDMA 800" brand="PCCW Mobile (CDMA)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 00-99 455 @@ -1705,19 +1736,19 @@ 07 bands="LTE" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom (Macau) Limitada" status="Operational" 00-99 456 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard ( Mobitel )" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="CamGSM / The Royal Group" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" 03 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" 04 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart Axiata" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Metfone" cc="kh" country="Cambodia" operator="Viettel" status="Operational" - 09 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kh" country="Cambodia" operator="Sotelco Ltd." status="Operational" - 11 bands="CDMA2000" brand="Excell" cc="kh" country="Cambodia" status="Operational" + 09 bands="GSM 900 / GSM 1800" brand="Metfone" cc="kh" country="Cambodia" operator="Viettel" status="Operational" + 11 bands="LTE 850" brand="SEATEL" cc="kh" country="Cambodia" operator="SEATEL Cambodia" status="Operational" 18 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="The Royal Group" status="Operational" 00-99 457 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="LTC" cc="la" country="Laos" operator="Lao Telecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="LaoTel" cc="la" country="Laos" operator="Lao Telecom" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="ETL" cc="la" country="Laos" operator="Enterprise of Telecommunications Lao" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Unitel" cc="la" country="Laos" operator="Star Telecom Co., Ltd" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="la" country="Laos" operator="VimpelCom Lao Ltd" status="Operational" @@ -1731,12 +1762,13 @@ 05 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Not operational" 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" + 08 bands="" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="" 09 bands="" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="" 11 bands="" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="" 20 bands="GSM-R" brand="China Tietong" cc="cn" country="China" operator="China Tietong" status="Operational" 00-99 466 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700 / LTE 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" 02 bands="GSM 900" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="" 03 bands="UMTS 2100" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="" 05 bands="CDMA2000 800 / LTE 700" brand="APTG" cc="tw" country="Taiwan" operator="Asia Pacific Telecom" status="Operational" @@ -1758,7 +1790,8 @@ 00-99 467 05 bands="UMTS 2100" brand="Koryolink" cc="kp" country="North Korea" operator="Cheo Technology Jv Company" status="Operational" - 193 bands="GSM 900" brand="SunNet" cc="kp" country="North Korea" operator="Korea Posts and Telecommunications Corporation" status="Discontinued" + 06 bands="UMTS 2100" brand="Koryolink" cc="kp" country="North Korea" operator="Cheo Technology Jv Company" status="Operational" + 193 bands="GSM 900" brand="SunNet" cc="kp" country="North Korea" operator="Korea Posts and Telecommunications Corporation" status="Not operational" 00-99 470 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Grameenphone" cc="bd" country="Bangladesh" operator="GrameenPhone Ltd" status="Operational" @@ -1767,6 +1800,7 @@ 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TeleTalk" cc="bd" country="Bangladesh" operator="Teletalk Bangladesh Limited" status="Operational" 05 bands="CDMA 800 / GSM 900 / GSM 1800" brand="Citycell" cc="bd" country="Bangladesh" operator="Pacific Bangladesh Telecom Limited" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="bd" country="Bangladesh" operator="Bharti airtel Bangladesh Ltd." status="Operational" + 09 bands="LTE 800 / LTE 2600 / WiMAX" brand="ollo" cc="bd" country="Bangladesh" operator="Bangladesh Internet Exchange Limited (BIEL)" status="Operational" 00-99 472 01 bands="GSM 900 / UMTS 2100" brand="Dhiraagu" cc="mv" country="Maldives" operator="Dhivehi Raajjeyge Gulhun" status="Operational" @@ -1826,6 +1860,9 @@ 31 bands="" cc="au" country="Australia" operator="BHP Billiton" status="" 32 bands="" cc="au" country="Australia" operator="Thales Australia" status="" 33 bands="" cc="au" country="Australia" operator="CLX Networks Pty Ltd" status="" + 34 bands="" cc="au" country="Australia" operator="Santos Limited" status="" + 35 bands="" cc="au" country="Australia" operator="MessageBird Pty Ltd" status="" + 36 bands="" brand="Optus" cc="au" country="Australia" operator="Optus Mobile Pty. Ltd." status="" 38 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Crazy John's" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 62 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" 68 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" @@ -1847,7 +1884,7 @@ 20 bands="GSM 1800" brand="TELKOMMobile" cc="id" country="Indonesia" operator="PT Telkom Indonesia Tbk" status="Not operational" 21 bands="GSM 1800" brand="IM3" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Not operational" 27 bands="CDMA 450" brand="Ceria" cc="id" country="Indonesia" operator="PT Sampoerna Telekomunikasi Indonesia" status="Operational" - 28 bands="CDMA 800 LTE 850 / TD-LTE 2300" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" + 28 bands="CDMA 800 / LTE 850 / TD-LTE 2300" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" 88 bands="TD-LTE 2300" brand="BOLT! Super 4G" cc="id" country="Indonesia" operator="PT Internux" status="Operational" 89 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" @@ -1860,19 +1897,19 @@ 515 01 bands="GSM 900" brand="Islacom" cc="ph" country="Philippines" operator="Globe Telecom via Innove Communications" status="Not operational" 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="Smart" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="SMART" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" 05 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" 11 bands="" cc="ph" country="Philippines" operator="PLDT via ACeS Philippines" status="" - 18 bands="GSM 900 / UMTS 2100 (defunct)" brand="Cure" cc="ph" country="Philippines" operator="PLDT via Smart's Connectivity Unlimited Resources Enterprise" status="Operational" + 18 bands="GSM 900 / UMTS 2100" brand="Cure" cc="ph" country="Philippines" operator="PLDT via Smart's Connectivity Unlimited Resources Enterprise" status="Not operational" 24 bands="" brand="ABS-CBN" cc="ph" country="Philippines" operator="ABS-CBN Convergence with Globe Telecom" status="Operational" 88 bands="" cc="ph" country="Philippines" operator="Nextel" status="" 00-99 520 00 bands="UMTS 850" brand="my by CAT" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" - 01 bands="GSM 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Operational" + 01 bands="GSM 900 / UMTS 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Not operational" 02 bands="CDMA 800" brand="CAT CDMA" cc="th" country="Thailand" operator="CAT Telecom" status="Not operational" 03 bands="UMTS 2100 / LTE 1800" brand="AIS" cc="th" country="Thailand" operator="Advanced Wireless Network Company Ltd." status="Operational" - 04 bands="UMTS 2100 / LTE 1800 / LTE 2100" brand="TrueMove H 4G LTE" cc="th" country="Thailand" operator="Real Future Company Ltd." status="Operational" + 04 bands="UMTS 2100 / LTE 1800 / LTE 2100" brand="TrueMove H" cc="th" country="Thailand" operator="Real Future Company Ltd." status="Operational" 05 bands="UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTAC Network Company Ltd." status="Operational" 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="TOT Public Company Limited" status="Operational" 18 bands="GSM 1800" brand="dtac" cc="th" country="Thailand" operator="Total Access Communications Public Company Ltd." status="Operational" @@ -1889,6 +1926,7 @@ 05 bands="GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="StarHub" cc="sg" country="Singapore" operator="StarHub Mobile" status="Operational" 06 bands="" brand="StarHub" cc="sg" country="Singapore" operator="StarHub Mobile" status="" 07 bands="" brand="SingTel" cc="sg" country="Singapore" operator="Singapore Telecom" status="" + 08 bands="" brand="StarHub" cc="sg" country="Singapore" operator="StarHub Mobile" status="" 12 bands="iDEN 800" brand="Grid" cc="sg" country="Singapore" operator="GRID Communications Pte Ltd." status="Operational" 00-99 528 @@ -1901,8 +1939,8 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Vodafone" cc="nz" country="New Zealand" operator="Vodafone New Zealand" status="Operational" 02 bands="CDMA2000 800" brand="Telecom" cc="nz" country="New Zealand" operator="Telecom New Zealand" status="Not operational" 03 bands="UMTS-TDD 2000" brand="Woosh" cc="nz" country="New Zealand" operator="Woosh Wireless" status="Operational" - 04 bands="UMTS 2100" brand="TelstraClear" cc="nz" country="New Zealand" operator="TelstraClear New Zealand" status="Not operational" - 05 bands="UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Spark NZ" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" + 04 bands="UMTS 2100" brand="Vodafone" cc="nz" country="New Zealand" operator="TelstraClear New Zealand" status="Not operational" + 05 bands="UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Spark" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" 06 bands="MVNO" brand="Skinny" cc="nz" country="New Zealand" operator="Spark New Zealand" status="Operational" 07 bands="" cc="nz" country="New Zealand" operator="Bluereach Limited" status="" 24 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800" brand="2degrees" cc="nz" country="New Zealand" operator="2degrees" status="Operational" @@ -1912,7 +1950,7 @@ 00-99 537 01 bands="GSM 900 / UMTS 900" brand="bmobile" cc="pg" country="Papua New Guinea" operator="Bemobile Limited" status="Operational" - 02 bands="CDMA2000 450" cc="pg" country="Papua New Guinea" operator="Telikom PNG Ltd." status="Operational" + 02 bands="CDMA2000 450" brand="citifon" cc="pg" country="Papua New Guinea" operator="Telikom PNG Ltd." status="Operational" 03 bands="GSM 900 / UMTS 900 / LTE 700" brand="Digicel" cc="pg" country="Papua New Guinea" operator="Digicel PNG" status="Operational" 00-99 539 @@ -1978,7 +2016,7 @@ 01 bands="GSM 900" brand="Telecom Niue" cc="nu" country="Niue" operator="Telecom Niue" status="Operational" 00-99 602 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobinil" cc="eg" country="Egypt" operator="ECMS-Mobinil" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="eg" country="Egypt" operator="Orange Egypt" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodafone" cc="eg" country="Egypt" operator="Vodafone Egypt" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="eg" country="Egypt" operator="Etisalat Egypt" status="Operational" 00-99 @@ -1994,9 +2032,9 @@ 05 bands="GSM 900 / GSM 1800 / LTE 1800" brand="INWI (Telecommunications)" cc="ma" country="Morocco" operator="WANA - Groupe ONA" status="Operational" 00-99 605 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tunicell" cc="tn" country="Tunisia" operator="Tunisie Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="ooredoo Tunisiana" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tunicell" cc="tn" country="Tunisia" operator="Tunisie Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="ooredoo Tunisiana" status="Operational" 00-99 606 00 bands="GSM900 / GSM 1800 / UMTS 2100" brand="Libyana" cc="ly" country="Libya" operator="Libyana" status="Operational" @@ -2007,7 +2045,7 @@ 00-99 607 01 bands="GSM 900 / GSM 1900" brand="Gamcel" cc="gm" country="Gambia" operator="Gamcel" status="Operational" - 02 bands="GSM 900 / GSM 1900" brand="Africel" cc="gm" country="Gambia" operator="Africel" status="Operational" + 02 bands="GSM 900 / GSM 1900" brand="Africell" cc="gm" country="Gambia" operator="Africell" status="Operational" 03 bands="GSM 900 / GSM 1900" brand="Comium" cc="gm" country="Gambia" operator="Comium" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="QCell" cc="gm" country="Gambia" operator="QCell Gambia" status="Operational" 00-99 @@ -2027,7 +2065,7 @@ 02 bands="GSM 900" brand="Orange" cc="ml" country="Mali" operator="Orange Mali SA" status="Operational" 00-99 611 - 01 bands="GSM 900 / GSM 1800" brand="Orange S.A." cc="gn" country="Guinea" operator="Orange" status="Operational" + 01 bands="GSM 900 / GSM 1800" brand="Orange" cc="gn" country="Guinea" operator="Orange S.A." status="Operational" 02 bands="GSM 900" brand="Sotelgui" cc="gn" country="Guinea" operator="Sotelgui Lagui" status="Operational" 03 bands="GSM 900" brand="Telecel Guinee" cc="gn" country="Guinea" operator="INTERCEL Guinée" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="MTN" cc="gn" country="Guinea" operator="Areeba Guinea" status="Operational" @@ -2073,9 +2111,9 @@ 00-99 618 01 bands="GSM 900" brand="Lonestar Cell" cc="lr" country="Liberia" operator="Lonestar Communications Corporation" status="Operational" - 02 bands="" brand="Libercell" cc="lr" country="Liberia" operator="Atlantic Wireless (Liberia) Inc." status="Operational" - 04 bands="GSM 900" brand="Comium" cc="lr" country="Liberia" operator="Comium Liberia" status="Operational" - 07 bands="GSM 900 / GSM 1800" brand="Cellcom" cc="lr" country="Liberia" operator="Cellcom Telecommunications, Inc" status="Operational" + 02 bands="" brand="Libercell" cc="lr" country="Liberia" operator="Atlantic Wireless (Liberia) Inc." status="Not operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Novafone" cc="lr" country="Liberia" operator="Novafone Inc." status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Cellcom" cc="lr" country="Liberia" operator="Cellcom Telecommunications, Inc." status="Operational" 20 bands="CDMA2000" brand="LIBTELCO" cc="lr" country="Liberia" operator="Liberia Telecommunications Corporation" status="Operational" 00-99 619 @@ -2091,8 +2129,8 @@ 50 bands="CDMA" cc="sl" country="Sierra Leone" operator="Datatel (SL) Ltd." status="" 00-99 620 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="MTN" cc="gh" country="Ghana" operator="MTN Group" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS" brand="Vodafone" cc="gh" country="Ghana" operator="Vodafone Group" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="MTN" cc="gh" country="Ghana" operator="MTN Group" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS / LTE 1800" brand="Vodafone" cc="gh" country="Ghana" operator="Vodafone Group" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS" brand="tiGO" cc="gh" country="Ghana" operator="Millicom Ghana" status="Operational" 04 bands="CDMA2000" brand="Expresso" cc="gh" country="Ghana" operator="Kasapa / Hutchison Telecom" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="gh" country="Ghana" operator="Airtel" status="Operational" @@ -2108,15 +2146,15 @@ 25 bands="CDMA2000 800 / CDMA2000 1900" brand="Visafone" cc="ng" country="Nigeria" operator="Visafone Communications Ltd." status="Operational" 26 bands="TD-LTE 2300" cc="ng" country="Nigeria" operator="Swift" status="Operational" 27 bands="LTE 800" brand="Smile" cc="ng" country="Nigeria" operator="Smile Communications Nigeria" status="Operational" - 30 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" - 40 bands="GSM 900 / GSM 1800" brand="M-Tel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Not operational" + 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" + 40 bands="LTE 900 / LTE 1800" brand="Ntel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Operational" 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Glo" cc="ng" country="Nigeria" operator="Globacom Ltd" status="Operational" 60 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" 00-99 622 01 bands="GSM 900 / UMTS" brand="Airtel" cc="td" country="Chad" operator="Bharti Airtel SA" status="Operational" 02 bands="CDMA2000" brand="Tawali" cc="td" country="Chad" operator="SotelTchad" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS" brand="Tigo" cc="td" country="Chad" operator="Millicom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS / LTE 2600" brand="Tigo" cc="td" country="Chad" operator="Millicom" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="Salam" cc="td" country="Chad" operator="SotelTchad" status="Operational" 00-99 623 @@ -2128,7 +2166,7 @@ 624 01 bands="GSM 900" brand="MTN Cameroon" cc="cm" country="Cameroon" operator="Mobile Telephone Network Cameroon Ltd" status="Operational" 02 bands="GSM 900" brand="Orange" cc="cm" country="Cameroon" operator="Orange Cameroun S.A." status="Operational" - 04 bands="" brand="Nexttel" cc="cm" country="Cameroon" operator="Nexttel" status="Operational" + 04 bands="" brand="Nexttel" cc="cm" country="Cameroon" operator="Nexttel" status="Not operational" 00-99 625 01 bands="GSM 900 / UMTS" brand="CVMOVEL" cc="cv" country="Cape Verde" operator="CVMóvel, S.A." status="Operational" @@ -2155,11 +2193,11 @@ 00-99 630 01 bands="GSM 900 / GSM 1800 / UMTS" brand="Vodacom" cc="cd" country="Democratic Republic of the Congo" operator="Vodacom Congo RDC sprl" status="Operational" - 02 bands="GSM 900 / UMTS" brand="airtel" cc="cd" country="Democratic Republic of the Congo" operator="Airtel sprl" status="Operational" + 02 bands="GSM 900 / UMTS" brand="Airtel" cc="cd" country="Democratic Republic of the Congo" operator="Airtel sprl" status="Operational" 04 bands="" cc="cd" country="Democratic Republic of the Congo" operator="Cellco" status="" 05 bands="GSM 900 / GSM 1800" brand="Supercell" cc="cd" country="Democratic Republic of the Congo" operator="Supercell SPRL" status="Operational" - 10 bands="" brand="Libertis Telecom" cc="cd" country="Democratic Republic of the Congo" status="Operational" - 86 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="cd" country="Democratic Republic of the Congo" operator="Orange RDC sarl" status="Operational" + 10 bands="GSM" brand="MTN" cc="cd" country="Democratic Republic of the Congo" status="Operational" + 86 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange S.A." cc="cd" country="Democratic Republic of the Congo" operator="Orange RDC sarl" status="Operational" 88 bands="GSM 900 / GSM 1800" brand="YTT" cc="cd" country="Democratic Republic of the Congo" operator="Yozma Timeturns sprl" status="Not operational" 89 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tigo" cc="cd" country="Democratic Republic of the Congo" operator="OASIS sprl" status="Operational" 90 bands="GSM 900 / GSM 1800" brand="Africell" cc="cd" country="Democratic Republic of the Congo" operator="Africell RDC sprl" status="Operational" @@ -2180,10 +2218,10 @@ 10 bands="GSM 900 / UMTS 2100 / LTE 800" brand="Airtel" cc="sc" country="Seychelles" operator="Telecom Seychelles Ltd" status="Operational" 00-99 634 - 01 bands="GSM 900 / UMTS 2100" brand="Zain SD" cc="sd" country="Sudan" operator="Zain Group - Sudan" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Zain SD" cc="sd" country="Sudan" operator="Zain Group - Sudan" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="sd" country="Sudan" operator="MTN Sudan" status="Operational" 03 bands="" brand="MTN" cc="sd" country="Sudan" operator="MTN Sudan" status="" - 05 bands="CDMA2000 450" brand="Canar Telecom" cc="sd" country="Sudan" status="Operational" + 05 bands="CDMA2000 450" brand="canar" cc="sd" country="Sudan" operator="Canar Telecom" status="Operational" 07 bands="GSM 1800 / UMTS 2100 / CDMA2000 800" brand="Sudani One" cc="sd" country="Sudan" operator="Sudatel Group" status="Operational" 09 brand="Privet Network" cc="sd" country="Sudan" operator="NEC" status="" 00-99 @@ -2196,7 +2234,7 @@ 17 bands="LTE 800" brand="Olleh" cc="rw" country="Rwanda" operator="Olleh Rwanda Networks" status="Operational" 00-99 636 - 01 bands="GSM 900 / GSM 1800 / UMTS 21000" brand="ETH-MTN" cc="et" country="Ethiopia" operator="Ethio Telecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN" cc="et" country="Ethiopia" operator="Ethio Telecom" status="Operational" 00-99 637 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telesom" cc="so" country="Somalia" operator="Telesom" status="Operational" @@ -2205,7 +2243,7 @@ 30 bands="GSM 900" brand="Golis" cc="so" country="Somalia" operator="Golis Telecom Somalia" status="Operational" 50 bands="GSM 900 / UMTS" brand="Hormuud" cc="so" country="Somalia" operator="Hormuud Telecom Somalia Inc" status="Operational" 57 bands="GSM 900 / GSM 1800" brand="UNITEL" cc="so" country="Somalia" operator="UNITEL S.a.r.l." status="Operational" - 60 bands="GSM 900 / GSM 1800" brand="Nationlink Telecom" cc="so" country="Somalia" operator="Nationlink Telecom" status="Operational" + 60 bands="GSM 900 / GSM 1800" brand="Nationlink" cc="so" country="Somalia" operator="Nationlink Telecom" status="Operational" 67 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Horntel Group" cc="so" country="Somalia" operator="HTG Group Somalia" status="Operational" 70 bands="" cc="so" country="Somalia" operator="Onkod Telecom Ltd." status="Not operational" 71 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Somtel" cc="so" country="Somalia" operator="Somtel" status="Operational" @@ -2222,9 +2260,9 @@ 00-99 640 01 bands="" cc="tz" country="Tanzania" operator="Rural NetCo Limited" status="" - 02 bands="GSM 900 / GSM 1800" brand="tiGO" cc="tz" country="Tanzania" operator="MIC Tanzania Limited" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Zantel" cc="tz" country="Tanzania" operator="Zanzibar Telecom Ltd" status="Operational" - 04 bands="GSM 900 / GSM 1800" brand="Vodacom" cc="tz" country="Tanzania" operator="Vodacom Tanzania Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / LTE 800" brand="tiGO" cc="tz" country="Tanzania" operator="MIC Tanzania Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Zantel" cc="tz" country="Tanzania" operator="Zanzibar Telecom Ltd" status="Operational" + 04 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Vodacom" cc="tz" country="Tanzania" operator="Vodacom Tanzania Limited" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="Airtel" cc="tz" country="Tanzania" operator="Bharti Airtel" status="Operational" 06 bands="CDMA" brand="Sasatel" cc="tz" country="Tanzania" operator="Dovetel Limited" status="Operational" 07 bands="CDMA 800" brand="TTCL Mobile" cc="tz" country="Tanzania" operator="Tanzania Telecommunication Company LTD (TTCL)" status="Operational" @@ -2237,7 +2275,7 @@ 01 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" 06 bands="TD-LTE 2600" brand="Vodafone" cc="ug" country="Uganda" operator="Afrimax Uganda" status="Operational" 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="MTN" cc="ug" country="Uganda" operator="MTN Uganda" status="Operational" - 11 bands="GSM 900 / UMTS 2100" brand="UTL" cc="ug" country="Uganda" operator="Uganda Telecom Ltd." status="Operational" + 11 bands="GSM 900 / UMTS 2100" brand="Uganda Telecom" cc="ug" country="Uganda" operator="Uganda Telecom Ltd." status="Operational" 14 bands="GSM 900 / GSM 1800 / UMTS / LTE 800" brand="Africell" cc="ug" country="Uganda" operator="Africell Uganda" status="Operational" 18 bands="GSM 900 / GSM 1800" cc="ug" country="Uganda" operator="Suretelecom" status="Operational" 22 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" @@ -2249,7 +2287,7 @@ 00-99 642 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Spacetel" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" - 02 bands="GSM 900" brand="Tempo" cc="bi" country="Burundi" operator="Africell PLC" status="Operational" + 02 bands="GSM 900" brand="Tempo" cc="bi" country="Burundi" operator="VTEL MEA" status="Not operational" 03 bands="GSM 900" brand="Onatel" cc="bi" country="Burundi" operator="Onatel" status="Operational" 07 bands="GSM 1800 / UMTS" brand="Smart Mobile" cc="bi" country="Burundi" operator="LACELL SU" status="Operational" 08 bands="" brand="HiTs Telecom" cc="bi" country="Burundi" operator="HiTs Telecom" status="Not operational" @@ -2257,12 +2295,12 @@ 00-99 643 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="mCel" cc="mz" country="Mozambique" operator="Mocambique Celular S.A." status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Movitel" cc="mz" country="Mozambique" operator="Movitel S.A." status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Movitel" cc="mz" country="Mozambique" operator="Movitel, SA" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Vodacom" cc="mz" country="Mozambique" operator="Vodacom Mozambique, S.A." status="Operational" 00-99 645 01 bands="GSM 900" brand="Airtel" cc="zm" country="Zambia" operator="Bharti Airtel" status="Operational" - 02 bands="GSM 900" brand="MTN" cc="zm" country="Zambia" operator="MTN Group" status="Operational" + 02 bands="GSM 900 / LTE 1800" brand="MTN" cc="zm" country="Zambia" operator="MTN Group" status="Operational" 03 bands="GSM 900" brand="ZAMTEL" cc="zm" country="Zambia" operator="Zambia Telecommunications Company Ltd" status="Operational" 00-99 646 @@ -2280,7 +2318,7 @@ 648 01 bands="GSM 900" brand="Net*One" cc="zw" country="Zimbabwe" operator="Net*One Cellular (Pvt) Ltd" status="Operational" 03 bands="GSM 900" brand="Telecel" cc="zw" country="Zimbabwe" operator="Telecel Zimbabwe (PVT) Ltd" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Econet" cc="zw" country="Zimbabwe" operator="Econet Wireless (Private) Limited" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Econet" cc="zw" country="Zimbabwe" operator="Econet Wireless" status="Operational" 00-99 649 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="MTC" cc="na" country="Namibia" operator="MTC Namibia" status="Operational" @@ -2294,12 +2332,12 @@ 10 bands="GSM 900" brand="Airtel" cc="mw" country="Malawi" operator="Bharti Airtel Limited" status="Operational" 00-99 651 - 01 bands="GSM 900" brand="Vodacom" cc="ls" country="Lesotho" operator="Vodacom Lesotho (Pty) Ltd" status="Operational" - 02 bands="" cc="ls" country="Lesotho" operator="Econet Ezi-cel" status="Operational" + 01 bands="GSM 900 / LTE 800" brand="Vodacom" cc="ls" country="Lesotho" operator="Vodacom Lesotho (Pty) Ltd" status="Operational" + 02 bands="GSM / UMTS" brand="Econet Telecom" cc="ls" country="Lesotho" operator="Econet Ezi-cel" status="Operational" 00-99 652 01 bands="GSM 900 / UMTS" brand="Mascom" cc="bw" country="Botswana" operator="Mascom Wireless (Pty) Limited" status="Operational" - 02 bands="GSM 900 / UMTS 2100" brand="Orange" cc="bw" country="Botswana" operator="Orange (Botswana) Pty Limited" status="Operational" + 02 bands="GSM 900" brand="Bip" cc="mg" country="Madagascar" operator="Bip Madagascar S.A." status="Operational" 04 bands="GSM 900 / GSM 1800" brand="BTC Mobile" cc="bw" country="Botswana" operator="Botswana Telecommunications Corporation" status="Operational" 00-99 653 @@ -2314,7 +2352,7 @@ 02 bands="GSM 1800 / UMTS 2100 / TD-LTE 2300" brand="Telkom" cc="za" country="South Africa" operator="Telkom SA Ltd" status="Operational" 04 bands="" cc="za" country="South Africa" operator="Sasol (Pty) Ltd." status="" 06 bands="" cc="za" country="South Africa" operator="Sentech (Pty) Ltd" status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Cell C" cc="za" country="South Africa" operator="Cell C (Pty) Ltd" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 1800 / LTE 2100" brand="Cell C" cc="za" country="South Africa" operator="Cell C (Pty) Ltd" status="Operational" 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="Operational" 11 bands="TETRA 410" cc="za" country="South Africa" operator="South African Police Service Gauteng" status="Operational" 12 bands="" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="" @@ -2322,11 +2360,12 @@ 14 bands="LTE 1800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" 16 bands="" cc="za" country="South Africa" operator="Phoenix System Integration (Pty) Ltd" status="Not operational" 17 bands="" cc="za" country="South Africa" operator="Sishen Iron Ore Company (Ltd) Pty" status="" - 19 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" + 19 bands="TD-LTE" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="Operational" 21 bands="TETRA 410" cc="za" country="South Africa" operator="Cape Town Metropolitan Council" status="Operational" - 24 bands="" cc="za" country="South Africa" operator="SMS Portal (Pty) Ltd." status="" + 24 bands="" cc="za" country="South Africa" operator="SMSPortal (Pty) Ltd." status="" 25 bands="" cc="za" country="South Africa" operator="Wirels Connect" status="" 27 bands="" cc="za" country="South Africa" operator="A to Z Vaal Industrial Supplies Pty Ltd" status="" + 28 bands="" cc="za" country="South Africa" operator="Hymax Talking Solutions (Pty) Ltd" status="" 30 bands="" cc="za" country="South Africa" operator="Bokamoso Consortium" status="Operational" 31 bands="" cc="za" country="South Africa" operator="Karabo Telecoms (Pty) Ltd." status="Operational" 32 bands="" cc="za" country="South Africa" operator="Ilizwi Telecommunications" status="Operational" @@ -2379,14 +2418,14 @@ 710 21 bands="UMTS 850 / GSM 1900" brand="Claro" cc="ni" country="Nicaragua" operator="Empresa Nicaragüense de Telecomunicaciones, S.A. (ENITEL) (América Móvil)" status="Operational" 30 bands="UMTS 850 / GSM 850 / GSM 1900" brand="movistar" cc="ni" country="Nicaragua" operator="Telefonía Celular de Nicaragua, S.A. (Telefónica, S.A.)" status="Operational" - 73 bands="UMTS 850 / GSM 1900" brand="SERCOM" cc="ni" country="Nicaragua" operator="Servicios de Comunicaciones S.A." status="Operational" + 73 bands="UMTS 850 / GSM 1900" brand="Claro" cc="ni" country="Nicaragua" operator="Servicios de Comunicaciones S.A." status="Operational" 00-99 712 01 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" 02 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" 03 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Claro" cc="cr" country="Costa Rica" operator="Claro CR Telecomunicaciones (Aló)" status="Operational" 04 bands="GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="movistar" cc="cr" country="Costa Rica" operator="Telefónica Móviles Costa Rica" status="Operational" - 20 bands="GSM 1800 / UMTS 850" brand="'full'móvil" cc="cr" country="Costa Rica" operator="Virtualis S.A." status="Operational" + 20 bands="GSM 1800 / UMTS 850" brand="fullmóvil" cc="cr" country="Costa Rica" operator="Virtualis S.A." status="Operational" 00-99 714 01 bands="GSM 850 / UMTS 850 / LTE 700" brand="Cable & Wireless" cc="pa" country="Panama" operator="Cable & Wireless Panama S.A." status="Operational" @@ -2396,10 +2435,10 @@ 00-99 716 06 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" - 07 bands="iDEN / UMTS 1900" brand="NEXTEL" cc="pe" country="Peru" operator="Americatel Perú" status="Inactive" - 10 bands="GSM 1900 / UMTS 850 / LTE 1900" brand="Claro (TIM)" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" + 07 bands="iDEN" brand="Entel" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" + 10 bands="GSM 1900 / UMTS 850 / LTE 1900" brand="Claro" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" 15 bands="GSM 1900 / UMTS 1900" brand="Viettel Mobile" cc="pe" country="Peru" operator="Viettel Peru S.A.C." status="Operational" - 17 bands="iDEN / UMTS 1900" brand="NEXTEL" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" + 17 bands="UMTS 1900" brand="Entel" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" 00-99 722 010 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" @@ -2411,7 +2450,7 @@ 320 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 330 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 341 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" - 350 bands="GSM 900" brand="PORT-HABLE" cc="ar" country="Argentina" operator="Hutchison Telecommunications Argentina S.A." status="Operational" + 350 bands="GSM 900" brand="PORT-HABLE" cc="ar" country="Argentina" operator="Hutchison Telecommunications Argentina S.A." status="Not operational" 000-999 724 00 bands="iDEN 850" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Operational" @@ -2419,13 +2458,13 @@ 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Claro BR" cc="br" country="Brazil" operator="Claro" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Claro" cc="br" country="Brazil" operator="Claro" status="Operational" 06 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 10 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 11 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 15 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Sercomtel" cc="br" country="Brazil" operator="Sercomtel Celular" status="Operational" 16 bands="GSM 1800 / UMTS 2100" brand="Brasil Telecom GSM" cc="br" country="Brazil" operator="Brasil Telecom GSM" status="Not operational" - 18 bands="MVNO" cc="br" country="Brazil" operator="Datora (Vodafone)" status="Operational" + 18 bands="MVNO" brand="datora" cc="br" country="Brazil" operator="Datora (Vodafone)" status="Operational" 23 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 24 bands="" cc="br" country="Brazil" operator="Amazonia Celular" status="" 30 bands="" brand="Oi" cc="br" country="Brazil" operator="TNL PCS Oi" status="" @@ -2436,9 +2475,9 @@ 35 bands="" cc="br" country="Brazil" operator="Telcom Telecomunicações" status="" 36 bands="" cc="br" country="Brazil" operator="Options Telecomunicações" status="" 37 bands="" brand="aeiou" cc="br" country="Brazil" operator="Unicel" status="Not operational" - 38 bands="" brand="Claro BR" cc="br" country="Brazil" operator="Claro" status="" + 38 bands="" brand="Claro" cc="br" country="Brazil" operator="Claro" status="" 39 bands="UMTS 2100 / LTE 1800" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Operational" - 54 bands="MVNO" cc="br" country="Brazil" operator="PORTO SEGURO TELECOMUNICAÇÔES" status="Operational" + 54 bands="MVNO" brand="Conecta" cc="br" country="Brazil" operator="PORTO SEGURO TELECOMUNICAÇÔES" status="Operational" 99 bands="" brand="Local" cc="br" country="Brazil" operator="Local ( purpose or usage)" status="" 00-99 730 @@ -2459,14 +2498,16 @@ 15 bands="" cc="cl" country="Chile" operator="Cibeles Telecom S.A." status="" 16 bands="MVNO" cc="cl" country="Chile" operator="Nomade Telecomunicaciones S.A." status="" 17 bands="" cc="cl" country="Chile" operator="COMPATEL Chile Limitada" status="" + 18 bands="" cc="cl" country="Chile" operator="Empresas Bunker S.A." status="" + 19 bands="MVNO" brand="móvil Falabella" cc="cl" country="Chile" operator="Sociedad Falabella Móvil SPA" status="Operational" 99 bands="GSM 1900 / UMTS 1900" brand="Will" cc="cl" country="Chile" operator="WILL Telefonía" status="Operational" 00-99 732 001 bands="" brand="movistar" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A. ESP" status="Operational" - 002 bands="" brand="Edatel" cc="co" country="Colombia" operator="Edatel S.A. ESP" status="Operational" + 002 bands="" brand="Edatel" cc="co" country="Colombia" operator="Edatel S.A. ESP" status="" 003 bands="" cc="co" country="Colombia" operator="LLEIDA S.A.S." status="" 004 bands="" cc="co" country="Colombia" operator="COMPATEL COLOMBIA SAS" status="" - 020 bands="LTE 2600" brand="Une-EPM" cc="co" country="Colombia" operator="Une EPM Telecomunicaciones S.A. E.S.P." status="Operational" + 020 bands="LTE 2600" brand="Tigo" cc="co" country="Colombia" operator="Une EPM Telecomunicaciones S.A. E.S.P." status="Operational" 099 bands="GSM 900" brand="EMCALI" cc="co" country="Colombia" operator="Empresas Municipales de Cali" status="Operational" 101 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Claro" cc="co" country="Colombia" operator="COMCEL S.A." status="Operational" 102 bands="GSM 850 / GSM 1900 / CDMA 850" cc="co" country="Colombia" operator="Bellsouth Colombia" status="Not operational" @@ -2475,10 +2516,10 @@ 123 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700 / CDMA 850" brand="movistar" cc="co" country="Colombia" operator="Colombia Telecomunicaciones S.A. ESP" status="Operational" 130 bands="GSM 850 / iDEN / LTE 1700" brand="AVANTEL" cc="co" country="Colombia" operator="Avantel S.A.S" status="Operational" 142 bands="" cc="co" country="Colombia" operator="Une EPM Telecomunicaciones S.A. E.S.P." status="" - 154 bands="MVNO" cc="co" country="Colombia" operator="Virgin Mobile Colombia S.A.S." status="Operational" + 154 bands="MVNO" brand="Virgin Mobile" cc="co" country="Colombia" operator="Virgin Mobile Colombia S.A.S." status="Operational" 165 bands="" cc="co" country="Colombia" operator="Colombia Móvil S.A. ESP" status="" 176 bands="TD-LTE 2600" cc="co" country="Colombia" operator="DirecTV Colombia Ltda" status="Operational" - 187 bands="LTE 1700" cc="co" country="Colombia" operator="Empresa de Telecomunicaciones de Bogotá S.A. ESP" status="Operational" + 187 bands="LTE 1700" brand="eTb" cc="co" country="Colombia" operator="Empresa de Telecomunicaciones de Bogotá S.A. ESP" status="Operational" 000-999 734 01 bands="GSM 900" brand="Digitel" cc="ve" country="Venezuela" operator="Corporacion Digitel C.A." status="Not operational" @@ -2505,16 +2546,16 @@ 00-99 744 01 bands="GSM 1900 / UMTS 900" brand="VOX" cc="py" country="Paraguay" operator="Hola Paraguay S.A" status="Operational" - 02 bands="GSM 1900 / UMTS 1900" brand="Claro/Hutchison" cc="py" country="Paraguay" operator="AMX Paraguay S.A." status="Operational" + 02 bands="GSM 1900 / UMTS 1900 / LTE 1700" brand="Claro/Hutchison" cc="py" country="Paraguay" operator="AMX Paraguay S.A." status="Operational" 03 bands="" cc="py" country="Paraguay" operator="Compañia Privada de Comunicaciones S.A." status="" - 04 bands="GSM 850 / UMTS 850" brand="Tigo" cc="py" country="Paraguay" operator="Telefónica Celular Del Paraguay S.A. (Telecel)" status="Operational" + 04 bands="GSM 850 / UMTS 850 / LTE 1700" brand="Tigo" cc="py" country="Paraguay" operator="Telefónica Celular Del Paraguay S.A. (Telecel)" status="Operational" 05 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1900" brand="Personal" cc="py" country="Paraguay" operator="Núcleo S.A(TIM)" status="Operational" 06 bands="GSM 1800 / LTE 1700" brand="Copaco" cc="py" country="Paraguay" operator="Copaco S.A." status="Operational" 00-99 746 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" - 04 bands="GSM 900 / UMTS" brand="Uniqa" cc="sr" country="Suriname" operator="Intelsur N.V. / UTS N.V." status="Operational" + 04 bands="GSM 900 / UMTS" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" 05 bands="CDMA 450" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="" 00-99 748 diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index 103e27a9..49e57c3d 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,7 +1,7 @@ # generated from RangeMessage.xml, downloaded from # https://www.isbn-international.org/export_rangemessage.xml -# file serial 91da4d76-b504-4412-94e1-741f2d6bbbe8 -# file date Wed, 2 Mar 2016 17:53:37 CET +# file serial 06b89123-0e43-4b34-92ef-de9637e6f095 +# file date Mon, 25 Jul 2016 18:49:43 CEST 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" @@ -19,9 +19,9 @@ 00-19,200-699,7000-8499,85000-89999,900000-949999,9500000-9999999 5 agency="former U.S.S.R" 00000-00499,0050-0099,01-19,200-420,4210-4299,430-430,4310-4399,440-440 - 4410-4499,450-699,7000-8499,85000-89999,900000-909999,91000-91999 - 9200-9299,93000-94999,9500000-9500999,9501-9799,98000-98999 - 9900000-9909999,9910-9999 + 4410-4499,450-603,6040000-6049999,605-699,7000-8499,85000-89999 + 900000-909999,91000-91999,9200-9299,93000-94999,9500000-9500999 + 9501-9799,98000-98999,9900000-9909999,9910-9999 600 agency="Iran" 00-09,100-499,5000-8999,90000-99999 601 agency="Kazakhstan" @@ -79,8 +79,8 @@ 00-13,140-149,15000-19999,200-699,7000-8499,85000-89999,9000-9199 920000-923999,92400-92999,930000-949999,95000-96999,9700-9999 85 agency="Brazil" - 00-19,200-549,5500-5999,60000-69999,7000-8499,85000-89999,900000-959999 - 96-97,98000-99999 + 00-19,200-549,5500-5999,60000-69999,7000-8499,85000-89999,900000-924999 + 92500-94499,9450-9599,96-97,98000-99999 86 agency="former Yugoslavia" 00-29,300-599,6000-7999,80000-89999,900000-999999 87 agency="Denmark" @@ -473,6 +473,8 @@ 0-1,20-59,600-799 99977 agency="Rwanda" 0-1,40-69,700-799 + 99978 agency="Mongolia" + 0-4,50-79,800-999 979 10-12 10 agency="France" diff --git a/stdnum/isil.dat b/stdnum/isil.dat index 79859301..2d2dff2c 100644 --- a/stdnum/isil.dat +++ b/stdnum/isil.dat @@ -1,5 +1,6 @@ # generated from ISIL Registration Authority, downloaded from # http://biblstandard.dk/isil/ +O$ ra="See OCLC" US$ country="United States of America" ra_url="http://www.loc.gov/marc/organizations/" ra="Library of Congress" AR$ country="Argentine Republic" ra_url="http://www.iram.org.ar" ra="Argentine Standardization and Certification Institute (IRAM)" AT$ country="Austria" ra_url="http://www.obvsg.at" ra="Die Österreichische Bibliothekenverbund und Service GmbH" @@ -10,7 +11,7 @@ CA$ country="Canada" ra_url="http://www.collectionscanada.ca/ill/s16-206-e.html# CH$ country="Switzerland" ra_url="http://www.nb.admin.ch/slb/slb_professionnel/01540/index.html?lang=en" ra="Swiss National Library" CY$ country="Cyprus" ra_url="http://library.cut.ac.cy/en/isil" ra="Cyprus University of Technology Library" DE$ country="Germany" ra_url="http://sigel.staatsbibliothek-berlin.de/" ra="Staatsbibliothek zu Berlin" -DK$ country="Denmark" ra_url="http://www.kulturstyrelsen.dk/english/institutions/libraries/national-solutions/standards/danish-library-number/" ra="Danish Agency for Culture" +DK$ country="Denmark" ra_url="http://www.kulturstyrelsen.dk/english/institutions/libraries/national-solutions/standards/danish-library-number/" ra="Danish Agency for Culture and Palaces" EG$ country="Egypt" ra_url="http://www.sti.sci.eg/index.php?option=com_content&view=article&id=30:focal-point&catid=1:pages&Itemid=56" ra="Egyptian National Scientific and Technical Information Network (ENSTINET)" FI$ country="Finland" ra_url="http://www.nationallibrary.fi/libraries/standards/isil.html" ra="The National Library of Finland" FR$ country="France" ra_url="http://www.abes.fr" ra="Agence Bibliographique de l'Enseignement Superieur" @@ -29,6 +30,6 @@ QA$ country="Qatar" ra_url="http://www.qnl.qa/" ra="Qatar National Library (QNL) RU$ country="Russian Federation" ra_url="http://english.gpntb.ru/" ra="Russian National Public Library for Science and Technology" SI$ country="The Republic of Slovenia" ra_url="http://www.nuk.uni-lj.si/nukeng3.asp?id=311364382" ra="National and University Library" SK$ country="Slovak Republic" ra_url="http://www.snk.sk/en/information-for/libraries-and-librarians/isil.html" ra="Slovak National Library" -O$ ra="See OCLC" +EUR$ country="Code for common European organizations." ra_url="http://www.eui.eu/Research/HistoricalArchivesOfEU/FindingAidsAndResearch/HAEU-Non-national-ISIL-Allocation-Agency.aspx" ra="HAEU" OCLC$ country="WorldCat Symbol" ra_url="http://www.oclc.org" ra="OCLC" ZDB$ country="Staatsbibliothek zu Berlin - Zeitschriftendatenbank" ra="Staatsbibliothek zu Berlin" From 01a7f34edc5d09d800f43e4fee966b2e7ea6ad3e Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 26 Jul 2016 23:33:48 +0200 Subject: [PATCH 114/654] Get files ready for 1.4 release --- ChangeLog | 199 ++++++++++++++++++++++++++++++++++++ NEWS | 19 ++++ README | 10 +- docs/index.rst | 6 ++ docs/stdnum.damm.rst | 5 + docs/stdnum.fr.nif.rst | 5 + docs/stdnum.fr.nir.rst | 5 + docs/stdnum.fr.siret.rst | 5 + docs/stdnum.gb.nhs.rst | 5 + docs/stdnum.tr.tckimlik.rst | 5 + stdnum/__init__.py | 10 +- 11 files changed, 270 insertions(+), 4 deletions(-) create mode 100644 docs/stdnum.damm.rst create mode 100644 docs/stdnum.fr.nif.rst create mode 100644 docs/stdnum.fr.nir.rst create mode 100644 docs/stdnum.fr.siret.rst create mode 100644 docs/stdnum.gb.nhs.rst create mode 100644 docs/stdnum.tr.tckimlik.rst diff --git a/ChangeLog b/ChangeLog index a78944c1..412b3ad4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,202 @@ +2016-07-26 Arthur de Jong + + * [3e4e9e2] getmybp.py, stdnum/cn/loc.dat, stdnum/iban.dat, + stdnum/imsi.dat, stdnum/isbn.dat, stdnum/isil.dat: Update + database files + + This also updates the getmybp script to support the new layout. + +2016-07-26 Arthur de Jong + + * [3e344d1] stdnum/iso6346.py: Add formatting of ISO 6346 container + codes + +2016-07-26 Arthur de Jong + + * [aa1c298] getnumlist.py, stdnum/damm.py, tests/test_damm.doctest: + Implement Damm algorithm + + This is a generic check digit algorithm. 2016-07-26 Arthur de +Jong + + * [411d038] stdnum/fr/nif.py: Fix French NIF format test + + Fixes 2409ee9. 2016-07-26 Arthur de Jong + + + * [06e4165] stdnum/ch/ssn.py: Improve validation to Swiss SSN number + + The EAN-13 number should start with 756. + +2016-07-26 Arthur de Jong + + * [1907c67] stdnum/br/cpf.py: Add documentation to Brazillian CPF + +2016-07-26 Arthur de Jong + + * [cf428ac] stdnum/iso6346.py: Add pointer to ISO 6346 information + +2016-07-26 Arthur de Jong + + * [011c0f0] stdnum/gb/nhs.py: Fix copyright notice + +2016-05-22 Dimitri Papadopoulos + + * [2409ee9] stdnum/fr/nif.py: Add NIF - French tax identification + number + + Add module for NIF also known as SPI number. + +2016-07-26 Arthur de Jong + + * [43b58d3] stdnum/fr/nir.py: Move NIR check digit calculation + to function + + This also fixes a number of formatting issues, improves the + module description and adds tests for the 2A and 2B departments. + +2016-05-29 Dimitri Papadopoulos + + * [879f2d3] stdnum/fr/nir.py: Improve French NIR validation + + Please note that the 7th character of the NIR might be 'A' or + 'B'. Other than that the NIR contains digits only. + +2016-07-25 Arthur de Jong + + * [fd9f953] stdnum/fr/siren.py, stdnum/fr/siret.py, + tests/test_fr_siren.doctest, tests/test_fr_siret.doctest: Add + extra tests for SIREN and SIRET + + This adds tests for a few numbers that have been found online + and allows the dot as a seprator because those numbers were found. + + It also ensures that the SIREN validation is also called for + SIRET and adds a SIRET formatting function. + +2016-05-27 Yoann Aubineau + + * [5ba3a87] stdnum/fr/siret.py: Add French SIRET number + + Add a SIRET (Système d'Identification du Répertoire des + ETablissements, a French company etablishment identification + number) module. + +2016-05-29 Arthur de Jong + + * [dc708f0] stdnum/isil.py, tests/test_isil.doctest: Add more + ISIL tests + + This moves a few of the tests from the module to a dedicated + test file and adds tests for a number of ISIL numbers found online. + +2016-05-29 Arthur de Jong + + * [4a57d84] stdnum/us/tin.py: Fix formatting of bulleted list + +2016-05-28 Arthur de Jong + + * [9b74840] stdnum/ch/ssn.py, tests/test_ch_ssn.doctest: Fix bug + in Swiss SSN validation + + The validation was delegated to the EAN module but the number + is supposed to be an EAN-13 only and and EAN-8 was also accepted. + + This also reformats the docstring. + +2016-05-28 Arthur de Jong + + * [f3c2491] stdnum/ie/vat.py, tests/test_ie_vat.doctest: Fix bug + in Irish VAT number validation + + The last digits of the number that should be letters were not + tested to be letters which could result in ValueError being + raised for certain validations. + + This also clarifies the documentation and adds a convert() + function to convert numbers from the old format (where the + second character would be a letter or symbol) to the new format + (7 digits followed by 1 or 2 letters). + +2016-05-28 Arthur de Jong + + * [b5397ed] tests/test_robustness.doctest: Small improvements + to tests + + This includes a formatting fix and removes an unused variable + from a test. + +2016-05-28 Arthur de Jong + + * [d85b27f] stdnum/util.py: Fix get_module_description() + + This fixes the initial implementation in 3f6d52a. + +2016-05-22 Dimitri Papadopoulos + + * [a1afa76] stdnum/fr/nir.py: Add French NIR + + Add module for NIR also known as social security number. + +2016-05-09 Arthur de Jong + + * [0a2f39e] stdnum/gb/nhs.py: Add United Kingdom NHS number + + Add module for United Kingdom National Health Service patient + identifier. + +2016-05-09 Arthur de Jong + + * [2126947] stdnum/numdb.py: Read numdb files in context manager + + This ensures that the file is explicitly closed in the function + to avoid "unclosed file" warnings. + + See: https://github.com/arthurdejong/python-stdnum/issues/33 + +2016-04-11 Arthur de Jong + + * [e28b5e1] stdnum/ch/uid.py, stdnum/ch/vat.py, stdnum/cusip.py, + stdnum/dk/cpr.py, stdnum/iban.py, stdnum/imei.py, stdnum/isbn.py, + stdnum/isil.py, stdnum/isin.py, stdnum/issn.py, stdnum/mx/rfc.py, + stdnum/nl/bsn.py, stdnum/nl/onderwijsnummer.py, stdnum/pl/regon.py, + stdnum/tr/tckimlik.py, stdnum/us/ssn.py, stdnum/verhoeff.py: + Make more information links consistent + + Also fix a docstring in stdnum.nl.bsn and add a pointer to + stdnum.nl.onderwijsnummer. + +2016-04-09 Arthur de Jong + + * [feab917] stdnum/eu/vat.py, stdnum/tr/tckimlik.py, stdnum/util.py: + Implement online TC Kimlik check + + This refactors out the SOAP client function that was implemented + for VIES to the stdnum.utils module. + +2016-04-09 Arthur de Jong + + * [619b097] stdnum/tr/__init__.py, stdnum/tr/tckimlik.py, + tests/test_tr_tckimlik.doctest: Add Turkish personal identification + number + +2016-04-01 Arthur de Jong + + * [095dcbb] stdnum/mx/rfc.py, tests/test_mx_rfc.doctest: Document + accuracy of RFC check digit test + + There is an online service that allows validating RFC numbers. It + seems there are a lot of numbers that do not match the check + digit algorithm which confirms disabling the check digit test + by default is a good idea. + + Also see https://github.com/arthurdejong/python-stdnum/issues/32 + +2016-03-05 Arthur de Jong + + * [41cecb5] ChangeLog, NEWS, getnumlist.py, setup.py, + stdnum/__init__.py: Get files ready for 1.3 release + 2016-03-03 Arthur de Jong * [6457734] getcnloc.py, getiban.py, stdnum/cn/loc.dat, diff --git a/NEWS b/NEWS index 50e94c4a..1f8261da 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,22 @@ +changes from 1.3 to 1.4 +----------------------- + +* add modules for the following number formats: + - NIF (Numéro d'Immatriculation Fiscale, French tax identification number) + provided by Dimitri Papadopoulos + - NIR (French personal identification number) provided by Dimitri + Papadopoulos + - SIRET (a French company establishment identification number) provided by + Yoann Aubineau + - NHS (United Kingdom National Health Service patient identifier) + - T.C. Kimlik No. (Turkish personal identification number) +* add an implementation of the Damm algorithm +* ensure data files are properly closed +* documentation improvements +* extend test suite +* a number of minor bug fixes and improvements + + changes from 1.2 to 1.3 ----------------------- diff --git a/README b/README index f9be19e0..4c8c8de0 100644 --- a/README +++ b/README @@ -50,8 +50,12 @@ Currently this package supports the following formats: * Finnish Association Identifier * HETU (Henkilötunnus, Finnish personal identity code) * Y-tunnus (Finnish business identifier) + * NIF (Numéro d'Immatriculation Fiscale, French tax identification number) + * NIR (French personal identification number) * SIREN (a French company identification number) + * SIRET (a French company establishment identification number) * n° TVA (taxe sur la valeur ajoutée, French VAT number) + * NHS (United Kingdom National Health Service patient identifier) * SEDOL number (Stock Exchange Daily Official List number) * VAT (United Kingdom (and Isle of Man) VAT registration number) * FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) @@ -60,7 +64,7 @@ Currently this package supports the following formats: * ANUM (Közösségi adószám, Hungarian VAT number) * IBAN (International Bank Account Number) * PPS No (Personal Public Service Number, Irish personal number) - * VAT (Irish VAT number) + * VAT (Irish tax reference number) * IMEI (International Mobile Equipment Identity) * IMO number (International Maritime Organization number) * IMSI (International Mobile Subscriber Identity) @@ -103,6 +107,7 @@ Currently this package supports the following formats: * IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) * RČ (Rodné číslo, the Slovak birth number) * COE (Codice operatore economico, San Marino national tax number) + * T.C. Kimlik No. (Turkish personal identification number) * ATIN (U.S. Adoption Taxpayer Identification Number) * EIN (U.S. Employer Identification Number) * ITIN (U.S. Individual Taxpayer Identification Number) @@ -114,6 +119,7 @@ Currently this package supports the following formats: Furthermore a number of generic check digit algorithms are available: * the Verhoeff algorithm + * the Damm algorithm * the Luhn and Luhn mod N algorithms * some algorithms described in ISO/IEC 7064: Mod 11, 2, Mod 37, 2, Mod 97, 10, Mod 11, 10 and Mod 37, 36 @@ -152,7 +158,7 @@ also work with older versions of Python. Copyright --------- -Copyright (C) 2010-2015 Arthur de Jong and others +Copyright (C) 2010-2016 Arthur de Jong and others This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public diff --git a/docs/index.rst b/docs/index.rst index 59df1d5f..b85a8e0a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -74,6 +74,7 @@ Generic check digit algorithms .. autosummary:: :toctree: + damm iso7064 luhn verhoeff @@ -126,8 +127,12 @@ Available formats fi.associationid fi.hetu fi.ytunnus + fr.nif + fr.nir fr.siren + fr.siret fr.tva + gb.nhs gb.sedol gb.vat gr.vat @@ -179,6 +184,7 @@ Available formats sk.dph sk.rc sm.coe + tr.tckimlik us.atin us.ein us.itin diff --git a/docs/stdnum.damm.rst b/docs/stdnum.damm.rst new file mode 100644 index 00000000..e4bb8657 --- /dev/null +++ b/docs/stdnum.damm.rst @@ -0,0 +1,5 @@ +stdnum.damm +=========== + +.. automodule:: stdnum.damm + :members: \ No newline at end of file diff --git a/docs/stdnum.fr.nif.rst b/docs/stdnum.fr.nif.rst new file mode 100644 index 00000000..33b76ac3 --- /dev/null +++ b/docs/stdnum.fr.nif.rst @@ -0,0 +1,5 @@ +stdnum.fr.nif +============= + +.. automodule:: stdnum.fr.nif + :members: \ No newline at end of file diff --git a/docs/stdnum.fr.nir.rst b/docs/stdnum.fr.nir.rst new file mode 100644 index 00000000..13ee2e77 --- /dev/null +++ b/docs/stdnum.fr.nir.rst @@ -0,0 +1,5 @@ +stdnum.fr.nir +============= + +.. automodule:: stdnum.fr.nir + :members: \ No newline at end of file diff --git a/docs/stdnum.fr.siret.rst b/docs/stdnum.fr.siret.rst new file mode 100644 index 00000000..a54ea588 --- /dev/null +++ b/docs/stdnum.fr.siret.rst @@ -0,0 +1,5 @@ +stdnum.fr.siret +=============== + +.. automodule:: stdnum.fr.siret + :members: \ No newline at end of file diff --git a/docs/stdnum.gb.nhs.rst b/docs/stdnum.gb.nhs.rst new file mode 100644 index 00000000..f1d97d44 --- /dev/null +++ b/docs/stdnum.gb.nhs.rst @@ -0,0 +1,5 @@ +stdnum.gb.nhs +============= + +.. automodule:: stdnum.gb.nhs + :members: \ No newline at end of file diff --git a/docs/stdnum.tr.tckimlik.rst b/docs/stdnum.tr.tckimlik.rst new file mode 100644 index 00000000..fd9f38c5 --- /dev/null +++ b/docs/stdnum.tr.tckimlik.rst @@ -0,0 +1,5 @@ +stdnum.tr.tckimlik +================== + +.. automodule:: stdnum.tr.tckimlik + :members: \ No newline at end of file diff --git a/stdnum/__init__.py b/stdnum/__init__.py index 8da7c353..d12dcd47 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -66,8 +66,12 @@ * fi.associationid: Finnish Association Identifier * fi.hetu: HETU (Henkilötunnus, Finnish personal identity code) * fi.ytunnus: Y-tunnus (Finnish business identifier) +* fr.nif: NIF (Numéro d'Immatriculation Fiscale, French tax identification number) +* fr.nir: NIR (French personal identification number) * fr.siren: SIREN (a French company identification number) +* fr.siret: SIRET (a French company establishment identification number) * fr.tva: n° TVA (taxe sur la valeur ajoutée, French VAT number) +* gb.nhs: NHS (United Kingdom National Health Service patient identifier) * gb.sedol: SEDOL number (Stock Exchange Daily Official List number) * gb.vat: VAT (United Kingdom (and Isle of Man) VAT registration number) * gr.vat: FPA, ΦΠΑ, ΑΦΜ (Αριθμός Φορολογικού Μητρώου, the Greek VAT number) @@ -76,7 +80,7 @@ * hu.anum: ANUM (Közösségi adószám, Hungarian VAT number) * iban: IBAN (International Bank Account Number) * ie.pps: PPS No (Personal Public Service Number, Irish personal number) -* ie.vat: VAT (Irish VAT number) +* ie.vat: VAT (Irish tax reference number) * imei: IMEI (International Mobile Equipment Identity) * imo: IMO number (International Maritime Organization number) * imsi: IMSI (International Mobile Subscriber Identity) @@ -119,6 +123,7 @@ * sk.dph: IČ DPH (IČ pre daň z pridanej hodnoty, Slovak VAT number) * sk.rc: RČ (Rodné číslo, the Slovak birth number) * sm.coe: COE (Codice operatore economico, San Marino national tax number) +* tr.tckimlik: T.C. Kimlik No. (Turkish personal identification number) * us.atin: ATIN (U.S. Adoption Taxpayer Identification Number) * us.ein: EIN (U.S. Employer Identification Number) * us.itin: ITIN (U.S. Individual Taxpayer Identification Number) @@ -129,6 +134,7 @@ Furthermore a number of generic check digit algorithms are available: +* damm: The Damm algorithm * iso7064.mod_11_10: The ISO 7064 Mod 11, 10 algorithm * iso7064.mod_11_2: The ISO 7064 Mod 11, 2 algorithm * iso7064.mod_37_2: The ISO 7064 Mod 37, 2 algorithm @@ -153,4 +159,4 @@ # the version number of the library -__version__ = '1.3' +__version__ = '1.4' From d95382fddb759b7e8d81964cf446bc32ab274b42 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 28 Aug 2016 11:02:31 +0200 Subject: [PATCH 115/654] Properly print error message of exceptions This ensures that the message passed to the constructor is shown in the traceback while falling back to the class default. --- stdnum/exceptions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdnum/exceptions.py b/stdnum/exceptions.py index 733b5250..029b95ef 100644 --- a/stdnum/exceptions.py +++ b/stdnum/exceptions.py @@ -32,7 +32,7 @@ class ValidationError(Exception): exception.""" def __str__(self): - return getattr(self, 'message', '') + return ''.join(self.args[:1]) or getattr(self, 'message', '') class InvalidFormat(ValidationError): From 466cec8b4022e7b6c11f7d387580d9d05f2e6f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Garc=C3=ADa=20Garz=C3=B3n?= Date: Sun, 28 Aug 2016 11:31:20 +0200 Subject: [PATCH 116/654] Add Spanish CUPS code --- stdnum/es/cups.py | 113 +++++++++++++++++++++++++++++++++++++ tests/test_es_cups.doctest | 83 +++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 stdnum/es/cups.py create mode 100644 tests/test_es_cups.doctest diff --git a/stdnum/es/cups.py b/stdnum/es/cups.py new file mode 100644 index 00000000..5aa847a4 --- /dev/null +++ b/stdnum/es/cups.py @@ -0,0 +1,113 @@ +# cups.py - functions for handling Spanish CUPS code +# coding: utf-8 +# +# Copyright (C) 2016 David García Garzón +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CUPS (Código Unificado de Punto de Suministro, Supply Point Unified Code) + +CUPS codes are used in Spain as unique identifier for energy supply points. +They are used both for electricity and pipelined gas. + +The format is set by the Energy Ministry, and individual codes are issued by +each local distribution company. The number consist or 20 or 22 digits and is +built up as follows: + +* LL: (letters) country (always 'ES' since it is a national code) +* DDDD: (numbers) distribution company code (numeric) +* CCCC CCCC CCCC: identifier within the distribution company (numeric) +* EE: (letters) check digits +* N: (number) border point sequence +* T: (letter) kind of border point + +More information: + +* https://es.wikipedia.org/wiki/Código_Unificado_de_Punto_de_Suministro + +>>> validate('ES 1234-123456789012-JY') +'ES1234123456789012JY' +>>> validate('ES 1234-123456789012-JY 1T') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('ES 1234-123456789012-XY 1F') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('ES1234123456789012JY1F') +'ES 1234 1234 5678 9012 JY 1F' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip().upper() + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join(( + number[:2], + number[2:6], + number[6:10], + number[10:14], + number[14:18], + number[18:20], + number[20:], + )).strip() + + +def calc_check_digits(number): + """Calculate the check digits for the number.""" + alphabet = 'TRWAGMYFPDXBNJZSQVHLCKE' + check0, check1 = divmod(int(number[2:18]) % 529, 23) + return alphabet[check0] + alphabet[check1] + + +def validate(number): + """Check to see if the number provided is a valid CUPS. This checks + length, formatting and check digits.""" + number = compact(number) + if len(number) not in (20, 22): + raise InvalidLength() + if number[:2] != 'ES': + raise InvalidComponent() + if not number[2:18].isdigit(): + raise InvalidFormat() + if number[20:]: + pnumber, ptype = number[20:] + if not pnumber.isdigit(): + raise InvalidFormat() + if ptype not in 'FPRCXYZ': + raise InvalidFormat() + if calc_check_digits(number) != number[18:20]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Check to see if the number provided is a valid CUPS.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_es_cups.doctest b/tests/test_es_cups.doctest new file mode 100644 index 00000000..4779124a --- /dev/null +++ b/tests/test_es_cups.doctest @@ -0,0 +1,83 @@ +test_my_nric.doctest - more detailed doctests for stdnum.es.cups module + +Copyright (C) 2016 David García Garzón +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.es.cups. It +tries to cover more corner cases and detailed functionality that is not +really useful as module documentation. + +>>> from stdnum.es import cups +>>> from stdnum.exceptions import * + + +>>> cups.compact('ES 1234-123456789012-jy') +'ES1234123456789012JY' + +>>> cups.validate('ES 1234-123456789012-JY') +'ES1234123456789012JY' +>>> cups.validate('GB 1234-123456789012-JY') +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> cups.validate('ES 1234-12X456789012-JY') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cups.validate('ES 1234-12345678901X-JY') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cups.validate('ES 1234-12456789012-JY') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> cups.validate('ES 1234-123456789012-JY 1F') +'ES1234123456789012JY1F' +>>> cups.validate('ES 1234-123456789012-JY 1T') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cups.validate('ES 1234-123456789012-JY XF') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cups.validate('ES 1234-123456789012-XY 1F') +Traceback (most recent call last): + ... +InvalidChecksum: ... + +>>> cups.is_valid('ES 1234-123456789012-JY 1F') +True +>>> cups.is_valid('ES 1234-123456789012-XY 1F') +False + +>>> cups.format('ES1234123456789012JY') +'ES 1234 1234 5678 9012 JY' +>>> cups.format('ES1234123456789012JY1F') +'ES 1234 1234 5678 9012 JY 1F' + +>>> cups.validate('ES 0987 5432 1098 7654 ZF') +'ES0987543210987654ZF' +>>> cups.validate('ES 1234 1234 5678 9012 JY') +'ES1234123456789012JY' +>>> cups.validate('ES 9750 2109 8765 4321 CQ') +'ES9750210987654321CQ' +>>> cups.validate('ES 0999 1100 1234 5678 EK') +'ES0999110012345678EK' From 294f8721799f6562b7d7f3f31a68f25cb24c964f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Garc=C3=ADa=20Garz=C3=B3n?= Date: Wed, 31 Aug 2016 20:21:52 +0200 Subject: [PATCH 117/654] =?UTF-8?q?Add=20Spanish=20C=C3=B3digo=20Cuenta=20?= =?UTF-8?q?Corriente=20(CCC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stdnum/es/ccc.py | 116 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 stdnum/es/ccc.py diff --git a/stdnum/es/ccc.py b/stdnum/es/ccc.py new file mode 100644 index 00000000..3f69ff9e --- /dev/null +++ b/stdnum/es/ccc.py @@ -0,0 +1,116 @@ +# ccc.py - functions for handling Spanish CCC bank account code +# coding: utf-8 +# +# Copyright (C) 2016 David García Garzón +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CCC (Código Cuenta Corriente, Spanish Bank Account Code) + +CCC code is the country-specific part in Spanish IBAN codes. In order to +fully validate an Spanish IBAN you have to validate as well the country +specific part as a valid CCC. It was used for home banking transactions until +February 1st 2014 when IBAN codes started to be used as an account ID. + +The CCC has 20 digits, all being numbers: EEEE OOOO DD NNNNNNNNNN + +* EEEE: banking entity +* OOOO: office +* DD: check digits +* NNNNN NNNNN: account identifier + +This module does not check if the bank code to exist. Existing bank codes are +published on the 'Registro de Entidades' by 'Banco de España' (Spanish +Central Bank). + +More information: + +* https://es.wikipedia.org/wiki/Código_cuenta_cliente +* http://www.bde.es/bde/es/secciones/servicios/Particulares_y_e/Registros_de_Ent/ + +>>> validate('1234-1234-16 1234567890') +'12341234161234567890' +>>> validate('134-1234-16 1234567890') # wrong length +Traceback (most recent call last): + ... +InvalidLength: ... +>>> validate('12X4-1234-16 1234567890') # non numbers +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('1234-1234-00 1234567890') # invalid check digits +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('12341234161234567890') +'1234 1234 16 12345 67890' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip().upper() + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join([ + number[0:4], + number[4:8], + number[8:10], + number[10:15], + number[15:20], + ]) + + +def _calc_check_digit(number): + """Calculate a single check digit on the provided part of the number.""" + check = sum(int(n) * 2 ** i for i, n in enumerate(number)) % 11 + return str(check if check < 2 else 11 - check) + + +def calc_check_digits(number): + """Calculate the check digits for the number. The supplied number should + have check digits included but are ignored.""" + number = compact(number) + return ( + _calc_check_digit('00' + number[:8]) + _calc_check_digit(number[10:])) + + +def validate(number): + """Checks to see if the number provided is a valid CCC.""" + number = compact(number) + if len(number) != 20: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if number[8:10] != calc_check_digits(number): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid CCC.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 7d969bee07169a4c3f412bf81f8158ce37fbe247 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Thu, 8 Sep 2016 18:54:46 +0200 Subject: [PATCH 118/654] Implement calc_check_digits() in IBAN Introduce a function to calculate the two check digits of an IBAN. Since the check digits are the third and fourth characters in the number, placeholders need to be provided when calling this function. --- stdnum/iban.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/stdnum/iban.py b/stdnum/iban.py index ae01a02d..e0d48986 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -1,6 +1,6 @@ # iban.py - functions for handling International Bank Account Numbers (IBANs) # -# Copyright (C) 2011-2015 Arthur de Jong +# Copyright (C) 2011-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -40,6 +40,8 @@ 'GR1601101050000010547023795' >>> format('GR1601101050000010547023795') 'GR16 0110 1050 0000 1054 7023 795' +>>> calc_check_digits('BExx435411161155') +'31' """ import re @@ -71,7 +73,20 @@ def _to_base10(number): check digits to the end) so it can be checked with the ISO 7064 Mod 97, 10 algorithm.""" # TODO: find out whether this should be in the mod_97_10 module - return ''.join(str(_alphabet.index(x)) for x in number[4:] + number[:4]) + try: + return ''.join( + str(_alphabet.index(x)) for x in number[4:] + number[:4]) + except Exception: + raise InvalidFormat() + + +def calc_check_digits(number): + """Calculate the check digits that should be put in the number to make + it valid. Check digits in the supplied number are ignored..""" + number = compact(number) + # replace check digits with placeholders + number = ''.join((number[:2], '00', number[4:])) + return mod_97_10.calc_check_digits(_to_base10(number)[:-2]) def _struct_to_re(structure): @@ -90,12 +105,8 @@ def conv(match): def validate(number): """Checks to see if the number provided is a valid IBAN.""" number = compact(number) - try: - test_number = _to_base10(number) - except Exception: - raise InvalidFormat() # ensure that checksum is valid - mod_97_10.validate(test_number) + mod_97_10.validate(_to_base10(number)) # look up the number info = _ibandb.info(number) # check if the bban part of number has the correct structure From 1622873beb762ff31ce45b0356edb7c7ab834dd8 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 6 Sep 2016 19:43:46 +0200 Subject: [PATCH 119/654] Add to_iban() function to Spanish CCC --- stdnum/es/ccc.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/stdnum/es/ccc.py b/stdnum/es/ccc.py index 3f69ff9e..3800bb37 100644 --- a/stdnum/es/ccc.py +++ b/stdnum/es/ccc.py @@ -58,6 +58,8 @@ InvalidChecksum: ... >>> format('12341234161234567890') '1234 1234 16 12345 67890' +>>> to_iban('21000418450200051331') +'ES2121000418450200051331' """ from stdnum.exceptions import * @@ -114,3 +116,12 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def to_iban(number): + """Convert the number to an IBAN.""" + from stdnum import iban + separator = ' ' if ' ' in number else '' + return separator.join(( + 'ES' + iban.calc_check_digits('ES00' + number), + number)) From d8cca82e40e7e8fee6de3f20b3b6284d9a925e66 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Tue, 6 Sep 2016 18:16:21 +0200 Subject: [PATCH 120/654] Introduce get_cc_module() utility function This changes the get_vat_module() function to a more generic get_cc_module() function so that it can also be used for other things like IBAN checking. --- stdnum/eu/vat.py | 6 +++--- stdnum/util.py | 25 ++++++++++++------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/stdnum/eu/vat.py b/stdnum/eu/vat.py index 88d97efb..3604aba1 100644 --- a/stdnum/eu/vat.py +++ b/stdnum/eu/vat.py @@ -1,7 +1,7 @@ # vat.py - functions for handling European VAT numbers # coding: utf-8 # -# Copyright (C) 2012-2015 Arthur de Jong +# Copyright (C) 2012-2016 Arthur de Jong # Copyright (C) 2015 Lionel Elie Mamane # # This library is free software; you can redistribute it and/or @@ -40,7 +40,7 @@ """ from stdnum.exceptions import * -from stdnum.util import clean, get_vat_module, get_soap_client +from stdnum.util import clean, get_cc_module, get_soap_client country_codes = set([ @@ -69,7 +69,7 @@ def _get_cc_module(cc): if cc not in country_codes: return if cc not in _country_modules: - _country_modules[cc] = get_vat_module(cc) + _country_modules[cc] = get_cc_module(cc, 'vat') return _country_modules[cc] diff --git a/stdnum/util.py b/stdnum/util.py index 21307baf..111f5af8 100644 --- a/stdnum/util.py +++ b/stdnum/util.py @@ -24,9 +24,9 @@ guaranteed to remain stable and as such not part of the public API of stdnum. ->>> get_vat_module('nl').__name__ +>>> get_cc_module('nl', 'vat').__name__ 'stdnum.nl.btw' ->>> get_vat_module('is').__name__ +>>> get_cc_module('is', 'vat').__name__ 'stdnum.is_.vsk' """ @@ -103,13 +103,6 @@ def _mk_char_map(mapping): })) -# mapping of country codes to internally used names -# used in the get_vat_module() function -_cc_translations = { - 'el': 'gr', 'is': 'is_', -} - - def _clean_chars(number): """Replace various Unicode characters with their ASCII counterpart.""" return ''.join(_char_map.get(x, x) for x in number) @@ -173,11 +166,17 @@ def get_module_list(): ) -def get_vat_module(cc): - """Find the VAT number module based on the country code.""" +def get_cc_module(cc, name): + """Find the country-specific named module.""" cc = cc.lower() - cc = _cc_translations.get(cc, cc) - return __import__('stdnum.%s' % cc, globals(), locals(), ['vat']).vat + # add suffix for python reserved words + if cc in ('in', 'is', 'if'): + cc += '_' + try: + mod = __import__('stdnum.%s' % cc, globals(), locals(), [name]) + return getattr(mod, name, None) + except ImportError: + return def get_soap_client(wsdlurl): # pragma: no cover (no tests for this function) From 251093268dfe1be05ecfc6c7c53a08577e77e930 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Thu, 8 Sep 2016 18:55:03 +0200 Subject: [PATCH 121/654] Validate country-specific part of IBAN This adds the possible of validating the country-specific part of the IBAN. If the country has an IBAN module, checking is also delegated to that module. --- stdnum/iban.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/stdnum/iban.py b/stdnum/iban.py index e0d48986..18a9faa3 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -25,7 +25,7 @@ for the remainder of the number. Some countries may also use checksum algorithms within their number but -this is currently not checked by this number. +this is only checked for a few countries. More information: @@ -49,7 +49,7 @@ from stdnum import numdb from stdnum.exceptions import * from stdnum.iso7064 import mod_97_10 -from stdnum.util import clean +from stdnum.util import clean, get_cc_module # our open copy of the IBAN database @@ -61,6 +61,9 @@ # regular expression to check IBAN structure _struct_re = re.compile(r'([1-9][0-9]*)!([nac])') +# cache of country codes to modules +_country_modules = dict() + def compact(number): """Convert the iban number to the minimal representation. This strips the @@ -102,8 +105,18 @@ def conv(match): return re.compile('^%s$' % _struct_re.sub(conv, structure)) -def validate(number): - """Checks to see if the number provided is a valid IBAN.""" +def _get_cc_module(cc): + """Get the VAT number module based on the country code.""" + # Greece uses a "wrong" country code + cc = cc.lower() + if cc not in _country_modules: + _country_modules[cc] = get_cc_module(cc, 'iban') + return _country_modules[cc] + + +def validate(number, check_country=True): + """Checks to see if the number provided is a valid IBAN. The country- + specific check can be disabled with the check_country argument.""" number = compact(number) # ensure that checksum is valid mod_97_10.validate(_to_base10(number)) @@ -113,14 +126,19 @@ def validate(number): bban = number[4:] if not _struct_to_re(info[0][1].get('bban', '')).match(bban): raise InvalidFormat() + # check the country-specific module if it exists + if check_country: + module = _get_cc_module(number[:2]) + if module: + module.validate(number) # return the compact representation return number -def is_valid(number): +def is_valid(number, check_country=True): """Checks to see if the number provided is a valid IBAN.""" try: - return bool(validate(number)) + return bool(validate(number, check_country=check_country)) except ValidationError: return False @@ -128,4 +146,7 @@ def is_valid(number): def format(number, separator=' '): """Reformat the passed number to the space-separated format.""" number = compact(number) + module = _get_cc_module(number[:2]) + if module and hasattr(module, 'format') and module.format != format: + return module.format(number, separator=separator) return separator.join(number[i:i + 4] for i in range(0, len(number), 4)) From be24790818d1c8c32a055613c22fd98556455800 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Thu, 8 Sep 2016 18:56:06 +0200 Subject: [PATCH 122/654] Add Spanish IBAN number module This validates the country-specific part of the IBAN. --- stdnum/es/iban.py | 79 +++++++++++++++++++++++++++++++++++++++++ tests/test_iban.doctest | 12 +++++++ 2 files changed, 91 insertions(+) create mode 100644 stdnum/es/iban.py diff --git a/stdnum/es/iban.py b/stdnum/es/iban.py new file mode 100644 index 00000000..5d25774d --- /dev/null +++ b/stdnum/es/iban.py @@ -0,0 +1,79 @@ +# iban.py - functions for handling Spanish IBANs +# coding: utf-8 +# +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Spanish IBAN (International Bank Account Number). + +The IBAN is used to identify bank accounts across national borders. The +Spanish IBAN is built up of the IBAN prefix (ES) and check digits, followed +by the 20 digit CCC (Código Cuenta Corriente). + +>>> validate('ES77 1234-1234-16 1234567890') +'ES7712341234161234567890' +>>> to_ccc('ES77 1234-1234-16 1234567890') +'12341234161234567890' +>>> format('ES771234-1234-16 1234567890') +'ES77 1234 1234 1612 3456 7890' +>>> validate('GR1601101050000010547023795') # different country +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> validate('ES12 1234-1234-16 1234567890') # invalid IBAN check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('ES15 1234-1234-17 1234567890') # invalid CCC check digit +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum import iban +from stdnum.es import ccc +from stdnum.exceptions import * + + +__all__ = ['compact', 'format', 'to_ccc', 'validate', 'is_valid'] + + +compact = iban.compact +format = iban.format + + +def to_ccc(number): + """Return the CCC (Código Cuenta Corriente) part of the number.""" + number = compact(number) + if not number.startswith('ES'): + raise InvalidComponent() + return number[4:] + + +def validate(number): + """Checks to see if the number provided is a valid Spanish IBAN.""" + number = iban.validate(number, check_country=False) + ccc.validate(to_ccc(number)) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid Spanish IBAN.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_iban.doctest b/tests/test_iban.doctest index b2d91b8f..10b66e8d 100644 --- a/tests/test_iban.doctest +++ b/tests/test_iban.doctest @@ -199,3 +199,15 @@ or have an unknown country code: ... ''' >>> [ x for x in numbers.splitlines() if x and iban.is_valid(x) ] [] + + +These are mostly for the normal IBAN check but they are not correct according +to the country-specific validation. + +>>> numbers = ''' +... ES2121000418450200051331 +... ''' +>>> [ x for x in numbers.splitlines() if x and not iban.is_valid(x, check_country=False) ] +[] +>>> [ x for x in numbers.splitlines() if x and iban.is_valid(x) ] +[] From 878e0360d5820fc7616eb68a87f8b88f15684c44 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Sep 2016 16:15:26 +0200 Subject: [PATCH 123/654] Avoid leaving open file descriptor in test --- stdnum/numdb.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stdnum/numdb.py b/stdnum/numdb.py index c8cbc3c3..ea3c3b9b 100644 --- a/stdnum/numdb.py +++ b/stdnum/numdb.py @@ -25,7 +25,8 @@ To read a database from a file: ->>> dbfile = read(open('tests/numdb-test.dat', 'r')) +>>> with open('tests/numdb-test.dat', 'r') as f: +... dbfile = read(f) To split a number: From b128c8d3cbb6a07c937de531507c63b4b7acd36e Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Sep 2016 18:59:26 +0200 Subject: [PATCH 124/654] Test a few Spanish IBANs found online --- tests/test_iban.doctest | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/test_iban.doctest b/tests/test_iban.doctest index 10b66e8d..9c95c24d 100644 --- a/tests/test_iban.doctest +++ b/tests/test_iban.doctest @@ -62,8 +62,31 @@ numbers: ... DO28BAGR00000001212453611324 ... EE38 2200 2210 2014 5685 ... EE382200221020145685 +... ES 58 0049 0290 3424 1352 8341 +... ES04 0075 0078 0605 0005 0355 +... ES0521053014113400002160 +... ES10 0075 0080 11 0600658108 +... ES15-0049-1806-9121-1186-9374 +... ES2030810089311100269222 +... ES24 2090 3191 1400 4012 1040 +... ES27 3183 1500 9600 0121 0562 +... ES28 2104 0485 5390 6968 2983 +... ES29 2100 2815 9822 0059 9427 +... ES37 2038 8700 7861 0000 9781 +... ES39 0081 0294 66 0001238624 +... ES58 1465 0100 9719 0014 4593 +... ES59 0049 5030 1129 1601 1246 +... ES62 2100 4288 5922 0010 4465 +... ES72 2013-0692-81-0201150993 +... ES72 2048 1075 8334 0000 2171 +... ES81 0081 5515 2900 0157 5763 +... ES8521005731710200031769 +... ES86 2013 0095 1102 0142 6812 +... ES86 30580157682720001384 +... ES88 2095 0497 9191 0708 8631 ... ES91 2100 0418 4502 0005 1332 ... ES9121000418450200051332 +... ES98 0049 5442 2227 1606 6973 ... FI21 1234 5600 0007 85 ... FI2112345600000785 ... FI5542345670000081 @@ -206,6 +229,7 @@ to the country-specific validation. >>> numbers = ''' ... ES2121000418450200051331 +... ES89 3183 1500 9500 0121 0562 ... ''' >>> [ x for x in numbers.splitlines() if x and not iban.is_valid(x, check_country=False) ] [] From 2c557a0c2e091487fcf9dfe00d3934208136501e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Garc=C3=ADa=20Garz=C3=B3n?= Date: Wed, 31 Aug 2016 21:43:17 +0200 Subject: [PATCH 125/654] Add Spansih Referencia Catastral The control digit check algorithm is based on Javascript implementation by Vicente Sancho that can be found at http://trellat.es/validar-la-referencia-catastral-en-javascript/ See https://github.com/arthurdejong/python-stdnum/pull/38 --- stdnum/es/referenciacatastral.py | 114 +++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 stdnum/es/referenciacatastral.py diff --git a/stdnum/es/referenciacatastral.py b/stdnum/es/referenciacatastral.py new file mode 100644 index 00000000..68c09939 --- /dev/null +++ b/stdnum/es/referenciacatastral.py @@ -0,0 +1,114 @@ +# referenciacatastral.py - functions for handling Spanish real state ids +# coding: utf-8 +# +# Copyright (C) 2016 David García Garzón +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Referencia Catastral (Spanish real estate property id) + +The cadastral reference code is an identifier for real estate in Spain. It is +issued by Dirección General del Catastro (General Directorate of Land +Registry) of the Ministerio de Hacienda (Tresury Ministry). + +It has 20 digits and contains numbers and letters including the Spanish Ñ. +The number consists of 14 digits for the parcel, 4 for identifying properties +within the parcel and 2 check digits. The parcel digits are structured +differently for urban, non-urban or special (infrastructure) cases. + +More information: + +* http://www.catastro.meh.es/esp/referencia_catastral_1.asp (Spanish) +* http://www.catastro.meh.es/documentos/05042010_P.pdf (Spanish) +* https://es.wikipedia.org/wiki/Catastro#Referencia_catastral + +>>> validate('7837301-VG8173B-0001 TT') # Lanteira town hall +'7837301VG8173B0001TT' +>>> validate('783301 VG8173B 0001 TT') # missing digit +Traceback (most recent call last): + ... +InvalidLength: ... +>>> validate('7837301/VG8173B 0001 TT') # not alphanumeric +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> validate('7837301 VG8173B 0001 NN') # bad check digits +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('4A08169P03PRAT0001LR') # BCN Airport +'4A08169 P03PRAT 0001 LR' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +alphabet = u'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789' + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip().upper() + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join([ + number[:7], + number[7:14], + number[14:18], + number[18:] + ]) + + +def _check_digit(number): + """Calculate a single check digit on the provided part of the number.""" + weights = (13, 15, 12, 5, 4, 17, 9, 21, 3, 7, 1) + s = sum(w * (int(n) if n.isdigit() else alphabet.find(n) + 1) + for w, n in zip(weights, number)) + return 'MQWERTYUIOPASDFGHJKLBZX'[s % 23] + + +def calc_check_digits(number): + """Calculate the check digits for the number.""" + return ( + _check_digit(number[0:7] + number[14:18]) + + _check_digit(number[7:14] + number[14:18])) + + +def validate(number): + """Checks to see if the number provided is a valid Cadastral Reference. + This checks the length, formatting and check digits.""" + number = compact(number) + if not all(c in alphabet for c in number): + raise InvalidFormat() + if len(number) != 20: + raise InvalidLength() + if calc_check_digits(number) != number[18:]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid Cadastral Reference.""" + try: + return bool(validate(number)) + except ValidationError: + return False From 49db5531efb72708a88e2b809009c6734e0fac4c Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 3 Sep 2016 19:09:03 +0200 Subject: [PATCH 126/654] Add more tests for Referencia Catastral This adds a number of extra tests for the Spanish Referencia Catastral (stdnum.es.referenciacatastral) module, mostly based on numbers found online. This commit includes some of the documentation on the structure of Referencia Catastral that was in the original pull request. See https://github.com/arthurdejong/python-stdnum/pull/38 --- tests/test_es_referenciacatastral.doctest | 295 ++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 tests/test_es_referenciacatastral.doctest diff --git a/tests/test_es_referenciacatastral.doctest b/tests/test_es_referenciacatastral.doctest new file mode 100644 index 00000000..f175d1c9 --- /dev/null +++ b/tests/test_es_referenciacatastral.doctest @@ -0,0 +1,295 @@ +test_es_referenciacatastral.doctest - more detailed doctests + +Copyright (C) 2016 David García Garzón +Copyright (C) 2015 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the +stdnum.es.referenciacatastral module. + +>>> from stdnum.es import referenciacatastral +>>> from stdnum.exceptions import * + + +The parcel digits are structured differently for urban, non-urban or special +(infrastructure) cases: + +* Urban states + * 7 digits: (numeric) block sequence within cartographic sheet, + and parcel sequence within the block. + * 7 digits: (alphanum) cartographic sheet where the block centroid is. + +* Non-urban states: + * 2 digits: (numeric) Province or more exactly, ministerial delegation + * 3 digits: (numeric) Municipality + * 1 digits: (letter) Sector + * 3 digits: (numeric) Polygon + * 5 digits: (numeric) Parcel + +* Special states: + * BICE code: (2 digits, a number and a letter) + * Energy infrastructure + * 1E: Thermal power plant + * 1G: Regasification terminal + * 1R: Oil refinery + * 1N: Nuclear power plant + * 1H: Hydro power plant + * Hydro + * 2P: Dam + * Roads and highways + * 3A: Tolled highway + * 3C: Tolled road + * 3T: Tolled tunnel + * Ports and airports + * 4A: Airports + * 4P: Commercial ports + * Province (major if many) (2 digits) + * Municipality (3 digits) + * Scope (1 letter) + * E: National + * A: Autonomous Community + * P: Province + * M: Municipality + * Number of municipalities it extends (2 digits, numbers) + * Abbreviated denomination (4 digits, letters) + +An online validator can be found at +https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCBusqueda.aspx + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 000100100QE45D0001GA +... 000100100TH44D0001GX +... 000700100UJ13C0001XY +... 0014001QD4901S0001LP +... 001700100QC04D0001AF +... 002100100QD03C0001HH +... 0307813QD3100N0001LW +... 0376902QE3607N0001UM +... 0412501QD0301S0001BQ +... 0426012TJ3502N0001SQ +... 0474001QE5307C0033DW +... 0474001QE5307C0060IB +... 0474001QE5307C0067GR +... 0474001QE5307C0149YK +... 0553304TK9405S0001GR +... 06011A012002450000QE +... 06011A045000920000QX +... 06016A012090090000ZI +... 06051A005000200000ZJ +... 06060A040001360000XM +... 06063A002000200001SL +... 06063A015000110000AX +... 06074A005005560000BR +... 06079A002002810000JX +... 06080A504000390000II +... 06080A507000270000IK +... 06083A045001460000ZM +... 06083A136002390000UH +... 06084A508000290000QT +... 06084A511000950000QL +... 06085A009000130000YK +... 06086A023000710000PG +... 06092A010090070000XY +... 06105A014002400000QA +... 06127A011000890000LG +... 06150A022002960000YK +... 06151A008000450000PE +... 06153A002000420000KQ +... 06154A016090110000XD +... 06160A030009840000AJ +... 06162A009000770000LK +... 06900A228000090000EB +... 06900A228000110000EA +... 06900A230000050000EG +... 0736601QE2503N0002XI +... 0786418PD6508N0001GB +... 0791405PD6509S0001RX +... 0811056TJ8201S0001QF +... 0847501PE8504N0001EF +... 0895009TK5309N0001DA +... 0939216PD5603N0001BB +... 0989801QC2308N0001LY +... 10010A012005070000SA +... 10033A017000040000AH +... 10036A001002140000MU +... 10042A005090420000SX +... 10063A006000030000EW +... 10083A002030290000DX +... 10103A002002490000IE +... 10105A007004020000HQ +... 10118A004030320000PY +... 10122A032090100000FH +... 10134A009000010000RY +... 10149A011090100000YZ +... 10178A034090180000JE +... 1087910TK7118N0001FS +... 10900A044090170000MU +... 1099107TJ3419N0001RR +... 1344504PD5614S0001XE +... 1468103QC6316N0001PQ +... 1470436TJ5117S0001EP +... 1665311QC6316S0001OO +... 1811701QC3711S0001RM +... 1927510QD2812N0001GJ +... 2014801QC3721S0001IR +... 2019001QD2821N0001QR +... 2035116PD7423N0001WL +... 2070105TK4027A0001XW +... 2093020TK8129S0005RA +... 2106409QE0520N0001IO +... 2209001TK5620N0001LL +... 2217331QC3721N0001GL +... 2272003TJ5127S0001JF +... 2335208QC5823N0001YD +... 2372801QC0427S0001MO +... 2380105PC8328S0001PS +... 2409516TK5620N0001HL +... 2444001QD2724C0001EB +... 2595010TK8129N0001XX +... 2641303TK5424S0001WH +... 2667407TJ5126N0001RS +... 2735401PD7423N0001AL +... 2750203PC9625S0001BA +... 2787101TK8128N0001MT +... 2792003TK8129S0001QU +... 2792020TJ6029S0001IO +... 2911401TJ4521S0001BS +... 2951205TJ7025S0001RX +... 3012723TJ4531S0001DH +... 3065602TH8836N0001KA +... 3117006QC3731N0001KM +... 3135901PD7033E0001MF +... 3178101UJ2337N0001IB +... 3327002TJ6332N0001QH +... 3368022PE8136N0001LJ +... 3390803PC9439S0001XR +... 3456202TK7435N0001OU +... 3575302TJ6437N0001QF +... 3809537QC3230N0001JR +... 4028713TK8142N0001TE +... 4045111TK8444N0001KY +... 4443202PD7044C0068ZB +... 4471131PD7047A0001DR +... 4578201UJ0147N0001HD +... 4637801TK6843N0001WI +... 4878424TK6347N0001GT +... 4926002QE4142N0001UP +... 5034623PC6853S0001MO +... 5078102VK8957N0001TB +... 5172401PD7057A0001HI +... 5215006QC5751N0001EO +... 5238069TJ6253N0001PD +... 5335702QE3853N0001AI +... 5342201QC2854S0001WF +... 5347806UK9354N0001RU +... 5349709QC2854N0001FY +... 5410808QD5451S0001SJ +... 5417221QC5751N0001JO +... 5443405UK9354S0001BG +... 5468703QC3356N0001JR +... 5539105PC6853N0001KQ +... 5552401TK6255S0001YQ +... 5640007TJ6254S0001FG +... 5670823QC3357S0001AY +... 5867418QD1256N0001UD +... 5967307QC0256N0001GO +... 5972003QD1257S0001MG +... 6026813QD2762E0001WB +... 6043208PD9164C0001GI +... 6045303QE1564N0001UD +... 6050201PD7065A0001KQ +... 6061002QC2566S0001DF +... 6117611QC4261N0001UX +... 6229101QD2762G0001UG +... 6284203TH6368S0001UH +... 6320001QD2161N0001LI +... 6326404QD2762E0001MB +... 6380501UH0868S0001LT +... 6396405TJ8269N0001QT +... 6407102TJ8360N0001SK +... 6528901UJ0262N0001PP +... 6534011PC9763S0001YZ +... 6537302PD7063H0001WU +... 6595333QD0069N0001OM +... 6642023PD7064F0001SY +... 6684201VK8968S0002RR +... 6743701QD2764D0001IX +... 6795121QD0069N0008EU +... 6821105TK5662S0001QI +... 6822811QD2162S0001GP +... 6893505QC5569S0001LO +... 6991224PD3869S0001FW +... 7076102TJ5177N0001ZE +... 7174002QD2077S0001XW +... 7244002PD7074C0001QY +... 7282901TJ5178S0001BT +... 7383502VK8978S0001PU +... 7384201TJ5178S0012WD +... 7384201TJ5178S0019OB +... 7384201TJ5178S0043QS +... 7479113QE2477N0001UY +... 7570012TJ4377S0001PO +... 7640222QE4374B0001FR +... 7682601TJ5178S0001XT +... 7749401PD7074H0001HT +... 7865002TJ4376N0001TU +... 7865004TJ4376N0001MU +... 7865006TJ4376N0001KU +... 7977802TJ5177N0001TE +... 8327413PE8482N0001HU +... 8344202PC6684S0001FT +... 8354003PD7085C0001RR +... 8384416TJ8688S0001IQ +... 8645036TJ5984N0001TL +... 8670604TJ4587S0004BE +... 8679007TJ5187N0001LU +... 8696402TH7889N0001XQ +... 8696802TH7889N0001GQ +... 8701105PD7180B0001AU +... 8701110PD7180B0001YU +... 8788845QC2588H0001IJ +... 8796005QD2089N0001WO +... 8796022QD2089N0001OO +... 8827314QD5282N0001RT +... 8843501PC7484S0001KU +... 8910403QD3481S0001LT +... 8990307TH7889S0001OO +... 9013602QD2191S0001ET +... 9165501QE4396E0001YR +... 9201801QD2190S0001PA +... 9205301VL8090N0001PW +... 9265801QE4396E0001PR +... 9327401QE3592N0001JG +... 9655311TK9195N0001OJ +... 9712301QD2191S0001DT +... 9811901DS3191S0001QY +... 9811901TN8391S0001QM +... 9815402PD9391N0001PO +... 9854802PD7195D0001MX +... 9872023 VH5797S 0001 WX +... 9953001PD7195D0001GX +... 9988220VK8998N0001JU +... 9996812TJ9699N0001ZE +... +... ''' +>>> [x for x in numbers.splitlines() if x and not referenciacatastral.is_valid(x)] +[] From 352aa8aef4b60456fba02a52460e9b8c6462b2fb Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 10 Sep 2016 23:29:34 +0200 Subject: [PATCH 127/654] Add reference to Referencia Catastral implementation --- stdnum/es/referenciacatastral.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stdnum/es/referenciacatastral.py b/stdnum/es/referenciacatastral.py index 68c09939..fefb1081 100644 --- a/stdnum/es/referenciacatastral.py +++ b/stdnum/es/referenciacatastral.py @@ -78,6 +78,10 @@ def format(number): ]) +# The check digit implementation is based on the Javascript +# implementation by Vicente Sancho that can be found at +# http://trellat.es/validar-la-referencia-catastral-en-javascript/ + def _check_digit(number): """Calculate a single check digit on the provided part of the number.""" weights = (13, 15, 12, 5, 4, 17, 9, 21, 3, 7, 1) From d7cff5ddbcc3212eb9735e8a128039e5766da211 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 14 Oct 2016 11:17:38 +0200 Subject: [PATCH 128/654] Provide businessid as an alias The Belgian company number or enterprise number (ondernemingsnummer) is the new name for what was previously the VAT number. --- stdnum/be/__init__.py | 5 ++++- stdnum/be/vat.py | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/stdnum/be/__init__.py b/stdnum/be/__init__.py index dd183789..5295496a 100644 --- a/stdnum/be/__init__.py +++ b/stdnum/be/__init__.py @@ -1,7 +1,7 @@ # __init__.py - collection of Belgian numbers # coding: utf-8 # -# Copyright (C) 2012 Arthur de Jong +# Copyright (C) 2012-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -19,3 +19,6 @@ # 02110-1301 USA """Collection of Belgian numbers.""" + +# provide businessid as an alias +from stdnum.be import vat as businessid diff --git a/stdnum/be/vat.py b/stdnum/be/vat.py index 5bffa3f0..39a33351 100644 --- a/stdnum/be/vat.py +++ b/stdnum/be/vat.py @@ -1,6 +1,6 @@ # vat.py - functions for handling Belgian VAT numbers # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -17,7 +17,11 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA -"""BTW, TVA, NWSt (Belgian VAT number). +"""BTW, TVA, NWSt, ondernemingsnummer (Belgian enterprise number). + +The enterprise number (ondernemingsnummer) is a unique identifier of +companies within the Belgian administrative services. It was previously +the VAT ID number. The number consists of 10 digits. >>> compact('BE403019261') '0403019261' From 70b94ee719cfe3f40aa2efe91370104a171c8677 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 14 Oct 2016 15:42:55 +0200 Subject: [PATCH 129/654] Add Australian Business Number Based on the implementation provided by Vincent Bastos See https://github.com/arthurdejong/python-stdnum/pull/40 --- stdnum/au/__init__.py | 21 ++++++ stdnum/au/abn.py | 85 ++++++++++++++++++++++++ tests/test_au_abn.doctest | 136 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 stdnum/au/__init__.py create mode 100644 stdnum/au/abn.py create mode 100644 tests/test_au_abn.doctest diff --git a/stdnum/au/__init__.py b/stdnum/au/__init__.py new file mode 100644 index 00000000..bcf9b0b5 --- /dev/null +++ b/stdnum/au/__init__.py @@ -0,0 +1,21 @@ +# __init__.py - collection of Australian numbers +# coding: utf-8 +# +# Copyright (C) 2016 Vincent Bastos +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Australian numbers.""" diff --git a/stdnum/au/abn.py b/stdnum/au/abn.py new file mode 100644 index 00000000..ba695575 --- /dev/null +++ b/stdnum/au/abn.py @@ -0,0 +1,85 @@ +# abn.py - functions for handling Australian Business Numbers (ABNs) +# +# Copyright (C) 2016 Vincent Bastos +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""ABN (Australian Business Number). + +The Australian Business Number (ABN) is an identifier issued to entities +registered in the Australian Business Register (ABR). The number consists of +11 digits of which the first two are check digits. + +More information: + +* https://en.wikipedia.org/wiki/Australian_Business_Number +* https://abr.business.gov.au/ + +>>> validate('83 914 571 673') +'83914571673' +>>> validate('99 999 999 999') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('51824753556') +'51 824 753 556' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def calc_check_digits(number): + """Calculate the check digits that should be prepended to make the number + valid.""" + weights = (3, 5, 7, 9, 11, 13, 15, 17, 19) + s = sum(-w * int(n) for w, n in zip(weights, number)) + return str(11 + (s - 1) % 89) + + +def validate(number): + """Checks to see if the number provided is a valid ABN. This checks the + length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 11: + raise InvalidLength() + if calc_check_digits(number[2:]) != number[:2]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid ABN. This checks the + length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join((number[0:2], number[2:5], number[5:8], number[8:])) diff --git a/tests/test_au_abn.doctest b/tests/test_au_abn.doctest new file mode 100644 index 00000000..079b0e32 --- /dev/null +++ b/tests/test_au_abn.doctest @@ -0,0 +1,136 @@ +test_au_abn.doctest - more detailed doctests for the stdnum.au.abn module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.au.abn module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.au import abn +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 11574456001 +... 12 123 552 732 +... 12197960056 +... 14 007 145 637 +... 14 085 537 097 +... 15 071 884 994 +... 16 050 539 350 +... 16 875 959 817 +... 16207643640 +... 17 088 952 023  +... 17 091 664 318 +... 17798019840 +... 18657363620 +... 18986035694 +... 19406270520 +... 20 080 574 616 +... 21 006 741 420 +... 211 082 588 59 +... 21276698420 +... 22752397988 +... 25 009 256 179 +... 25 078 164 020 +... 26 128 975 842 +... 27146513745 +... 29 176 219 543 +... 30194533815 +... 30319635949 +... 30753140115 +... 32510077067 +... 32967065962 +... 34180019054 +... 35 061 659 185 +... 35367869361 +... 36562063587 +... 38032136826 +... 38689369989 +... 42350020583 +... 42793074259 +... 43 002 724 334 +... 45138393975 +... 45686492545 +... 46 003 855 561 +... 46 003 855 561  +... 46065060376 +... 46080667721 +... 46241363405 +... 48110267900 +... 49046814670 +... 50 001 065 096 +... 50785233431 +... 51 824 753 556 +... 51120335948 +... 51424722884 +... 51974674048 +... 52 007 061 930 +... 54159269665 +... 55344832020 +... 55593511022 +... 57 064 001 270 +... 57356639841 +... 58437726834 +... 60431599619 +... 61173792360 +... 61483329243 +... 62128948118 +... 62361423248 +... 62826560160 +... 66 098 752 319 +... 66870124640 +... 68515519306 +... 69629520833 +... 73401973717 +... 73420076995 +... 74756347129 +... 74823923971 +... 75 091 431 202 +... 79772126259 +... 81 633 873 422 +... 83562801946 +... 84 002 705 224 +... 84598062158 +... 84696968277 +... 84771313085 +... 85 192 178 954 +... 85573270719 +... 86760778045 +... 87252821098 +... 88 775 098 848 +... 88278681363 +... 90 006 091 774 +... 90399103769 +... 91 010 334 915 +... 91044249923 +... 91957581192 +... 92 104 128 001 +... 93915085021 +... 96196152632 +... 97522448851 +... 98 116 306 453 +... 98977939326 +... 99870624871 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not abn.is_valid(x)] +[] From 8028c3abe0a805577fe7bef3f0d4840264429071 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 14 Oct 2016 18:33:05 +0200 Subject: [PATCH 130/654] Add Australian Company Number Based on the implementation provided by Vincent Bastos See https://github.com/arthurdejong/python-stdnum/pull/40 --- stdnum/au/acn.py | 91 +++++++++++++++++++++++++++ tests/test_au_acn.doctest | 125 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 stdnum/au/acn.py create mode 100644 tests/test_au_acn.doctest diff --git a/stdnum/au/acn.py b/stdnum/au/acn.py new file mode 100644 index 00000000..ed99d3db --- /dev/null +++ b/stdnum/au/acn.py @@ -0,0 +1,91 @@ +# acn.py - functions for handling Australian Company Numbers (ACNs) +# +# Copyright (C) 2016 Vincent Bastos +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""ACN (Australian Company Number). + +The Australian Company Number (ACN) is a company identifier issued by the +Australian Securities and Investments Commission. + +More information: + +* https://en.wikipedia.org/wiki/Australian_Company_Number + +>>> validate('004 085 616') +'004085616' +>>> validate('010 499 966') +'010499966' +>>> validate('999 999 999') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('004085616') +'004 085 616' +>>> to_abn('002 724 334') +'43002724334' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def calc_check_digit(number): + """Calculate the checksum.""" + return str((sum(int(n) * (i - 8) for i, n in enumerate(number))) % 10) + + +def validate(number): + """Checks to see if the number provided is a valid ACN. This checks the + length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 9: + raise InvalidLength() + if calc_check_digit(number) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid ACN. This checks the + length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join((number[0:3], number[3:6], number[6:])) + + +def to_abn(number): + """Convert the number to an Australian Business Number (ABN).""" + from stdnum.au import abn + number = compact(number) + return abn.calc_check_digits(number) + number diff --git a/tests/test_au_acn.doctest b/tests/test_au_acn.doctest new file mode 100644 index 00000000..da7bd4a9 --- /dev/null +++ b/tests/test_au_acn.doctest @@ -0,0 +1,125 @@ +test_au_acn.doctest - more detailed doctests for the stdnum.au.acn module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.au.acn module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.au import acn, abn +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 000 024 733 +... 001 002 731 +... 001 976 272 +... 002 724 334 +... 002 955 722 +... 003 855 561 +... 004 071 854 +... 004 235 063 +... 004 394 763 +... 005 957 004 +... 007 433 623 +... 050 539 350 +... 055 980 204 +... 082 930 916 +... 088 952 023 +... 093 966 888  +... 099503456 +... 104 045 089 +... 104 128 001 +... 112 045 002 +... 116 306 453 +... 125 295 712  +... 135 427 075  +... 141 800 357 +... 143477632 +... +... 000 000 019 +... 000 250 000 +... 000 500 005 +... 000 750 005 +... 001 000 004 +... 001 250 004 +... 001 500 009 +... 001 749 999 +... 001 999 999 +... 002 249 998 +... 002 499 998 +... 002 749 993 +... 002 999 993 +... 003 249 992 +... 003 499 992 +... 003 749 988 +... 003 999 988 +... 004 249 987 +... 004 499 987 +... 004 749 982 +... 004 999 982 +... 005 249 981 +... 005 499 981 +... 005 749 986 +... 005 999 977 +... 006 249 976 +... 006 499 976 +... 006 749 980 +... 006 999 980 +... 007 249 989 +... 007 499 989 +... 007 749 975 +... 007 999 975 +... 008 249 974 +... 008 499 974 +... 008 749 979 +... 008 999 979 +... 009 249 969 +... 009 499 969 +... 009 749 964 +... 009 999 964 +... 010 249 966 +... 010 499 966 +... 010 749 961 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not acn.is_valid(x)] +[] + + +These numbers have been found in combination with an existing ABN. + +>>> numbers = ''' +... +... 000 024 733 / 79 000 024 733 +... 002 724 334 / 43002724334 +... 004 071 854 / 56 004 071 854 +... 004 235 063 / 63 004 235 063 +... 004 394 763 / 74 004 394 763 +... 055 980 204 / 31 055 980 204 +... 104 045 089 / 97 104 045 089 +... 112 045 002 / 19 112 045 002 +... 143477632 / 28143477632 +... +... ''' +>>> lines = (l.split('/') for l in numbers.splitlines() if l) +>>> [(x, y) for x, y in lines if acn.to_abn(x) != abn.compact(y)] +[] From 8ea76ba7ea52c3a33aae2e45d16aa41eacb6374b Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 14 Oct 2016 23:35:42 +0200 Subject: [PATCH 131/654] Add Australian Tax File Number Based on the implementation provided by Vincent Bastos See https://github.com/arthurdejong/python-stdnum/pull/40 --- stdnum/au/tfn.py | 88 +++++++++++++++++++++++++++++++++++++++ tests/test_au_tfn.doctest | 42 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 stdnum/au/tfn.py create mode 100644 tests/test_au_tfn.doctest diff --git a/stdnum/au/tfn.py b/stdnum/au/tfn.py new file mode 100644 index 00000000..99b4b84b --- /dev/null +++ b/stdnum/au/tfn.py @@ -0,0 +1,88 @@ +# tfn.py - functions for handling Australian Tax File Numbers (TFNs) +# +# Copyright (C) 2016 Vincent Bastos +# Copyright (C) 2016 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""TFN (Australian Tax File Number). + +The Tax File Number (TFN) is issued by the Australian Taxation Office (ATO) +to taxpaying individuals and organisations. A business has both a TFN and an +Australian Business Number (ABN). + +The number consists of 8 (older numbers) or 9 digits and includes a check +digit but otherwise without structure. + +More information: + +* https://en.wikipedia.org/wiki/Tax_file_number +* https://www.ato.gov.au/Individuals/Tax-file-number/ + +>>> validate('123 456 782') +'123456782' +>>> validate('999 999 999') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> format('123456782') +'123 456 782' +""" + +import operator + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' ').strip() + + +def checksum(number): + """Calculate the checksum.""" + weights = (1, 4, 3, 7, 5, 8, 6, 9, 10) + return sum(w * int(n) for w, n in zip(weights, number)) % 11 + + +def validate(number): + """Checks to see if the number provided is a valid TFN. This checks the + length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) not in (8, 9): + raise InvalidLength() + if checksum(number) != 0: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid TFN. This checks the + length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join((number[0:3], number[3:6], number[6:])) diff --git a/tests/test_au_tfn.doctest b/tests/test_au_tfn.doctest new file mode 100644 index 00000000..1dddcaec --- /dev/null +++ b/tests/test_au_tfn.doctest @@ -0,0 +1,42 @@ +test_au_tfn.doctest - more detailed doctests for the stdnum.au.tfn module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.au.tfn module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.au import tfn +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 112474082 +... 459599230 +... 565051603 +... 812 239 321 +... 865414088 +... 876 543 210 +... 907974668 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not tfn.is_valid(x)] +[] From a9e540510cec7581c16ce95e59822bff749af045 Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Tue, 8 Nov 2016 18:04:18 +0100 Subject: [PATCH 132/654] Implement calc_check_digits in SEPA Identifier of the Creditor (AT-02) --- stdnum/eu/at_02.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/stdnum/eu/at_02.py b/stdnum/eu/at_02.py index fa5d7072..ca5973ef 100644 --- a/stdnum/eu/at_02.py +++ b/stdnum/eu/at_02.py @@ -1,6 +1,6 @@ # at_02.py - functions for handling AT-02 (SEPA Creditor identifier) # -# Copyright (C) 2014 Sergi Almacellas Abellana +# Copyright (C) 2014-2016 Sergi Almacellas Abellana # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -22,17 +22,20 @@ This identifier is indicated in the ISO 20022 data element `Creditor Scheme Identification`. The creditor can be a legal entity, or an association that is not a legal entity, or a person. + Ther first two digits contain the ISO country code, the nex two are check -digitsi for the ISO 7064 Mod 97, 10 checksum, the next tree contain the +digits for the ISO 7064 Mod 97, 10 checksum, the next tree contain the Creditor Bussines Code (or `ZZZ` if no bussness code used) and the remainder contain the country-specific identifier. ->>> validate('ES23ZZZ47690558N') +>>> validate('ES 23 ZZZ 47690558N') 'ES23ZZZ47690558N' >>> validate('ES2300047690558N') 'ES2300047690558N' >>> compact('ES++()+23ZZZ4//7690558N') 'ES23ZZZ47690558N' +>>> calc_check_digits('ESXXZZZ47690558N') +'23' """ from stdnum.exceptions import * @@ -44,15 +47,15 @@ def compact(number): - """Convert the AT-02 number to the minimal representation. This strips the - number of any valid separators and removes invalid characters.""" + """Convert the AT-02 number to the minimal representation. This strips + the number of any valid separators and removes invalid characters.""" return clean(number, ' -/?:().m\'+"').strip().upper() def _to_base10(number): """Prepare the number to its base10 representation so it can be checked - with the ISO 7064 Mod 97, 10 algorithm. That means excluding positions - 5 to 7 and moving the first four digits to the end""" + with the ISO 7064 Mod 97, 10 algorithm. That means excluding positions 5 + to 7 and moving the first four digits to the end.""" return ''.join(str(_alphabet.index(x)) for x in number[7:] + number[:4]) @@ -74,3 +77,12 @@ def is_valid(number): return bool(validate(number)) except ValidationError: return False + + +def calc_check_digits(number): + """Calculate the check digits that should be put in the number to make it + valid. Check digits in the supplied number are ignored.""" + number = compact(number) + # replace check digits with placeholders + number = ''.join((number[:2], '00', number[4:])) + return mod_97_10.calc_check_digits(_to_base10(number)[:-2]) From 45faa7c8c20150a7c26c682a402aafefbb96535e Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Wed, 9 Nov 2016 10:05:05 +0100 Subject: [PATCH 133/654] Add tox.ini file --- .gitignore | 7 ++++--- tox.ini | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index 2ffac4e8..8f7c162a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,10 @@ __pycache__ # / -/build -/dist -/python_stdnum.egg-info /.coverage +/.tox +/build /coverage +/dist /distribute-*.egg +/python_stdnum.egg-info diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..f8b77dc9 --- /dev/null +++ b/tox.ini @@ -0,0 +1,7 @@ +[tox] +envlist = {py27,py34,py35,py36,pypy} + +[testenv] +deps = nose + coverage +commands = nosetests From 458c310d3bcc0dca4d4db776d3950757ff2b2c76 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 13 Nov 2016 22:51:57 +0100 Subject: [PATCH 134/654] Update gettin IBAN registry The format of the registry file has changed. Before it was a straightforward CSV file with countries in rows but countries are now in columns. --- getiban.py | 62 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/getiban.py b/getiban.py index 44d9f19e..e6894c68 100755 --- a/getiban.py +++ b/getiban.py @@ -23,54 +23,56 @@ Financial Telecommunication which is the official IBAN registrar) to get the data needed to correctly parse and validate IBANs.""" +from collections import defaultdict import csv import urllib -# The place where the current version of IBAN_Registry.txt can be downloaded. +# The place where the current version of +# swift_standards_infopaper_ibanregistry_1.txt can be downloaded. download_url = 'https://www.swift.com/node/11971' -def clean_row(row): - """Clean up a read row from the CSV file.""" - stripit = ' \t\n\r;:\'"' - return dict( - (k.strip(stripit).lower(), v.strip(stripit)) - for k, v in row.items()) - - def get_country_codes(line): """Return the list of country codes this line has.""" # simplest case first - if len(line['country code as defined in iso 3166']) == 2: - return [line['country code as defined in iso 3166']] + if len(line['IBAN prefix country code (ISO 3166)']) == 2: + return [line['IBAN prefix country code (ISO 3166)']] # fall back to parsing the IBAN structure return [x.strip()[:2] for x in line['iban structure'].split(',')] def parse(f): """Parse the specified file.""" - print '# generated from IBAN_Registry.txt, downloaded from' - print '# %s' % download_url - for row in csv.DictReader(f, delimiter='\t', quotechar='"'): - row = clean_row(row) - bban = row['bban structure'] - if not(bban) or bban.lower() == 'not in use': - bban = row['iban structure'] - for cc in get_country_codes(row): - if bban.startswith(cc + '2!n'): - bban = bban[5:] - # print country line - print '%s country="%s" bban="%s"' % ( - cc, row['name of country'], bban.replace(' ', '')) - # TODO: some countries have a fixed check digit value - # TODO: some countries have extra check digits - # TODO: use "Bank identifier position within the BBAN" field - # to add labels to the ranges (Bank identifier and Branch - # Identifier) + print '# generated from swift_standards_infopaper_ibanregistry_1.txt,' + print '# downloaded from %s' % download_url + values = defaultdict(dict) + # the file is CSV but the data is in columns instead of rows + for row in csv.reader(f, delimiter='\t', quotechar='"'): + # skip first row + if row[0] != 'Data element': + # first column contains label + for i, c in enumerate(row[1:]): + values[i][row[0]] = c + # output the collected data + for i, data in values.items(): + bban = data['BBAN structure'] + if not(bban) or bban.lower() == 'n/a': + bban = data['IBAN structure'] + bban = bban.replace(' ', '') + cc = data['IBAN prefix country code (ISO 3166)'][:2] + cname = data['Name of country'] + if bban.startswith(cc + '2!n'): + bban = bban[5:] + # print country line + print '%s country="%s" bban="%s"' % (cc, cname, bban) + # TODO: some countries have a fixed check digit value + # TODO: some countries have extra check digits + # TODO: use "Bank identifier position within the BBAN" field + # to add labels to the ranges (Bank identifier and Branch + # Identifier) if __name__ == '__main__': - #f = open('IBAN_Registry.txt', 'r') f = urllib.urlopen(download_url) parse(f) From ac560a764dca5eb36634458522db13a7e2212e83 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 13 Nov 2016 23:00:03 +0100 Subject: [PATCH 135/654] Update getisbn to Python3 There were some SSL-related issues with the urllib module. This was the easiest solution. --- getisbn.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/getisbn.py b/getisbn.py index 53775655..5755df58 100755 --- a/getisbn.py +++ b/getisbn.py @@ -1,8 +1,8 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # getisbn.py - script to get ISBN prefix data # -# Copyright (C) 2010, 2011, 2014 Arthur de Jong +# Copyright (C) 2010-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -26,7 +26,7 @@ an item number and a check-digit.""" from xml.etree import ElementTree -import urllib +import urllib.request # the location of the ISBN Ranges XML file @@ -55,7 +55,7 @@ def get(f=None): if f is None: yield '# generated from RangeMessage.xml, downloaded from' yield '# %s' % download_url - f = urllib.urlopen(download_url) + f = urllib.request.urlopen(download_url) else: yield '# generated from %r' % f @@ -87,4 +87,4 @@ def get(f=None): if __name__ == '__main__': # get('RangeMessage.xml') for row in get(): - print row.encode('utf-8') + print(row) From c9beb00735b88df06b134a2e8228a5af8a080181 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 13 Nov 2016 23:00:44 +0100 Subject: [PATCH 136/654] Update database files This removes the Costa Rica IBAN test because the format of the IBAN seems to have been changed. The old length still seems to be in use so a more permanent solution is probably required. --- stdnum/cn/loc.dat | 2 +- stdnum/iban.dat | 72 ++-- stdnum/imsi.dat | 723 ++++++++++++++++++++++++---------------- stdnum/isbn.dat | 29 +- stdnum/isil.dat | 4 +- tests/test_iban.doctest | 1 - 6 files changed, 488 insertions(+), 343 deletions(-) diff --git a/stdnum/cn/loc.dat b/stdnum/cn/loc.dat index 96003c76..ff371cc6 100644 --- a/stdnum/cn/loc.dat +++ b/stdnum/cn/loc.dat @@ -1,6 +1,6 @@ # generated from National Bureau of Statistics of the People's # Republic of China, downloaded from https://github.com/cn/GB2260 -# 2016-07-26 20:51:28.113057 +# 2016-11-13 21:19:09.023818 110101 county="东城区" prefecture="市辖区" province="北京市" 110102 county="西城区" prefecture="市辖区" province="北京市" 110103 county="崇文区" prefecture="市辖区" province="北京市" diff --git a/stdnum/iban.dat b/stdnum/iban.dat index 50d61cd9..ab7db08f 100644 --- a/stdnum/iban.dat +++ b/stdnum/iban.dat @@ -1,74 +1,74 @@ -# generated from IBAN_Registry.txt, downloaded from -# https://www.swift.com/node/11971 -AL country="Albania" bban="8!n16!c" +# generated from swift_standards_infopaper_ibanregistry_1.txt, +# downloaded from https://www.swift.com/node/11971 AD country="Andorra" bban="4!n4!n12!c" +AE country="Arab Emirates" bban="3!n16!n" +AL country="Albania" bban="8!n16!c" AT country="Austria" bban="5!n11!n" -AZ country="Republic of Azerbaijan" bban="4!a20!c" -BH country="Bahrain (Kingdom of)" bban="4!a14!c" -BE country="Belgium" bban="3!n7!n2!n" +AZ country="Azerbaijan" bban="4!a20!c" BA country="Bosnia and Herzegovina" bban="3!n3!n8!n2!n" -BR country="Brazil" bban="8!n5!n10!n1!a1!c" +BE country="Belgium" bban="3!n7!n2!n" BG country="Bulgaria" bban="4!a4!n2!n8!c" -CR country="Costa Rica" bban="3!n14!n" -HR country="Croatia" bban="7!n10!n" +BH country="Bahrain" bban="4!a14!c" +BR country="Brazil" bban="8!n5!n10!n1!a1!c" +CH country="Switzerland" bban="5!n12!c" +CR country="Costa Rica" bban="4!n14!n" CY country="Cyprus" bban="3!n5!n16!c" CZ country="Czech Republic" bban="4!n6!n10!n" +DE country="Germany" bban="8!n10!n" DK country="Denmark" bban="4!n9!n1!n" -FO country="Denmark" bban="4!n9!n1!n" -GL country="Denmark" bban="4!n9!n1!n" DO country="Dominican Republic" bban="4!c20!n" EE country="Estonia" bban="2!n2!n11!n1!n" -FI country="Finland" bban="6!n7!n1!n" +ES country="Spain" bban="4!n4!n1!n1!n10!n" +FI country="Finland" bban="3!n11!n" +FO country="Faroe Islands" bban="4!n9!n1!n" FR country="France" bban="5!n5!n11!c2!n" +GB country="United Kingdom" bban="4!a6!n8!n" GE country="Georgia" bban="2!a16!n" -DE country="Germany" bban="8!n10!n" GI country="Gibraltar" bban="4!a15!c" +GL country="Greenland" bban="4!n9!n1!n" GR country="Greece" bban="3!n4!n16!c" GT country="Guatemala" bban="4!c20!c" +HR country="Croatia" bban="7!n10!n" HU country="Hungary" bban="3!n4!n1!n15!n1!n" -IS country="Iceland" bban="4!n2!n6!n10!n" IE country="Ireland" bban="4!a6!n8!n" IL country="Israel" bban="3!n3!n13!n" +IS country="Iceland" bban="4!n2!n6!n10!n" IT country="Italy" bban="1!a5!n5!n12!c" JO country="Jordan" bban="4!a4!n18!c" -KZ country="Kazakhstan" bban="3!n13!c" -XK country="Republic of Kosovo" bban="4!n10!n2!n" KW country="Kuwait" bban="4!a22!c" -LV country="Latvia" bban="4!a13!c" +KZ country="Kazakhstan" bban="3!n13!c" LB country="Lebanon" bban="4!n20!c" -LI country="Liechtenstein (Principality of)" bban="5!n12!c" +LC country="Saint Lucia" bban="4!a24!c" +LI country="Liechtenstein" bban="5!n12!c" LT country="Lithuania" bban="5!n11!n" LU country="Luxembourg" bban="3!n13!c" -MK country="Macedonia, Former Yugoslav Republic of" bban="3!n10!c2!n" -MT country="Malta" bban="4!a5!n18!c" -MR country="Mauritania" bban="5!n5!n11!n2!n" -MU country="Mauritius" bban="4!a2!n2!n12!n3!n3!a" -MD country="Moldova" bban="2!c18!c" +LV country="Latvia" bban="4!a13!c" MC country="Monaco" bban="5!n5!n11!c2!n" +MD country="Moldova" bban="2!c18!c" ME country="Montenegro" bban="3!n13!n2!n" +MK country="Macedonia" bban="3!n10!c2!n" +MR country="Mauritania" bban="5!n5!n11!n2!n" +MT country="Malta" bban="4!a5!n18!c" +MU country="Mauritius" bban="4!a2!n2!n12!n3!n3!a" NL country="The Netherlands" bban="4!a10!n" NO country="Norway" bban="4!n6!n1!n" PK country="Pakistan" bban="4!a16!c" -PS country="Palestine, State of" bban="4!a21!c" PL country="Poland" bban="8!n16!n" +PS country="Palestine" bban="4!a21!c" PT country="Portugal" bban="4!n4!n11!n2!n" QA country="Qatar" bban="4!a21!c" RO country="Romania" bban="4!a16!c" -LC country="Saint Lucia" bban="4!a24!c" -SM country="San Marino" bban="1!a5!n5!n12!c" -ST country="Sao Tome And Principe" bban="8!n11!n2!n" -SA country="Saudi Arabia" bban="2!n18!c" RS country="Serbia" bban="3!n13!n2!n" -SC country="Seychelles" bban="4a!2n!2n!16n!3a!" -SK country="Slovak Republic" bban="4!n6!n10!n" -SI country="Slovenia" bban="5!n8!n2!n" -ES country="Spain" bban="4!n4!n1!n1!n10!n" +SA country="Saudi Arabia" bban="2!n18!c" +SC country="Seychelles" bban="4!a2!n2!n16!n3!a" SE country="Sweden" bban="3!n16!n1!n" -CH country="Switzerland" bban="5!n12!c" +SI country="Slovenia" bban="5!n8!n2!n" +SK country="Slovakia" bban="4!n6!n10!n" +SM country="San Marino" bban="1!a5!n5!n12!c" +ST country="Sao Tome and Principe" bban="4!n4!n11!n2!n" TL country="Timor-Leste" bban="3!n14!n2!n" TN country="Tunisia" bban="2!n3!n13!n2!n" TR country="Turkey" bban="5!n1!n16!c" UA country="Ukraine" bban="6!n19!c" -AE country="United Arab Emirates" bban="3!n16!n" -GB country="United Kingdom" bban="4!a6!n8!n" -VG country="Virgin Islands, British" bban="4!a16!n" +VG country="Virgin Islands" bban="4!a16!n" +XK country="Kosovo" bban="4!n10!n2!n" diff --git a/stdnum/imsi.dat b/stdnum/imsi.dat index bc3bce1d..dc14c876 100644 --- a/stdnum/imsi.dat +++ b/stdnum/imsi.dat @@ -36,11 +36,11 @@ 13 bands="" cc="nl" country="Netherlands" operator="Unica Installatietechniek B.V." status="" 14 cc="nl" country="Netherlands" operator="6GMOBILE B.V." status="Reserved" 15 bands="LTE 2600" brand="Ziggo" cc="nl" country="Netherlands" operator="Ziggo B.V." status="Operational" - 16 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile (BEN)" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" + 16 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="T-Mobile (BEN)" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 17 bands="MVNE" brand="Intercity Zakelijk" cc="nl" country="Netherlands" operator="Intercity Mobile Communications B.V." status="Operational" 18 bands="MVNO" brand="upc" cc="nl" country="Netherlands" operator="UPC Nederland B.V." status="Operational" 19 bands="" cc="nl" country="Netherlands" operator="Mixe Communication Solutions B.V." status="" - 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="nl" country="Netherlands" operator="T-Mobile Netherlands B.V" status="Operational" 21 bands="GSM-R 900" cc="nl" country="Netherlands" operator="ProRail B.V." status="Operational" 22 bands="" cc="nl" country="Netherlands" operator="Ministerie van Defensie" status="" 23 bands="MVNE" cc="nl" country="Netherlands" operator="ASPIDER Solutions Nederland B.V." status="Operational" @@ -116,15 +116,15 @@ 01 bands="GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Office des Telephones" cc="mc" country="Monaco" operator="Monaco Telecom" status="Operational" 00-99 213 - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Mobiland" cc="ad" country="Andorra" operator="Servei De Tele. DAndorra" status="Operational" 00-99 214 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" 04 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Yoigo" cc="es" country="Spain" operator="Xfera Moviles SA" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TME" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="es" country="Spain" operator="Vodafone Spain" status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Movistar" cc="es" country="Spain" operator="Telefónica Móviles España" status="Operational" 08 bands="MVNO" brand="Euskaltel" cc="es" country="Spain" status="Operational" 09 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange" cc="es" country="Spain" operator="France Telecom España SA" status="Operational" 10 bands="" cc="es" country="Spain" operator="Operadora de Telecomunicaciones Opera SL" status="" @@ -156,11 +156,11 @@ 51 bands="GSM-R" brand="ADIF" cc="es" country="Spain" operator="Administrador de Infraestructuras Ferroviarias" status="Operational" 00-99 216 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor Hungary" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Telenor Hungary" cc="hu" country="Hungary" operator="Telenor Magyarország Zrt." status="Operational" 02 bands="" cc="hu" country="Hungary" operator="MVM Net Ltd." status="" - 03 bands="1800" brand="DIGI" cc="hu" country="Hungary" operator="DIGI Telecommunication Ltd." status="" + 03 bands="LTE 1800" brand="DIGI" cc="hu" country="Hungary" operator="DIGI Telecommunication Ltd." status="Not operational" 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="T-Mobile" cc="hu" country="Hungary" operator="Magyar Telekom Plc" status="Operational" - 70 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" + 70 bands="GSM 900 / GSM 1800 / UMTS 2100 / UMTS 900 / LTE 800 / LTE 2600" brand="Vodafone" cc="hu" country="Hungary" operator="Vodafone Magyarország Zrt." status="Operational" 71 bands="MVNO" brand="upc" cc="hu" country="Hungary" operator="UPC Hungary Ltd." status="Operational" 99 bands="GSM-R 900" brand="MAV GSM-R" cc="hu" country="Hungary" operator="Magyar Államvasutak" status="Planned" 00-99 @@ -180,8 +180,10 @@ 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="rs" country="Serbia" operator="Telenor Montenegro" status="Not operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="mt:s" cc="rs" country="Serbia" operator="Telekom Srbija" status="Operational" 04 bands="GSM" brand="T-Mobile" cc="rs" country="Serbia" operator="T-Mobile Montenegro LLC" status="Not operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="VIP" cc="rs" country="Serbia" operator="VIP Mobile" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="VIP" cc="rs" country="Serbia" operator="VIP Mobile" status="Operational" 07 bands="CDMA 450" cc="rs" country="Serbia" operator="Orion Telekom" status="Operational" + 09 bands="MVNO" brand="Vectone Mobile" cc="rs" country="Serbia" operator="MUNDIO MOBILE d.o.o." status="Not operational" + 11 bands="MVNO" cc="rs" country="Serbia" operator="GLOBALTEL d.o.o." status="Not operational" 00-99 222 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="TIM" cc="it" country="Italy" operator="Telecom Italia S.p.A" status="Operational" @@ -197,29 +199,29 @@ 35 bands="MVNO" brand="Lycamobile" cc="it" country="Italy" operator="Lycamobile" status="Operational" 36 bands="" brand="Digi Mobil" cc="it" country="Italy" operator="Digi Italy S.r.l." status="" 37 bands="" brand="3 Italia" cc="it" country="Italy" operator="H3G S.p.A." status="" - 38 bands="" brand="LINKEM" cc="it" country="Italy" operator="Linkem S.p.A." status="" + 38 bands="TD-LTE 3500" brand="LINKEM" cc="it" country="Italy" operator="Linkem S.p.A." status="Operational" 39 bands="" brand="SMS Italia" cc="it" country="Italy" operator="SMS Italia S.r.l." status="" 43 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia S.p.A." status="" 48 bands="" brand="TIM" cc="it" country="Italy" operator="Telecom Italia S.p.A." status="" 77 bands="UMTS 2100" brand="IPSE 2000" cc="it" country="Italy" status="Not operational" - 88 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni S.p.A." status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="Wind" cc="it" country="Italy" operator="Wind Telecomunicazioni S.p.A." status="Operational" 98 bands="GSM 900" brand="BLU" cc="it" country="Italy" operator="BLU S.p.A." status="Not operational" - 99 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3 Italia" cc="it" country="Italy" operator="H3G S.p.A." status="Operational" + 99 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="3 Italia" cc="it" country="Italy" operator="H3G S.p.A." status="Operational" 00-99 226 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / TD-LTE 2600" brand="Vodafone" cc="ro" country="Romania" operator="Vodafone România" status="Operational" 02 bands="CDMA 420" brand="Clicknet Mobile" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" 03 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 04 bands="CDMA 450" brand="Cosmote/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Not operational" - 05 bands="UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" - 06 bands="UMTS 2100" brand="Telekom/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" + 05 bands="UMTS 900 / UMTS 2100 / LTE 2100 / TD-LTE 2600" brand="Digi.Mobil" cc="ro" country="Romania" operator="RCS&RDS" status="Operational" + 06 bands="UMTS 900 / UMTS 2100" brand="Telekom/Zapp" cc="ro" country="Romania" operator="Telekom Romania" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="ro" country="Romania" operator="Orange România" status="Operational" 11 bands="MVNO" cc="ro" country="Romania" operator="Enigma-System" status="" 15 bands="WiMAX / TD-LTE 2600" brand="Idilis" cc="ro" country="Romania" operator="Idilis" status="Operational" 16 bands="MVNO" brand="Lycamobile" cc="ro" country="Romania" operator="Lycamobile Romania" status="Operational" 00-99 228 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100 / LTE 2600" brand="Swisscom" cc="ch" country="Switzerland" operator="Swisscom Ltd" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sunrise" cc="ch" country="Switzerland" operator="Sunrise Communications AG" status="Operational" 03 bands="GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Salt" cc="ch" country="Switzerland" operator="Salt Mobile SA" status="Operational" 05 bands="" cc="ch" country="Switzerland" operator="Comfone AG" status="Not operational" @@ -256,7 +258,7 @@ 231 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" - 03 bands="LTE 1800" brand="Swan" cc="sk" country="Slovakia" operator="Unient Communications" status="Operational" + 03 bands="LTE 1800 / TD-LTE 3700" brand="Swan" cc="sk" country="Slovakia" operator="Unient Communications" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telekom" cc="sk" country="Slovakia" operator="Slovak Telekom" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="sk" country="Slovakia" operator="Orange Slovensko" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="O2" cc="sk" country="Slovakia" operator="Telefónica O2 Slovakia" status="Operational" @@ -290,7 +292,7 @@ 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="Operational" 01 bands="MVNO" brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="O2 (UK)" cc="gb" country="United Kingdom" operator="Telefónica Europe" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel-Vodafone" cc="je" country="Jersey (United Kingdom)" operator="Jersey Airtel Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Airtel-Vodafone" cc="je" country="Jersey (United Kingdom)" operator="Jersey Airtel Limited" status="Operational" 04 bands="GSM 1800" brand="FMS Solutions Ltd" cc="gb" country="United Kingdom" operator="FMS Solutions Ltd" status="Reserved" 05 cc="gb" country="United Kingdom" operator="COLT Mobile Telecommunications Limited" status="" 06 cc="gb" country="United Kingdom" operator="Internet Computer Bureau Limited" status="" @@ -328,11 +330,11 @@ 38 bands="" brand="Virgin Mobile" cc="gb" country="United Kingdom" operator="Virgin Media" status="" 39 bands="" cc="gb" country="United Kingdom" operator="Gamma Telecom Holdings Ltd." status="" 50 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="JT" cc="gb" country="United Kingdom" operator="JT Group Limited" status="Operational" - 51 bands="TD-LTE 3500 / TD-LTE 3700" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" + 51 bands="TD-LTE 3500 / TD-LTE 3700" brand="Relish" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="Operational" 52 bands="" cc="gb" country="United Kingdom" operator="Shyam Telecom UK Ltd" status="" 53 bands="MVNO" cc="gb" country="United Kingdom" operator="Limitless Mobile Ltd" status="Operational" 54 bands="" cc="gb" country="United Kingdom" operator="The Carphone Warehouse Limited" status="" - 55 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Sure Mobile" cc="je" country="Jersey (United Kingdom)" operator="Sure (Jersey) Limited" status="Operational" + 55 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Sure Mobile" cc="je" country="Jersey (United Kingdom)" operator="Sure (Jersey) Limited" status="Operational" 56 bands="" cc="gb" country="United Kingdom" operator="CESG" status="" 57 bands="" cc="gb" country="United Kingdom" operator="Sky UK Limited" status="" 58 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Pronto GSM" cc="im" country="Isle of Man (United Kingdom)" operator="Manx Telecom" status="Operational" @@ -346,7 +348,7 @@ 00 brand="Vectone Mobile" cc="gb" country="United Kingdom" operator="Mundio Mobile Limited" status="" 01 bands="" cc="gb" country="United Kingdom" operator="EE" status="" 02 bands="" cc="gb" country="United Kingdom" operator="EE" status="" - 03 bands="" brand="UK Broadband" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="" + 03 bands="" brand="Relish" cc="gb" country="United Kingdom" operator="UK Broadband Limited" status="" 77 brand="BT" cc="gb" country="United Kingdom" operator="BT Group" status="" 91 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" status="" 92 cc="gb" country="United Kingdom" operator="Vodafone United Kingdom" status="" @@ -354,7 +356,7 @@ 95 cc="gb" country="United Kingdom" operator="Network Rail Infrastructure Limited" status="" 00-99 238 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="TDC" cc="dk" country="Denmark" operator="TDC A/S" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" 03 bands="" cc="dk" country="Denmark" operator="MACH Connectivity" status="" 04 bands="" cc="dk" country="Denmark" operator="NextGen Mobile Ltd T/A CardBoardFish" status="" @@ -376,6 +378,7 @@ 28 bands="" cc="dk" country="Denmark" operator="CoolTEL ApS" status="" 30 bands="" cc="dk" country="Denmark" operator="Interactive digital media GmbH" status="" 40 bands="" cc="dk" country="Denmark" operator="Ericsson Danmark A/S" status="" + 42 bands="" cc="dk" country="Denmark" operator="Brandtel ApS" status="" 43 bands="" cc="dk" country="Denmark" operator="MobiWeb Limited" status="" 66 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" cc="dk" country="Denmark" operator="TT-Netværket P/S" status="Operational" 77 bands="GSM 900 / GSM 1800" brand="Telenor" cc="dk" country="Denmark" operator="Telenor Denmark" status="Operational" @@ -383,7 +386,7 @@ 240 01 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="se" country="Sweden" operator="TeliaSonera Sverige AB" status="Operational" 02 bands="UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600 / TD-LTE 2600" brand="3" cc="se" country="Sweden" operator="HI3G Access AB" status="Operational" - 03 bands="CDMA 450" brand="Net 1" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" + 03 bands="LTE 450" brand="Net 1" cc="se" country="Sweden" operator="Netett Sverige AB" status="Operational" 04 bands="UMTS 2100" brand="SWEDEN" cc="se" country="Sweden" operator="3G Infrastructure Services AB" status="Operational" 05 bands="UMTS 2100" brand="Sweden 3G" cc="se" country="Sweden" operator="Svenska UMTS-Nät AB" status="Operational" 06 bands="UMTS 2100" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Operational" @@ -391,7 +394,7 @@ 08 bands="GSM 900 / GSM 1800" brand="Telenor" cc="se" country="Sweden" operator="Telenor Sverige AB" status="Not operational" 09 bands="" cc="se" country="Sweden" operator="Communication for Devices in Sweden AB" status="" 10 brand="Spring Mobil" cc="se" country="Sweden" operator="Spring Mobil AB" status="Operational" - 11 bands="" cc="se" country="Sweden" operator="Lindholmen Science Park AB" status="Not operational" + 11 bands="" cc="se" country="Sweden" operator="ComHem AB" status="" 12 bands="MVNO" brand="Lycamobile" cc="se" country="Sweden" operator="Lycamobile Sweden Limited" status="Operational" 13 bands="" cc="se" country="Sweden" operator="Alltele Företag Sverige AB" status="" 14 bands="MVNO" cc="se" country="Sweden" operator="TDC Sverige AB" status="Not operational" @@ -405,7 +408,7 @@ 22 bands="" cc="se" country="Sweden" operator="EuTel AB" status="" 23 bands="" cc="se" country="Sweden" operator="Infobip Limited" status="Not operational" 24 bands="GSM 900 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Sweden 2G" cc="se" country="Sweden" operator="Net4Mobility HB" status="Operational" - 25 bands="" cc="se" country="Sweden" operator="Digitel Mobile Srl" status="Not operational" + 25 bands="" cc="se" country="Sweden" operator="Monty UK Global Ltd" status="" 26 bands="GSM" cc="se" country="Sweden" operator="Beepsend AB" status="Operational" 27 bands="MVNO" cc="se" country="Sweden" operator="GlobeTouch AB" status="Operational" 28 bands="" cc="se" country="Sweden" operator="CoolTEL Aps" status="" @@ -426,26 +429,29 @@ 43 bands="" cc="se" country="Sweden" operator="MobiWeb Ltd." status="" 44 bands="" cc="se" country="Sweden" operator="Limitless Mobile AB" status="" 45 bands="" cc="se" country="Sweden" operator="Spirius AB" status="" + 60 bands="" cc="se" country="Sweden" operator="Telefonaktiebolaget LM Ericsson" status="" 00-99 242 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Telia" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Operational" - 03 brand="Teletopia" cc="no" country="Norway" operator="Teletopia Gruppen AS" status="Not operational" - 04 bands="MVNO" brand="Tele2" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" - 05 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Network Norway" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Operational" - 06 bands="CDMA2000 450" brand="ICE" cc="no" country="Norway" operator="ICE Norge AS" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telia" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Operational" + 03 bands="" cc="no" country="Norway" operator="Televerket AS" status="" + 04 bands="MVNO" brand="Tele2" cc="no" country="Norway" operator="Tele2 (Mobile Norway AS)" status="Not operational" + 05 bands="GSM 900 / UMTS 900 / UMTS 2100" brand="Telia" cc="no" country="Norway" operator="TeliaSonera Norge AS" status="Not operational" + 06 bands="LTE 450" brand="ICE" cc="no" country="Norway" operator="ICE Norge AS" status="Operational" 07 bands="MVNO" brand="Phonero" cc="no" country="Norway" operator="Phonero AS" status="Operational" 08 bands="MVNO" brand="TDC" cc="no" country="Norway" operator="TDC Mobil AS" status="Operational" 09 bands="MVNO" brand="Com4" cc="no" country="Norway" operator="Com4 AS" status="Operational" - 10 bands="" cc="no" country="Norway" operator="Nasjonal kommunikasjonsmyndighet" status="" + 10 bands="" cc="no" country="Norway" operator="Norwegian Communications Authority" status="" 11 bands="Test" brand="SystemNet" cc="no" country="Norway" operator="SystemNet AS" status="" 12 bands="" brand="Telenor" cc="no" country="Norway" operator="Telenor Norge AS" status="" - 14 bands="" cc="no" country="Norway" operator="ICE Communication Norge AS" status="" + 14 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="ICE" cc="no" country="Norway" operator="ICE Communication Norge AS" status="Operational" 20 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" 21 bands="GSM-R 900" cc="no" country="Norway" operator="Jernbaneverket AS" status="Operational" + 22 bands="" cc="no" country="Norway" operator="Network Norway AS" status="Not operational" 23 bands="MVNO" brand="Lycamobile" cc="no" country="Norway" operator="Lyca Mobile Ltd" status="Operational" - 24 bands="" cc="no" country="Norway" operator="Mobile Norway AS" status="" + 24 bands="" cc="no" country="Norway" operator="Mobile Norway AS" status="Not operational" 25 bands="" cc="no" country="Norway" operator="Forsvarets kompetansesenter KKIS" status="" + 99 bands="LTE" cc="no" country="Norway" operator="TampNet AS" status="Operational" 00-99 244 03 bands="GSM 1800" brand="DNA" cc="fi" country="Finland" operator="DNA Oy" status="Operational" @@ -471,12 +477,12 @@ 26 bands="MVNO" brand="Compatel" cc="fi" country="Finland" operator="Compatel Ltd" status="Operational" 27 bands="" cc="fi" country="Finland" operator="Teknologian tutkimuskeskus VTT Oy" status="" 29 bands="MVNO" cc="fi" country="Finland" operator="SCNL Truphone" status="Not operational" - 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Not Operational" + 30 bands="MVNO" brand="Vectone Mobile" cc="fi" country="Finland" operator="Mundio Mobile Oy" status="Not operational" 31 bands="MVNO" brand="Kuiri" cc="fi" country="Finland" operator="Ukko Mobile Oy" status="Operational" 32 bands="MVNO" brand="Voxbone" cc="fi" country="Finland" operator="Voxbone SA" status="Operational" 33 bands="TETRA" brand="VIRVE" cc="fi" country="Finland" operator="Virve Tuotteet ja Palvelut Oy" status="Operational" 34 bands="MVNO" brand="Bittium Wireless" cc="fi" country="Finland" operator="Bittium Wireless Oy" status="Operational" - 35 bands="LTE 450 / LTE 2600" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" + 35 bands="LTE 450 / TD-LTE 2600" brand="Ukko Mobile" cc="fi" country="Finland" operator="Ukkoverkot Oy" status="Operational" 36 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Sonera / DNA" cc="fi" country="Finland" operator="TeliaSonera Finland Oyj / Suomen Yhteisverkko Oy" status="Operational" 37 bands="MVNO" brand="Tismi" cc="fi" country="Finland" operator="Tismi BV" status="Operational" 38 bands="" cc="fi" country="Finland" operator="Nokia Solutions and Networks Oy" status="Test Network" @@ -494,15 +500,15 @@ 05 bands="GSM-R 900" brand="LitRail" cc="lt" country="Lithuania" operator="Lietuvos geležinkeliai (Lithuanian Railways)" status="Operational" 06 bands="" brand="Mediafon" cc="lt" country="Lithuania" operator="UAB Mediafon" status="Operational" 07 bands="" cc="lt" country="Lithuania" operator="Compatel Ltd." status="" - 08 bands="WiMAX 3500 / LTE 3500" brand="MEZON" cc="lt" country="Lithuania" operator="Lietuvos radijo ir televizijos centras" status="Operational" + 08 bands="WiMAX 3500 / TD-LTE 2300" brand="MEZON" cc="lt" country="Lithuania" operator="Lietuvos radijo ir televizijos centras" status="Operational" 00-99 247 - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tele2" cc="lv" country="Latvia" operator="Tele2" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="LMT" cc="lv" country="Latvia" operator="Latvian Mobile Telephone" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Tele2" cc="lv" country="Latvia" operator="Tele2" status="Operational" 03 bands="CDMA 450" brand="TRIATEL" cc="lv" country="Latvia" operator="Telekom Baltija" status="Operational" 04 bands="" cc="lv" country="Latvia" operator="Beta Telecom" status="" - 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Bite" cc="lv" country="Latvia" operator="Bite Latvija" status="Operational" - 06 bands="" cc="lv" country="Latvia" operator="Rigatta" status="Reserved" + 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Bite" cc="lv" country="Latvia" operator="Bite Latvija" status="Operational" + 06 bands="" cc="lv" country="Latvia" operator="Rigatta" status="Not operational" 07 bands="MVNO" brand="MTS" cc="lv" country="Latvia" operator="Master Telecom" status="Operational" 08 bands="MVNO" brand="IZZI" cc="lv" country="Latvia" operator="IZZI" status="Operational" 09 bands="MVNO" brand="Camel Mobile" cc="lv" country="Latvia" operator="Camel Mobile" status="Operational" @@ -522,24 +528,24 @@ 00-99 250 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600 / TD-LTE 2600" brand="MTS" cc="ru" country="Russian Federation" operator="Mobile TeleSystems" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC - previously known as North-West GSM" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications (purchased by Tele2)" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon PJSC" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="NCC" cc="ru" country="Russian Federation" operator="Nizhegorodskaya Cellular Communications" status="Operational" 04 bands="GSM 900" brand="Sibchallenge" cc="ru" country="Russian Federation" operator="Sibchallenge" status="Not operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA2000 450" brand="ETK" cc="ru" country="Russian Federation" operator="Yeniseytelecom" status="Operational" 06 bands="CDMA2000 450" brand="Skylink" cc="ru" country="Russian Federation" operator="CJSC Saratov System of Cellular Communications" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="SMARTS" cc="ru" country="Russian Federation" operator="Zao SMARTS" status="Operational" 09 bands="CDMA2000 450" brand="Skylink" cc="ru" country="Russian Federation" operator="Khabarovsky Cellular Phone" status="Operational" 10 bands="GSM 900" brand="DTC" cc="ru" country="Russian Federation" operator="Dontelekom" status="Not operational" - 11 bands="LTE 2600" brand="Yota" cc="ru" country="Russian Federation" operator="Scartel" status="Operational" + 11 bands="MVNO" brand="Yota" cc="ru" country="Russian Federation" operator="Scartel" status="Operational" 12 bands="GSM 1800" brand="Akos" cc="ru" country="Russian Federation" operator="Baykal Westcom / New Telephone Company / Far Eastern Cellular" status="Operational" 13 bands="GSM 900 / GSM 1800" brand="KUGSM" cc="ru" country="Russian Federation" operator="Kuban GSM" status="Not operational" - 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC" status="Operational" + 14 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / TD-LTE 2600" brand="MegaFon" cc="ru" country="Russian Federation" operator="MegaFon OJSC" status="Not operational" 15 bands="GSM 1800" brand="SMARTS" cc="ru" country="Russian Federation" operator="SMARTS Ufa, SMARTS Uljanovsk" status="Operational" 16 bands="GSM 900 / GSM 1800" brand="NTC" cc="ru" country="Russian Federation" operator="New Telephone Company" status="Operational" 17 bands="GSM 900 / GSM 1800" brand="Utel" cc="ru" country="Russian Federation" operator="JSC Uralsvyazinform" status="Operational" 18 bands="TD-LTE 2300" brand="Osnova Telecom" cc="ru" country="Russian Federation" status="Not operational" 19 bands="GSM 1800" brand="INDIGO" cc="ru" country="Russian Federation" operator="INDIGO" status="Not operational" - 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tele2" cc="ru" country="Russian Federation" operator="Tele2" status="Operational" + 20 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 450 / LTE 1800 / LTE 2600" brand="Tele2" cc="ru" country="Russian Federation" operator="Tele2" status="Operational" 22 bands="TD-LTE 2300" cc="ru" country="Russian Federation" operator="Vainakh Telecom" status="Operational" 23 bands="GSM 900 / GSM 1800" brand="Mobicom - Novosibirsk" cc="ru" country="Russian Federation" operator="Mobicom - Novosibirsk" status="Not operational" 28 bands="GSM 900" brand="Beeline" cc="ru" country="Russian Federation" operator="Beeline" status="Not operational" @@ -548,12 +554,12 @@ 34 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Krymtelekom" cc="ru" country="Russian Federation" operator="Krymtelekom" status="Operational" 35 bands="GSM 1800 / LTE 1800" brand="MOTIV" cc="ru" country="Russian Federation" operator="EKATERINBURG-2000" status="Operational" 38 bands="GSM 900 / GSM 1800" brand="Tambov GSM" cc="ru" country="Russian Federation" operator="Central Telecommunication Company" status="Operational" - 39 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / TD-LTE 2300 / LTE 2600" brand="Rostelecom" cc="ru" country="Russian Federation" operator="ROSTELECOM" status="Operational" + 39 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / TD-LTE 2300 / LTE 2600" brand="Rostelecom" cc="ru" country="Russian Federation" operator="ROSTELECOM" status="Not operational" 44 bands="" cc="ru" country="Russian Federation" operator="Stavtelesot / North Caucasian GSM" status="Not operational" - 50 bands="GSM 900 / GSM 1800" brand="MTS" cc="ru" country="Russian Federation" operator="Bezlimitno.ru" status="Operational" + 50 bands="MVNO" brand="MTS" cc="ru" country="Russian Federation" operator="Bezlimitno.ru" status="Operational" 54 bands="LTE 1800" brand="TTK" cc="ru" country="Russian Federation" operator="Tattelecom" status="Operational" 60 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Volna mobile" cc="ru" country="Russian Federation" operator="KTK Telecom" status="Operational" - 811 cc="ru" country="Russian Federation" operator="Votek Mobile" status="" + 811 bands="AMPS / DAMPS / GSM 1800" cc="ru" country="Russian Federation" operator="Votek Mobile" status="Not operational" 91 bands="GSM 1800" brand="Sonic Duo" cc="ru" country="Russian Federation" operator="Sonic Duo CJSC" status="Not operational" 92 bands="" cc="ru" country="Russian Federation" operator="Primtelefon" status="Not operational" 93 bands="" cc="ru" country="Russian Federation" operator="Telecom XXI" status="Not operational" @@ -578,7 +584,6 @@ 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="life:)" cc="by" country="Belarus" operator="Belarusian Telecommunications Network" status="Operational" 05 bands="" cc="by" country="Belarus" operator="Beltelecom" status="" 06 bands="LTE 1800" brand="beCloud" cc="by" country="Belarus" operator="Belorussian Cloud Technologies" status="Operational" - 501 bands="" brand="BelCel JV" cc="by" country="Belarus" status="" 00-99 259 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Orange" cc="md" country="Moldova" operator="Orange Moldova" status="Operational" @@ -622,7 +627,7 @@ 31 bands="" brand="Phone IT" cc="pl" country="Poland" operator="Phone IT Sp. z o.o." status="" 32 bands="" cc="pl" country="Poland" operator="Compatel Limited" status="" 33 bands="MVNO" brand="Truphone" cc="pl" country="Poland" operator="Truphone Poland Sp. z o.o." status="Operational" - 34 bands="UMTS 900" brand="NetWorkS!" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" + 34 bands="UMTS 900 / LTE 1800" brand="NetWorkS!" cc="pl" country="Poland" operator="T-Mobile Polska S.A." status="Operational" 35 bands="GSM-R" cc="pl" country="Poland" operator="PKP Polskie Linie Kolejowe S.A." status="Operational" 36 bands="MVNO" brand="Vectone Mobile" cc="pl" country="Poland" operator="Mundio Mobile" status="Not operational" 37 bands="" cc="pl" country="Poland" operator="NEXTGEN MOBILE LTD" status="" @@ -637,7 +642,7 @@ 46 bands="" cc="pl" country="Poland" operator="Terra Telekom Sp. z o.o." status="" 47 bands="" cc="pl" country="Poland" operator="SMShighway Limited" status="" 48 bands="" cc="pl" country="Poland" operator="AGILE TELECOM S.P.A." status="" - 98 bands="LTE 1800" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Not Operational" + 98 bands="LTE 1800" brand="Play" cc="pl" country="Poland" operator="P4 Sp. z o.o." status="Not operational" 00-99 262 01 bands="GSM 900 / GSM 1800/ / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom" cc="de" country="Germany" operator="Telekom Deutschland GmbH" status="Operational" @@ -679,7 +684,7 @@ 92 bands="GSM 1800 / UMTS 2100" cc="de" country="Germany" operator="Nash Technologies" status="Operational" 00-99 266 - 01 bands="GSM 900" brand="GibTel" cc="gi" country="Gibraltar (United Kingdom)" operator="Gibtelecom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="GibTel" cc="gi" country="Gibraltar (United Kingdom)" operator="Gibtelecom" status="Operational" 06 bands="UMTS 2100" brand="CTS Mobile" cc="gi" country="Gibraltar (United Kingdom)" operator="CTS Gibraltar" status="Not operational" 09 bands="GSM 1800 / UMTS 2100" brand="Shine" cc="gi" country="Gibraltar (United Kingdom)" operator="Eazitelecom" status="Operational" 00-99 @@ -700,7 +705,7 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="POST" cc="lu" country="Luxembourg" operator="POST Luxembourg" status="Operational" 02 bands="" cc="lu" country="Luxembourg" operator="MTX Connect S.a.r.l." status="" 10 bands="" cc="lu" country="Luxembourg" operator="Blue Communications" status="" - 77 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tango" cc="lu" country="Luxembourg" operator="Tango SA" status="Operational" + 77 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Tango" cc="lu" country="Luxembourg" operator="Tango SA" status="Operational" 78 bands="" cc="lu" country="Luxembourg" operator="Interactive digital media GmbH" status="" 99 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="lu" country="Luxembourg" operator="Orange S.A." status="Operational" 00-99 @@ -737,9 +742,9 @@ 04 bands="GSM 900 / GSM 1800" brand="Plus Communication" cc="al" country="Albania" operator="Plus Communication" status="Operational" 00-99 278 - 01 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="mt" country="Malta" operator="Vodafone Malta" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="mt" country="Malta" operator="Vodafone Malta" status="Operational" 11 bands="MVNO" cc="mt" country="Malta" operator="YOM Ltd." status="Operational" - 21 bands="GSM 1800 / UMTS 2100" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="Operational" + 21 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="Operational" 30 bands="" brand="GO" cc="mt" country="Malta" operator="Mobile Communications Limited" status="" 77 bands="UMTS 2100" brand="Melita" cc="mt" country="Malta" operator="Melita" status="Operational" 00-99 @@ -762,10 +767,10 @@ 09 bands="" cc="ge" country="Georgia" operator="Gmobile Ltd" status="" 00-99 283 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="am" country="Armenia" operator="ArmenTel" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 450" brand="Beeline" cc="am" country="Armenia" operator="ArmenTel" status="Operational" 04 bands="GSM 900 / UMTS 900" brand="Karabakh Telecom" cc="am" country="Armenia" operator="Karabakh Telecom" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="VivaCell-MTS" cc="am" country="Armenia" operator="K Telecom CJSC" status="Operational" - 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Orange" cc="am" country="Armenia" operator="Orange S.A." status="Operational" + 10 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Ucom" cc="am" country="Armenia" operator="Ucom LLC" status="Operational" 00-99 284 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="M-Tel" cc="bg" country="Bulgaria" operator="Mobiltel" status="Operational" @@ -777,9 +782,9 @@ 13 bands="LTE 1800" brand="MAX" cc="bg" country="Bulgaria" operator="Max Telecom LTD" status="Operational" 00-99 286 - 01 bands="GSM 900 / UMTS 2100" brand="Turkcell" cc="tr" country="Turkey" operator="Turkcell Iletisim Hizmetleri A.S." status="Operational" - 02 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="tr" country="Turkey" operator="Vodafone Turkey" status="Operational" - 03 bands="GSM 1800 / UMTS 2100" brand="Türk Telekom" cc="tr" country="Turkey" operator="Türk Telekom" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100 / LTE 2600" brand="Turkcell" cc="tr" country="Turkey" operator="Turkcell Iletisim Hizmetleri A.S." status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2600" brand="Vodafone" cc="tr" country="Turkey" operator="Vodafone Turkey" status="Operational" + 03 bands="GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Türk Telekom" cc="tr" country="Turkey" operator="Türk Telekom" status="Operational" 04 bands="GSM 1800" brand="Aycell" cc="tr" country="Turkey" operator="Aycell" status="Not operational" 00-99 288 @@ -788,12 +793,12 @@ 03 bands="GSM 1800" cc="fo" country="Faroe Islands (Denmark)" operator="Edge Mobile Sp/F" status="Not operational" 00-99 289 - 67 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Aquafon" country="Abkhazia - GE-AB" operator="Aquafon JSC" status="Operational" + 67 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Aquafon" country="Abkhazia - GE-AB" operator="Aquafon JSC" status="Operational" 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="A-Mobile" country="Abkhazia - GE-AB" operator="A-Mobile LLSC" status="Operational" 00-99 290 01 bands="GSM 900 / UMTS 900 / LTE 800" cc="gl" country="Greenland (Denmark)" operator="TELE Greenland A/S" status="Operational" - 02 bands="" cc="gl" country="Greenland (Denmark)" operator="inu:it a/s" status="" + 02 bands="TD-LTE 2500" brand="Nuuk TV" cc="gl" country="Greenland (Denmark)" operator="inu:it a/s" status="Operational" 00-99 292 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="PRIMA" cc="sm" country="San Marino" operator="San Marino Telecom" status="Operational" @@ -802,21 +807,21 @@ 10 bands="GSM-R" cc="si" country="Slovenia" operator="SŽ - Infrastruktura, d.o.o." status="Not operational" 20 bands="" cc="si" country="Slovenia" operator="COMPATEL Ltd" status="" 40 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Si.mobil" cc="si" country="Slovenia" operator="SI.MOBIL d.d." status="Operational" - 41 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800" brand="Mobitel" cc="si" country="Slovenia" operator="Telekom Slovenije" status="Operational" + 41 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 900 / LTE 1800 / LTE 2100 / LTE 2600" brand="Mobitel" cc="si" country="Slovenia" operator="Telekom Slovenije" status="Operational" 64 bands="UMTS 2100" brand="T-2" cc="si" country="Slovenia" operator="T-2 d.o.o." status="Operational" - 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Telemach" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" + 70 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Telemach" cc="si" country="Slovenia" operator="Tušmobil d.o.o." status="Operational" 00-99 294 - 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Telekom.mk" cc="mk" country="Macedonia" operator="Makedonski Telekom" status="Operational" - 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="ONE" cc="mk" country="Macedonia" operator="One" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vip MK" cc="mk" country="Macedonia" operator="VIP Operator" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Telekom.mk" cc="mk" country="Macedonia" operator="Makedonski Telekom" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="ONE" cc="mk" country="Macedonia" operator="One" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Vip MK" cc="mk" country="Macedonia" operator="VIP Operator" status="Operational" 04 bands="MVNO" brand="Lycamobile" cc="mk" country="Macedonia" operator="Lycamobile LLC" status="Operational" 10 bands="" cc="mk" country="Macedonia" operator="WTI Macedonia" status="" 11 bands="" cc="mk" country="Macedonia" operator="MOBIK TELEKOMUNIKACII DOOEL Skopje" status="" 00-99 295 - 01 bands="GSM 900 / GSM 1800" brand="Swisscom" cc="li" country="Liechtenstein" operator="Swisscom Schweiz AG" status="Operational" - 02 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="7acht" cc="li" country="Liechtenstein" operator="Salt Liechtenstein AG" status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Swisscom" cc="li" country="Liechtenstein" operator="Swisscom Schweiz AG" status="Operational" + 02 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="7acht" cc="li" country="Liechtenstein" operator="Salt Liechtenstein AG" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="FL1" cc="li" country="Liechtenstein" operator="Telecom Liechtenstein AG" status="Operational" 06 bands="MVNO" brand="Cubic Telecom" cc="li" country="Liechtenstein" operator="Cubic Telecom AG" status="Operational" 07 bands="MVNO" cc="li" country="Liechtenstein" operator="First Mobile AG" status="" @@ -825,7 +830,7 @@ 77 bands="GSM 900" brand="Alpmobil" cc="li" country="Liechtenstein" operator="Alpcom AG" status="Not operational" 00-99 297 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Telenor" cc="me" country="Montenegro" operator="Telenor Montenegro" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Telenor" cc="me" country="Montenegro" operator="Telenor Montenegro" status="Operational" 02 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="T-Mobile" cc="me" country="Montenegro" operator="T-Mobile Montenegro LLC" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="m:tel CG" cc="me" country="Montenegro" operator="MTEL CG" status="Operational" 00-99 @@ -898,7 +903,7 @@ 013 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" 014 bands="" cc="us" country="United States of America" status="" 015 bands="iDEN" brand="Southern LINC" cc="us" country="United States of America" operator="Southern Communications" status="" - 016 bands="CDMA2000 1900 / CDMA2000 1700" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Not operational" + 016 bands="CDMA2000 1900 / CDMA2000 1700" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" 017 bands="iDEN" brand="ProxTel" cc="us" country="United States of America" operator="North Sight Communications Inc." status="" 020 bands="GSM 850 / GSM 1900 / UMTS" brand="Union Wireless" cc="us" country="United States of America" operator="Union Telephone Company" status="Operational" 030 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" @@ -910,11 +915,11 @@ 050 bands="CDMA" brand="GCI" cc="us" country="United States of America" operator="Alaska Communications" status="Operational" 053 bands="MVNO" brand="Virgin Mobile" cc="us" country="United States of America" operator="Sprint" status="Operational" 054 bands="" cc="us" country="United States of America" operator="Alltel US" status="Operational" - 060 bands="" brand="CTEL" cc="us" country="United States of America" operator="Consolidated Telcom" status="" + 060 bands="1900" cc="us" country="United States of America" operator="Consolidated Telcom" status="" 066 bands="GSM / CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" 070 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 080 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 090 bands="GSM 1900" brand="Cricket Wireless" cc="us" country="United States of America" operator="Cricket Communications" status="Operational" + 090 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 100 bands="GSM 850 / UMTS 850 / UMTS 1700" brand="Plateau Wireless" cc="us" country="United States of America" operator="New Mexico RSA 4 East LP" status="Operational" 110 bands="CDMA / GSM 850 / LTE 700" brand="IT&E Wireless" cc="us" country="United States of America" operator="PTI Pacifica Inc." status="Operational" 120 bands="CDMA2000 1900 / LTE 850 / LTE 1900" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" @@ -933,7 +938,7 @@ 250 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 260 bands="GSM 1900 / UMTS 1900 / UMTS 1700 / LTE 700 / LTE 1900 / LTE 1700" brand="T-Mobile USA" cc="us" country="United States of America" operator="T-Mobile USA" status="Operational" 270 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" - 280 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not Operational" + 280 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" 290 bands="GSM 1900" brand="nep" cc="us" country="United States of America" operator="NEP Cellcorp Inc." status="Not operational" 300 bands="GSM 1900" brand="Big Sky Mobile" cc="us" country="United States of America" operator="iSmart Mobile, LLC" status="Operational" 310 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" @@ -953,7 +958,7 @@ 440 bands="MVNO" cc="us" country="United States of America" operator="Numerex" status="Operational" 450 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" 460 bands="GSM 1900" brand="NewCore" cc="us" country="United States of America" operator="NewCore Wireless LLC" status="Operational" - 470 bands="CDMA2000 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Communications, Inc." status="Operational" + 470 bands="CDMA2000 1900" brand="Shentel" cc="us" country="United States of America" operator="Shenandoah Telecommunications Company" status="Operational" 480 bands="iDEN" brand="Instant Connect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" 490 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Operational" 500 bands="CDMA2000 850 / CDMA2000 1900" brand="Alltel" cc="us" country="United States of America" operator="Public Service Cellular Inc." status="Operational" @@ -967,7 +972,7 @@ 580 bands="CDMA2000" cc="us" country="United States of America" operator="Inland Cellular Telephone Company" status="Operational" 59 bands="CDMA" brand="Cellular One" cc="bm" country="Bermuda" status="Operational" 590 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Verizon Wireless" status="" - 600 bands="CDMA2000 850 / CDMA2000 1900 / LTE 700" brand="Cellcom" cc="us" country="United States of America" operator="New-Cell Inc." status="Operational" + 600 bands="CDMA2000 850 / CDMA2000 1900" brand="Cellcom" cc="us" country="United States of America" operator="New-Cell Inc." status="Operational" 610 bands="GSM 1900" brand="Epic PCS" cc="us" country="United States of America" operator="Elkhart Telephone Co." status="Not operational" 620 bands="" brand="Cellcom" cc="us" country="United States of America" operator="Nsighttel Wireless LLC" status="" 630 bands="LTE 700" brand="miSpot" cc="us" country="United States of America" operator="Agri-Valley Communications" status="Not operational" @@ -981,7 +986,7 @@ 710 bands="GSM 850" brand="ASTAC" cc="us" country="United States of America" operator="Arctic Slope Telephone Association Cooperative" status="Operational" 720 bands="" cc="us" country="United States of America" operator="Syniverse Technologies" status="" 730 bands="" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="" - 740 bands="" cc="us" country="United States of America" operator="Green Eagle Communications, Inc." status="" + 740 bands="LTE 700 / LTE 1700 / LTE 1900" brand="Viaero" cc="us" country="United States of America" operator="Viaero Wireless" status="Operational" 750 bands="CDMA2000 850 / CDMA2000 1900" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" 760 bands="" cc="us" country="United States of America" operator="Lynch 3G Communications Corporation" status="Not operational" 770 bands="GSM 1900 / UMTS 1700 / LTE 1700 / LTE 1900" brand="iWireless" cc="us" country="United States of America" operator="Iowa Wireless Services" status="Operational" @@ -990,11 +995,11 @@ 800 bands="GSM 1900" cc="us" country="United States of America" operator="T-Mobile" status="Not operational" 810 bands="1900" cc="us" country="United States of America" operator="LCFR LLC" status="" 820 bands="" cc="us" country="United States of America" operator="Verizon Wireless" status="" - 830 bands="" cc="us" country="United States of America" operator="Clearwire Corporation" status="" + 830 bands="WiMAX" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Not operational" 840 bands="MVNO" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" - 850 bands="CDMA" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" + 850 bands="MVNO" brand="Aeris" cc="us" country="United States of America" operator="Aeris Communications, Inc." status="Operational" 860 bands="CDMA" brand="Five Star Wireless" cc="us" country="United States of America" operator="TX RSA 15B2, LP" status="Operational" - 870 bands="MVNO" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Operational" + 870 bands="GSM 850" brand="PACE" cc="us" country="United States of America" operator="Kaplan Telephone Company" status="Not operational" 880 bands="GSM 850" brand="DTC Wireless" cc="us" country="United States of America" operator="Advantage Cellular Systems, Inc." status="Operational" 890 bands="GSM 850 / GSM 1900" cc="us" country="United States of America" operator="Verizon Wireless" status="" 900 bands="CDMA2000 850 / CDMA2000 1900" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Cable & Communications Corporation" status="Operational" @@ -1003,7 +1008,7 @@ 930 bands="CDMA" cc="us" country="United States of America" operator="Copper Valley Wireless" status="Operational" 940 bands="MVNO" cc="us" country="United States of America" operator="Iris Wireless LLC" status="" 950 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 960 bands="CDMA / LTE 700" brand="STRATA" cc="us" country="United States of America" operator="UBET Wireless" status="Operational" + 960 bands="CDMA" brand="STRATA" cc="us" country="United States of America" operator="UBET Wireless" status="Operational" 970 bands="Satellite" cc="us" country="United States of America" operator="Globalstar" status="Operational" 980 bands="CDMA / LTE 700" brand="Peoples Telephone" cc="us" country="United States of America" operator="Texas RSA 7B3" status="Not operational" 990 bands="LTE 700" brand="Evolve Broadband" cc="us" country="United States of America" operator="Worldcall Interconnect Inc." status="Operational" @@ -1014,85 +1019,205 @@ 012 bands="CDMA2000 850 / CDMA2000 1900" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" 020 bands="GSM 850" brand="Chariton Valley" cc="us" country="United States of America" operator="Missouri RSA 5 Partnership" status="Operational" 030 bands="GSM 850 / GSM 1900 / UMTS 850" brand="Indigo Wireless" cc="us" country="United States of America" operator="Americell PA 3 Partnership" status="Operational" - 040 bands="GSM 850 / GSM 1900" brand="Choice Wireless" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" + 040 bands="GSM 850 / GSM 1900 / CDMA 2000 / UMTS" brand="Choice Wireless" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" 050 bands="CDMA2000 850" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" - 060 bands="GSM 850 / GSM 1900" brand="Farmers Cellular" cc="us" country="United States of America" operator="Farmers Cellular Telephone" status="Operational" - 070 bands="GSM 850" brand="Easterbrooke" cc="us" country="United States of America" operator="Easterbrooke Cellular Corporation" status="Operational" + 060 bands="" cc="us" country="United States of America" operator="Space Data Corporation" status="Operational" + 070 bands="GSM 850" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" 080 bands="GSM 850 / LTE" brand="Pine Cellular" cc="us" country="United States of America" operator="Pine Telephone Company" status="Operational" 090 bands="GSM 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Operational" - 100 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" - 110 bands="GSM 1900" cc="us" country="United States of America" operator="High Plains Wireless" status="Operational" + 100 bands="CDMA2000" cc="us" country="United States of America" operator="Nex-Tech Wireless" status="Operational" + 110 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" 120 bands="" brand="iConnect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" - 130 bands="GSM 850" cc="us" country="United States of America" operator="Cell One Amarillo" status="Operational" + 130 bands="LTE" cc="us" country="United States of America" operator="Lightsquared L.P." status="Not operational" 140 bands="CDMA" brand="Sprocket Wireless" cc="us" country="United States of America" operator="Cross Telephone / MBO Wireless" status="Operational" 150 bands="GSM 850" cc="us" country="United States of America" operator="Wilkes Cellular" status="Operational" - 160 bands="" cc="us" country="United States of America" operator="Endless Mountains Wireless" status="Operational" - 170 bands="GSM 850" brand="PetroCom" cc="us" country="United States of America" operator="Broadpoint Inc" status="Operational" - 180 bands="GSM 850 / UMTS 850 / UMTS 1900" cc="us" country="United States of America" operator="Cingular Wireless" status="Not operational" - 190 bands="" cc="us" country="United States of America" operator="Cellular Properties" status="" - 210 bands="GSM 1900 / UMTS 2100" cc="us" country="United States of America" operator="Emery Telcom Wireless" status="Operational" + 160 bands="LTE" cc="us" country="United States of America" operator="Lightsquared L.P." status="Not operational" + 170 bands="GSM 850" cc="us" country="United States of America" operator="Broadpoint Inc." status="Operational" + 180 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="Not operational" + 190 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="" + 200 bands="" cc="us" country="United States of America" operator="ARINC" status="" + 210 bands="GSM 1900" cc="us" country="United States of America" operator="Emery Telcom Wireless" status="Not operational" 220 bands="CDMA" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" 230 bands="CDMA 850 / CDMA 1900 / LTE 1900 / LTE 1700" brand="C Spire Wireless" cc="us" country="United States of America" operator="Cellular South Inc." status="Operational" + 240 bands="GSM / UMTS 850 / WiMAX" cc="us" country="United States of America" operator="Cordova Wireless" status="Operational" 250 bands="" brand="iConnect" cc="us" country="United States of America" operator="Wave Runner LLC" status="Operational" - 330 bands="" brand="Bug Tussel Wireless" cc="us" country="United States of America" operator="Bug Tussel Wireless" status="Operational" + 260 bands="WiMAX" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Not operational" + 270 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 271 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 272 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 273 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 274 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 275 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 276 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 277 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 278 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 279 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 280 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 281 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 282 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 283 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 284 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 285 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 286 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 287 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 288 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 289 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 290 bands="GSM 1900 / UMTS / LTE" brand="BLAZE" cc="us" country="United States of America" operator="PinPoint Communications Inc." status="Operational" + 300 bands="" cc="us" country="United States of America" operator="Nexus Communications, Inc." status="" + 310 bands="CDMA2000" brand="NMobile" cc="us" country="United States of America" operator="Leaco Rural Telephone Company Inc." status="Operational" + 320 bands="GSM 850 / GSM 1900 / CDMA 2000 / UMTS" brand="Choice Wireless" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" + 330 bands="GSM 1900" brand="Bug Tussel Wireless" cc="us" country="United States of America" operator="Bug Tussel Wireless LLC" status="Operational" + 340 bands="CDMA2000 / LTE 850" cc="us" country="United States of America" operator="Illinois Valley Cellular" status="Operational" + 350 bands="CDMA2000" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular, Inc." status="Operational" 360 bands="UMTS 1700" cc="us" country="United States of America" operator="Stelera Wireless" status="Not operational" 370 bands="LTE 1700" brand="GCI Wireless" cc="us" country="United States of America" operator="General Communication Inc." status="Operational" - 410 bands="LTE 700" brand="Chat Mobility" cc="us" country="United States of America" operator="Iowa RSA No. 2 LP" status="Operational" - 420 bands="CDMA / LTE 700" brand="NorthwestCell" cc="us" country="United States of America" operator="Northwest Missouri Cellular LP" status="Operational" + 380 bands="MVNO" cc="us" country="United States of America" operator="New Dimension Wireless Ltd." status="Operational" + 390 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 400 bands="" cc="us" country="United States of America" status="" + 410 bands="CDMA" brand="Chat Mobility" cc="us" country="United States of America" operator="Iowa RSA No. 2 LP" status="Operational" + 420 bands="CDMA" brand="NorthwestCell" cc="us" country="United States of America" operator="Northwest Missouri Cellular LP" status="Operational" + 430 bands="CDMA" brand="Chat Mobility" cc="us" country="United States of America" operator="RSA 1 LP" status="" + 440 bands="CDMA" cc="us" country="United States of America" operator="Bluegrass Cellular LLC" status="Operational" 450 bands="GSM 1900 / LTE 700" brand="PTCI" cc="us" country="United States of America" operator="Panhandle Telecommunication Systems Inc." status="Operational" + 460 bands="DMR" cc="us" country="United States of America" operator="Fisher Wireless Services Inc." status="Operational" + 470 bands="GSM 850 / GSM 1900" brand="Innovative Wireless" cc="us" country="United States of America" operator="Vitelcom Cellular Inc." status="Operational" 480 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Operational" - 481 cc="us" country="United States of America" + 481 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 482 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 483 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 484 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 485 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 486 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 487 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 488 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" + 489 bands="LTE 700" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="Not operational" 490 bands="LTE 850 / LTE 1900 / TD-LTE 2500" brand="Sprint Corporation" cc="us" country="United States of America" operator="Sprint" status="Operational" - 500 bands="UMTS / LTE 700 / LTE 1700" cc="us" country="United States of America" operator="Mosaic Telecom" status="Operational" - 530 bands="GSM 1900" brand="NewCore" cc="us" country="United States of America" operator="NewCore Wireless LLC" status="Operational" - 570 bands="UMTS 1700 / LTE 1700" cc="us" country="United States of America" operator="BendBroadband" status="Not operational" + 500 bands="UMTS / LTE 700 / LTE 1700" cc="us" country="United States of America" operator="Mosaic Telecom" status="Not operational" + 510 bands="LTE" cc="us" country="United States of America" operator="Lightsquared L.P." status="Not operational" + 520 bands="LTE" cc="us" country="United States of America" operator="Lightsquared L.P." status="Not operational" + 530 bands="LTE 1900" brand="NewCore" cc="us" country="United States of America" operator="NewCore Wireless LLC" status="Operational" + 540 bands="GSM 850" cc="us" country="United States of America" operator="Proximiti Mobility Inc." status="" + 550 bands="GSM 850 / GSM 1900 / CDMA 2000 / UMTS" brand="Choice Wireless" cc="us" country="United States of America" operator="Commnet Midwest LLC" status="Operational" + 560 bands="GSM 850" brand="OTZ Cellular" cc="us" country="United States of America" operator="OTZ Communications, Inc." status="Operational" + 570 bands="UMTS 1700 / LTE 1700" brand="BendBroadband" cc="us" country="United States of America" operator="Bend Cable Communications LLC" status="Not operational" 580 bands="LTE 700 / LTE 850" brand="U.S. Cellular" cc="us" country="United States of America" operator="U.S. Cellular" status="Operational" + 590 bands="" brand="Verizon" cc="us" country="United States of America" operator="Verizon Wireless" status="" + 600 bands="CDMA" brand="Cox Wireless" cc="us" country="United States of America" operator="Cox TMI Wireless LLC" status="Not operational" + 610 bands="CDMA" brand="SRT Communications" cc="us" country="United States of America" operator="North Dakota Network Co." status="Operational" + 620 bands="Satellite" cc="us" country="United States of America" operator="TerreStar Networks, Inc." status="Not operational" 630 bands="" brand="C Spire Wireless" cc="us" country="United States of America" operator="Cellular South Inc." status="" 640 bands="LTE 700" brand="Rock Wireless" cc="us" country="United States of America" operator="Standing Rock Telecommunications" status="Operational" 650 bands="CDMA / LTE 700 / WiMAX 3700" brand="United Wireless" cc="us" country="United States of America" operator="United Wireless" status="Operational" - 660 bands="CDMA2000 1900 / CDMA 2000 1700 / LTE 1700" brand="metroPCS" cc="us" country="United States of America" operator="metroPCS" status="Operational" - 750 bands="LTE" cc="us" country="United States of America" operator="NetAmerica Alliance" status="Operational" + 660 bands="MVNO" brand="metroPCS" cc="us" country="United States of America" operator="MetroPCS Wireless Inc." status="Operational" + 670 bands="CDMA" brand="Pine Belt Wireless" cc="us" country="United States of America" operator="Pine Belt Cellular Inc." status="Operational" + 680 bands="GSM 1900" cc="us" country="United States of America" operator="GreenFly LLC" status="" + 690 bands="paging" cc="us" country="United States of America" operator="TeleBEEPER of New Mexico" status="Operational" + 700 bands="MVNO" cc="us" country="United States of America" operator="Aspenta International, Inc." status="Operational" + 710 bands="" cc="us" country="United States of America" operator="Northeast Wireless Networks LLC" status="" + 720 bands="GSM 1900" cc="us" country="United States of America" operator="MainePCS LLC" status="Not operational" + 730 bands="GSM 850" cc="us" country="United States of America" operator="Proximiti Mobility Inc." status="" + 740 bands="GSM 850" cc="us" country="United States of America" operator="Telalaska Cellular" status="Operational" + 750 bands="" brand="ClearTalk" cc="us" country="United States of America" operator="Flat Wireless LLC" status="" + 760 bands="" cc="us" country="United States of America" operator="Edigen Inc." status="" + 770 bands="" cc="us" country="United States of America" operator="Altiostar Networks, Inc." status="" + 780 bands="" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Not operational" 790 bands="" cc="us" country="United States of America" operator="Coleman County Telephone Cooperative, Inc." status="" - 810 bands="CDMA / LTE 700" brand="Bluegrass Wireless" cc="us" country="United States of America" operator="Bluegrass Wireless" status="Operational" + 800 bands="LTE 700" cc="us" country="United States of America" operator="Bluegrass Cellular LLC" status="Operational" + 810 bands="LTE 700" cc="us" country="United States of America" operator="Bluegrass Cellular LLC" status="Operational" + 820 bands="" cc="us" country="United States of America" operator="Sonus Networks" status="" 830 bands="LTE 700" cc="us" country="United States of America" operator="Thumb Cellular LP" status="Operational" - 870 bands="MVNO" brand="Boost" cc="us" country="United States of America" operator="Boost Mobile" status="Operational" - 910 bands="LTE" brand="Mobile Nation" cc="us" country="United States of America" operator="SI Wireless LLC" status="Operational" - 930 bands="LTE 700" cc="us" country="United States of America" operator="Syringa Wireless" status="Operational" - 950 bands="LTE 700" brand="ETC" cc="us" country="United States of America" operator="Enhanced Telecommmunications Corp. (Sunman Telecom)" status="Operational" - 960 bands="MVNO" brand="Lycamobile" cc="us" country="United States of America" operator="Lyca Technology Solutions" status="Operational" + 840 bands="LTE 700" brand="Cellcom" cc="us" country="United States of America" operator="Nsight Spectrum LLC" status="Operational" + 850 bands="LTE 700" brand="Cellcom" cc="us" country="United States of America" operator="Nsight Spectrum LLC" status="Operational" + 860 bands="LTE 700" brand="STRATA" cc="us" country="United States of America" operator="Uintah Basin Electronic Telecommunications" status="Operational" + 870 bands="MVNO" brand="Boost Mobile" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" + 880 bands="" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="" + 890 bands="" cc="us" country="United States of America" operator="Globecomm Network Services Corporation" status="" + 900 bands="MVNO" cc="us" country="United States of America" operator="GigSky" status="Operational" + 910 bands="CDMA / LTE" brand="Mobile Nation" cc="us" country="United States of America" operator="SI Wireless LLC" status="Operational" + 920 bands="" brand="Chariton Valley" cc="us" country="United States of America" operator="Missouri RSA 5 Partnership" status="" + 930 bands="LTE 700" cc="us" country="United States of America" operator="Syringa Wireless" status="Not operational" + 940 bands="WiMAX" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Not operational" + 950 bands="CDMA / LTE 700" brand="ETC" cc="us" country="United States of America" operator="Enhanced Telecommmunications Corp." status="Operational" + 960 bands="MVNO" brand="Lycamobile" cc="us" country="United States of America" operator="Lycamobile USA Inc." status="Operational" 970 bands="LTE 1700" brand="Big River Broadband" cc="us" country="United States of America" operator="Big River Broadband, LLC" status="Operational" + 980 bands="" cc="us" country="United States of America" operator="LigTel Communications" status="" 990 bands="LTE 700 / LTE 1700" cc="us" country="United States of America" operator="VTel Wireless" status="Operational" 000-999 312 + 010 bands="" brand="Chariton Valley" cc="us" country="United States of America" operator="Chariton Valley Communication Corporation, Inc" status="" 020 bands="LTE 700" cc="us" country="United States of America" operator="Infrastructure Networks, LLC" status="Operational" 030 bands="LTE 700" brand="Sprocket Wireless" cc="us" country="United States of America" operator="Cross Telephone / MBO Wireless" status="Operational" 040 bands="LTE 700" cc="us" country="United States of America" operator="Custer Telephone Co-op (CTCI)" status="Operational" - 050 bands="LTE 700" cc="us" country="United States of America" operator="Fuego Wireless" status="Operational" + 050 bands="LTE 700" cc="us" country="United States of America" operator="Fuego Wireless" status="Not operational" + 060 bands="CDMA / GSM" cc="us" country="United States of America" operator="CoverageCo" status="" 070 bands="LTE 700" cc="us" country="United States of America" operator="Adams Networks Inc" status="Operational" 080 bands="UMTS-TDD 700" brand="SyncSouth" cc="us" country="United States of America" operator="South Georgia Regional Information Technology Authority" status="Operational" + 090 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="" + 100 bands="" cc="us" country="United States of America" operator="ClearSky Technologies, Inc." status="" + 110 bands="LTE" cc="us" country="United States of America" operator="Texas Energy Network LLC" status="" 120 bands="LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" 130 bands="LTE 700" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="Operational" + 140 bands="CDMA" brand="Revol Wireless" cc="us" country="United States of America" operator="Cleveland Unlimited, Inc." status="Not operational" + 150 bands="LTE 700" brand="NorthwestCell" cc="us" country="United States of America" operator="Northwest Missouri Cellular LP" status="Operational" + 160 bands="LTE 700" brand="Chat Mobility" cc="us" country="United States of America" operator="RSA1 Limited Partnership" status="Operational" + 170 bands="LTE 700" brand="Chat Mobility" cc="us" country="United States of America" operator="Iowa RSA No. 2 LP" status="Operational" 180 bands="" cc="us" country="United States of America" operator="Limiteless Mobile LLC" status="" - 220 bands="LTE 700" cc="us" country="United States of America" operator="Chariton Valley Telephone" status="Operational" + 190 bands="" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="" + 200 bands="MVNO" cc="us" country="United States of America" operator="Voyager Mobility LLC" status="Not operational" + 210 bands="MVNO" cc="us" country="United States of America" operator="Aspenta International, Inc." status="Operational" + 220 bands="LTE 700" brand="Chariton Valley" cc="us" country="United States of America" operator="Chariton Valley Communication Corporation, Inc." status="Operational" + 230 bands="" brand="SRT Communications" cc="us" country="United States of America" operator="North Dakota Network Co." status="" + 240 bands="" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="" + 250 bands="" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="" 260 bands="LTE 1900" brand="NewCore" cc="us" country="United States of America" operator="Central LTE Holdings" status="Operational" 270 bands="LTE 700" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" 280 bands="LTE 700" brand="Pioneer Cellular" cc="us" country="United States of America" operator="Cellular Network Partnership" status="Operational" - 330 bands="LTE 700" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular" status="Operational" + 290 bands="" brand="STRATA" cc="us" country="United States of America" operator="Uintah Basin Electronic Telecommunications" status="" + 300 bands="MVNO" brand="telna Mobile" cc="us" country="United States of America" operator="Telecom North America Mobile, Inc." status="Operational" + 310 bands="LTE 700" cc="us" country="United States of America" operator="Clear Stream Communications, LLC" status="Operational" + 320 bands="LTE 700" cc="us" country="United States of America" operator="S and R Communications LLC" status="Operational" + 330 bands="LTE 700" brand="Nemont" cc="us" country="United States of America" operator="Nemont Communications, Inc." status="Operational" 340 bands="LTE 700" brand="MTA" cc="us" country="United States of America" operator="Matanuska Telephone Association, Inc." status="Operational" - 350 bands="LTE" cc="us" country="United States of America" operator="Triangle Communications" status="Operational" - 370 bands="LTE" cc="us" country="United States of America" operator="Choice Wireless" status="Operational" + 350 bands="LTE 700" cc="us" country="United States of America" operator="Triangle Communication Sytem Inc." status="Operational" + 360 bands="" cc="us" country="United States of America" operator="Wes-Tex Telecommunications, Ltd." status="" + 370 bands="LTE" brand="Choice Wireless" cc="us" country="United States of America" operator="Commnet Wireless" status="Operational" 380 bands="LTE 700" cc="us" country="United States of America" operator="Copper Valley Wireless" status="Operational" + 390 bands="UMTS / LTE" brand="FTC Wireless" cc="us" country="United States of America" operator="FTC Communications LLC" status="Operational" 400 bands="LTE 700" brand="Mid-Rivers Wireless" cc="us" country="United States of America" operator="Mid-Rivers Telephone Cooperative" status="Operational" + 410 bands="" cc="us" country="United States of America" operator="Eltopia Communications, LLC" status="" 420 bands="LTE 700" cc="us" country="United States of America" operator="Nex-Tech Wireless" status="Operational" + 430 bands="CDMA / LTE 700" cc="us" country="United States of America" operator="Silver Star Communications" status="Operational" + 440 bands="2500" cc="us" country="United States of America" operator="Consolidated Telcom" status="" + 450 bands="" cc="us" country="United States of America" operator="Cable & Communications Corporation" status="" 460 bands="LTE 700" cc="us" country="United States of America" operator="Ketchikan Public Utilities (KPU)" status="Operational" 470 bands="LTE 700" brand="Carolina West Wireless" cc="us" country="United States of America" operator="Carolina West Wireless" status="Operational" - 530 bands="" cc="us" country="United States of America" operator="Sprint Spectrum" status="Operational" + 480 bands="" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular, Inc." status="" + 490 bands="Satellite" cc="us" country="United States of America" operator="TrustComm, Inc." status="" + 500 bands="LTE 700" cc="us" country="United States of America" operator="AB Spectrum LLC" status="Not operational" + 510 bands="CDMA / LTE" cc="us" country="United States of America" operator="WUE Inc." status="" + 520 bands="" cc="us" country="United States of America" operator="ANIN" status="Not operational" + 530 bands="" brand="Sprint" cc="us" country="United States of America" operator="Sprint Corporation" status="Operational" + 540 bands="" cc="us" country="United States of America" operator="Broadband In Hand LLC" status="Not operational" + 550 bands="" cc="us" country="United States of America" operator="Great Plains Communications, Inc." status="" + 560 bands="MVNO" cc="us" country="United States of America" operator="NHLT Inc." status="Not operational" + 570 bands="CDMA / LTE" brand="Blue Wireless" cc="us" country="United States of America" operator="Buffalo-Lake Erie Wireless Systems Co., LLC" status="Operational" + 580 bands="" cc="us" country="United States of America" operator="Morgan, Lewis & Bockius LLP" status="" 590 bands="LTE 2600" brand="NMU" cc="us" country="United States of America" operator="Northern Michigan University" status="Operational" - 610 bands="LTE 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Licenses, Inc." status="Operational" - 660 bands="LTE 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Wireless" status="Operational" + 600 bands="" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular, Inc." status="" + 610 bands="LTE 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Licenses, Inc." status="Not operational" + 620 bands="MVNO" cc="us" country="United States of America" operator="GlobeTouch Inc." status="Operational" + 630 bands="" cc="us" country="United States of America" operator="NetGenuity, Inc." status="" + 640 bands="" brand="Nemont" cc="us" country="United States of America" operator="Sagebrush Cellular, Inc." status="Not operational" + 650 bands="" cc="us" country="United States of America" operator="365 Wireless LLC" status="" + 660 bands="LTE 1900" brand="nTelos" cc="us" country="United States of America" operator="nTelos Wireless" status="Not operational" + 670 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="" + 680 bands="" brand="AT&T" cc="us" country="United States of America" operator="AT&T Mobility" status="" + 690 bands="" cc="us" country="United States of America" operator="Tecore Government Services, LLC" status="" + 730 bands="CDMA" cc="us" country="United States of America" operator="Triangle Communication Sytem Inc." status="Operational" 780 bands="TD-LTE 2500" cc="us" country="United States of America" operator="Redzone Wireless" status="Operational" 860 bands="CDMA / LTE 1900 / LTE 1700" brand="ClearTalk" cc="us" country="United States of America" operator="Flat Wireless, LLC" status="Operational" 900 bands="CDMA / LTE 1900 / LTE 1700" brand="ClearTalk" cc="us" country="United States of America" operator="Flat West Wireless, LLC" status="Operational" + 910 bands="" brand="Appalachian Wireless" cc="us" country="United States of America" operator="East Kentucky Network, LLC" status="" 000-999 313 100 bands="LTE 700" brand="FirstNet" cc="us" country="United States of America" operator="700 MHz Public Safety Broadband" status="" @@ -1111,14 +1236,14 @@ 001 bands="" cc="mx" country="Mexico" operator="Comunicaciones Digitales Del Norte, S.A. de C.V." status="" 010 bands="iDEN 800" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" 020 bands="TDMA 850 / GSM 1900 / UMTS 850 / LTE 1700" brand="Telcel" cc="mx" country="Mexico" operator="América Móvil" status="Operational" - 030 bands="CDMA2000 800 / CDMA2000 1900 / GSM 1900 / UMTS 850 / LTE 1900" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles" status="Operational" + 030 bands="CDMA2000 800 / CDMA2000 1900 / GSM 1900 / UMTS 850 / LTE 1700" brand="movistar" cc="mx" country="Mexico" operator="Movistar - Telefónica Moviles" status="Operational" 040 bands="CDMA2000 800 / CDMA2000 1900" brand="Unefon" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" - 050 bands="GSM 850 / GSM 1900" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" + 050 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" 060 bands="" cc="mx" country="Mexico" operator="Servicios de Acceso Inalambrico, S.A. de C.V." status="" 066 bands="" cc="mx" country="Mexico" operator="Telefonos de México, S.A.B. de C.V." status="" 070 bands="" cc="mx" country="Mexico" operator="Unefon" status="" 080 bands="" cc="mx" country="Mexico" operator="Unefon" status="" - 090 bands="UMTS 1700" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" + 090 bands="UMTS 1700 / LTE 1700" brand="AT&T" cc="mx" country="Mexico" operator="AT&T Mexico" status="Operational" 000-999 338 020 bands="" brand="FLOW" cc="jm" country="Jamaica" operator="LIME (Cable & Wireless)" status="Not operational" @@ -1130,7 +1255,7 @@ 340 01 bands="GSM 900 / UMTS 2100" brand="Orange" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Orange Caraïbe Mobiles" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS" brand="Only" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Outremer Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS" brand="Chippie" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="UTS Caraïbe" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS / LTE 1800" brand="Chippie" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="UTS Caraïbe" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS" brand="Dauphin" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Dauphin Telecom" status="Operational" 10 bands="" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Guadeloupe Téléphone Mobile" status="Not operational" 11 bands="" country="French Antilles (France) - BL/GF/GP/MF/MQ" operator="Guyane Téléphone Mobile" status="Not operational" @@ -1139,7 +1264,7 @@ 00-99 342 600 bands="GSM 1900 / UMTS" brand="FLOW" cc="bb" country="Barbados" operator="LIME (formerly known as Cable & Wireless)" status="Operational" - 750 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="bb" country="Barbados" operator="Digicel (Barbados) Limited" status="Operational" + 750 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Digicel" cc="bb" country="Barbados" operator="Digicel (Barbados) Limited" status="Operational" 820 bands="" cc="bb" country="Barbados" operator="Sunbeach Communications" status="Reserved" 000-999 344 @@ -1159,7 +1284,7 @@ 770 bands="GSM 1800 / GSM 1900 / UMTS" brand="Digicel" cc="vg" country="British Virgin Islands" operator="Digicel (BVI) Limited" status="Operational" 000-999 350 - 00 bands="GSM 1900 / UMTS 850 / LTE 700 / LTE 1900" brand="CellOne" cc="bm" country="Bermuda" operator="Bermuda Digital Communications Ltd." status="Operational" + 00 bands="GSM 1900 / UMTS 850 / LTE 850" brand="CellOne" cc="bm" country="Bermuda" operator="Bermuda Digital Communications Ltd." status="Operational" 01 bands="GSM 1900" brand="Digicel Bermuda" cc="bm" country="Bermuda" operator="Telecommunications (Bermuda & West Indies) Ltd" status="Reserved" 02 bands="GSM 1900 / UMTS" brand="Mobility" cc="bm" country="Bermuda" operator="M3 Wireless" status="Operational" 00-99 @@ -1190,7 +1315,7 @@ 51 bands="GSM 900 / UMTS 2100" brand="Telcell" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Telcell N.V." status="Operational" 54 bands="GSM 900 / GSM 1800" brand="ECC" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="East Caribbean Cellular" status="Operational" 59 bands="GSM 900 / GSM 1800" brand="Chippie" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="United Telecommunication Service N.V. (UTS)" status="Operational" - 60 bands="UMTS 2100" brand="Chippie" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="United Telecommunication Service N.V. (UTS)" status="Operational" + 60 bands="UMTS 2100 / LTE 1800" brand="Chippie" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="United Telecommunication Service N.V. (UTS)" status="Operational" 63 bands="" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="CSC N.V." status="" 68 bands="UMTS 2100" brand="Digicel" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Curaçao Telecom N.V." status="Operational" 69 bands="GSM 900 / GSM 1800" brand="Digicel" country="Former Netherlands Antilles (Kingdom of the Netherlands) - BQ/CW/SX" operator="Curaçao Telecom N.V." status="Operational" @@ -1206,15 +1331,16 @@ 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Digicel" cc="aw" country="Aruba (Kingdom of the Netherlands)" operator="Digicel Aruba" status="Operational" 00-99 364 - 390 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="BTC" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd (BaTelCo)" status="Operational" - 000-999 + 39 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="BTC" cc="bs" country="Bahamas" operator="The Bahamas Telecommunications Company Ltd (BaTelCo)" status="Operational" + 49 bands="700 / 850 / AWS / 1900" brand="NewCo 2015" cc="bs" country="Bahamas" operator="Cable Bahamas Ltd" status="Not operational" + 00-99 365 010 bands="" cc="ai" country="Anguilla" operator="Weblinks Limited" status="Operational" 840 bands="GSM 850 / UMTS / LTE 700" brand="FLOW" cc="ai" country="Anguilla" operator="Cable & Wireless" status="Operational" 000-999 366 020 bands="GSM 900 / GSM 1900 / UMTS" brand="Digicel" cc="dm" country="Dominica" operator="Digicel Group Limited" status="Operational" - 110 bands="GSM 850 / UMTS" brand="FLOW" cc="dm" country="Dominica" operator="Cable & Wireless" status="Operational" + 110 bands="GSM 850 / UMTS / LTE 700" brand="FLOW" cc="dm" country="Dominica" operator="Cable & Wireless" status="Operational" 000-999 368 01 bands="GSM 900 / GSM 850" brand="CUBACEL" cc="cu" country="Cuba" operator="Empresa de Telecomunicaciones de Cuba, SA" status="Operational" @@ -1250,8 +1376,8 @@ 06 bands="CDMA 800" brand="Naxtel" cc="az" country="Azerbaijan" operator="Nakhtel LLC" status="Operational" 00-99 401 - 01 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kz" country="Kazakhstan" operator="KaR-Tel LLP" status="Operational" - 02 bands="GSM 900 / GSM 1800" brand="Kcell" cc="kz" country="Kazakhstan" operator="Kcell JSC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 1800 / LTE 2100" brand="Beeline" cc="kz" country="Kazakhstan" operator="KaR-Tel LLP" status="Operational" + 02 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800" brand="Kcell" cc="kz" country="Kazakhstan" operator="Kcell JSC" status="Operational" 07 bands="UMTS 850 / GSM 1800 / LTE 1800" brand="Altel" cc="kz" country="Kazakhstan" operator="Altel" status="Operational" 08 bands="CDMA2000 800 / CDMA2000 450" brand="Kazakhtelecom" cc="kz" country="Kazakhstan" status="Operational" 77 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Tele2.kz" cc="kz" country="Kazakhstan" operator="MTS" status="Operational" @@ -1479,10 +1605,10 @@ 410 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Mobilink" cc="pk" country="Pakistan" operator="Mobilink-PMCL" status="Operational" 02 bands="CDMA2000 1900" brand="PTCL" cc="pk" country="Pakistan" operator="PTCL" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ufone" cc="pk" country="Pakistan" operator="Pakistan Telecommunication Mobile Ltd" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Ufone" cc="pk" country="Pakistan" operator="Pakistan Telecommunication Mobile Ltd" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Zong" cc="pk" country="Pakistan" operator="China Mobile" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="SCO Mobile" cc="pk" country="Pakistan" operator="SCO Mobile Ltd" status="Operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telenor" cc="pk" country="Pakistan" operator="Telenor Pakistan" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 850" brand="Telenor" cc="pk" country="Pakistan" operator="Telenor Pakistan" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Warid Pakistan" cc="pk" country="Pakistan" operator="WaridTel" status="Operational" 08 bands="GSM 900 / GSM 1800" brand="SCO Mobile" cc="pk" country="Pakistan" operator="SCO Mobile Ltd" status="Operational" 00-99 @@ -1497,27 +1623,28 @@ 00-99 413 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Mobitel" cc="lk" country="Sri Lanka" operator="Mobitel (Pvt) Ltd" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Dialog" cc="lk" country="Sri Lanka" operator="Dialog Axiata PLC" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / TD-LTE 2300" brand="Dialog" cc="lk" country="Sri Lanka" operator="Dialog Axiata PLC" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="lk" country="Sri Lanka" operator="Etisalat Lanka (Pvt) Ltd" status="Operational" + 04 bands="CDMA / WiMAX / TD-LTE 2300" brand="Lanka Bell" cc="lk" country="Sri Lanka" operator="Lanka Bell Ltd" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="lk" country="Sri Lanka" operator="Bharti Airtel Lanka (Pvt) Ltd" status="Operational" 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Hutch" cc="lk" country="Sri Lanka" operator="Hutchison Telecommunications Lanka (Pvt) Ltd" status="Operational" 00-99 414 - 01 bands="GSM 900 / UMTS 2100" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Posts and Telecommunications" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 2100" brand="MPT" cc="mm" country="Myanmar" operator="Myanmar Posts and Telecommunications" status="Operational" 03 bands="CDMA 800" brand="CDMA800" cc="mm" country="Myanmar" operator="Myanmar Economic Corporation" status="Operational" - 05 bands="UMTS 900 / UMTS 2100" brand="Ooredoo" cc="mm" country="Myanmar" operator="Ooredoo Myanmar" status="Operational" - 06 bands="GSM 900 / UMTS 2100" brand="Telenor" cc="mm" country="Myanmar" operator="Telenor Myanmar" status="Operational" + 05 bands="UMTS 900 / UMTS 2100 / LTE 2100" brand="Ooredoo" cc="mm" country="Myanmar" operator="Ooredoo Myanmar" status="Operational" + 06 bands="GSM 900 / UMTS 2100 / LTE 2100" brand="Telenor" cc="mm" country="Myanmar" operator="Telenor Myanmar" status="Operational" 00-99 415 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Alfa" cc="lb" country="Lebanon" operator="MIC 1" status="Operational" - 03 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" + 03 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="touch" cc="lb" country="Lebanon" operator="MIC 2" status="Operational" 05 bands="GSM 900" brand="Ogero Mobile" cc="lb" country="Lebanon" operator="Ogero Telecom" status="Operational" 00-99 416 - 01 bands="GSM 900" brand="zain JO" cc="jo" country="Jordan" operator="Jordan Mobile Telephone Services" status="Operational" - 02 bands="iDEN 800" brand="XPress Telecom" cc="jo" country="Jordan" operator="XPress Telecom" status="Operational" + 01 bands="GSM 900 / LTE 1800" brand="zain JO" cc="jo" country="Jordan" operator="Jordan Mobile Telephone Services" status="Operational" + 02 bands="iDEN 800" brand="XPress Telecom" cc="jo" country="Jordan" operator="XPress Telecom" status="Not operational" 03 bands="GSM 1800" brand="Umniah" cc="jo" country="Jordan" operator="Umniah Mobile Company" status="Operational" - 77 bands="GSM 900" brand="Orange" cc="jo" country="Jordan" operator="Petra Jordanian Mobile Telecommunications Company (MobileCom)" status="Operational" + 77 bands="GSM 900 / LTE 1800" brand="Orange" cc="jo" country="Jordan" operator="Petra Jordanian Mobile Telecommunications Company (MobileCom)" status="Operational" 00-99 417 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Syriatel" cc="sy" country="Syria" operator="Syriatel Mobile Telecom" status="Operational" @@ -1537,13 +1664,13 @@ 00-99 419 02 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="zain KW" cc="kw" country="Kuwait" operator="Zain Kuwait" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="K.S.C Ooredoo" cc="kw" country="Kuwait" operator="National Mobile Telecommunications" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="K.S.C Ooredoo" cc="kw" country="Kuwait" operator="National Mobile Telecommunications" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Viva" cc="kw" country="Kuwait" operator="Kuwait Telecommunication Company" status="Operational" 00-99 420 - 01 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 2300" brand="Al Jawal (STC )" cc="sa" country="Saudi Arabia" operator="Saudi Telecom Company" status="Operational" - 03 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 2600" brand="Mobily" cc="sa" country="Saudi Arabia" operator="Etihad Etisalat Company" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800/ LTE 2600" brand="Zain SA" cc="sa" country="Saudi Arabia" operator="Zain Saudi Arabia" status="Operational" + 01 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800 / TD-LTE 2300" brand="Al Jawal (STC )" cc="sa" country="Saudi Arabia" operator="Saudi Telecom Company" status="Operational" + 03 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800 / TD-LTE 2600" brand="Mobily" cc="sa" country="Saudi Arabia" operator="Etihad Etisalat Company" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="Zain SA" cc="sa" country="Saudi Arabia" operator="Zain Saudi Arabia" status="Operational" 05 bands="MVNO" brand="Virgin Mobile" cc="sa" country="Saudi Arabia" operator="Virgin Mobile Saudi Arabia" status="Operational" 21 bands="GSM-R 900" brand="RGSM" cc="sa" country="Saudi Arabia" operator="Saudi Railways GSM" status="Operational" 00-99 @@ -1554,13 +1681,13 @@ 04 bands="GSM 900" brand="HiTS-UNITEL" cc="ye" country="Yemen" operator="Y" status="Operational" 00-99 422 - 02 bands="GSM 900 / GSM 1800 / UMTS 900" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900" brand="ooredoo" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 1800 / TD-LTE 2300" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 800 / LTE 1800 / TD-LTE 2300" brand="ooredoo" cc="om" country="Oman" operator="Omani Qatari Telecommunications Company SAOC" status="Operational" 04 bands="" brand="Omantel" cc="om" country="Oman" operator="Oman Telecommunications Company" status="" 00-99 424 - 02 bands="GSM 900 / UMTS 2100" brand="Etisalat" cc="ae" country="United Arab Emirates" operator="Emirates Telecom Corp" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="du" cc="ae" country="United Arab Emirates" operator="Emirates Integrated Telecommunications Company" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Etisalat" cc="ae" country="United Arab Emirates" operator="Emirates Telecom Corp" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="du" cc="ae" country="United Arab Emirates" operator="Emirates Integrated Telecommunications Company" status="Operational" 00-99 425 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Partner" cc="il" country="Israel" operator="Partner Communications Company Ltd." status="Operational" @@ -1595,16 +1722,16 @@ 05 bands="GSM 900 / GSM 1800" brand="Batelco" cc="bh" country="Bahrain" operator="Bahrain Telecommunications Company" status="Operational" 00-99 427 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 2600" brand="ooredoo" cc="qa" country="Qatar" operator="ooredoo" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Vodafone" cc="qa" country="Qatar" operator="Vodafone Qatar" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="ooredoo" cc="qa" country="Qatar" operator="ooredoo" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2600" brand="Vodafone" cc="qa" country="Qatar" operator="Vodafone Qatar" status="Operational" 05 bands="TETRA 380" brand="Ministry of Interior" cc="qa" country="Qatar" operator="Ministry of Interior" status="Operational" 06 bands="LTE" brand="Ministry of Interior" cc="qa" country="Qatar" operator="Ministry of Interior" status="Operational" 00-99 428 - 88 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Unitel" cc="mn" country="Mongolia" operator="Unitel LLC" status="Operational" - 91 bands="CDMA2000 800 / UMTS 2100" brand="Skytel" cc="mn" country="Mongolia" operator="Skytel LLC" status="Operational" + 88 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Unitel" cc="mn" country="Mongolia" operator="Unitel LLC" status="Operational" + 91 bands="CDMA2000 800 / UMTS 2100 / LTE 1800" brand="Skytel" cc="mn" country="Mongolia" operator="Skytel LLC" status="Operational" 98 bands="CDMA2000 450 / UMTS 2100" brand="G-Mobile" cc="mn" country="Mongolia" operator="G-Mobile LLC" status="Operational" - 99 bands="GSM 900 / UMTS 2100" brand="Mobicom" cc="mn" country="Mongolia" operator="Mobicom Corporation" status="Operational" + 99 bands="GSM 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="Mobicom" cc="mn" country="Mongolia" operator="Mobicom Corporation" status="Operational" 00-99 429 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Namaste / NT Mobile" cc="np" country="Nepal" operator="Nepal Telecom" status="Operational" @@ -1619,7 +1746,7 @@ 19 bands="GSM 900" brand="MTCE (Espadan)" cc="ir" country="Iran" operator="Mobile Telecommunications Company of Esfahan" status="Operational" 20 bands="UMTS 900 / UMTS 2100 / LTE 1800" brand="Rightel" cc="ir" country="Iran" operator="Social Security Investment Co." status="Operational" 32 bands="GSM 900 / GSM 1800" brand="Taliya" cc="ir" country="Iran" operator="TCI of Iran and Iran Mobin" status="Operational" - 35 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" + 35 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600 / TD-LTE 3500" brand="MTN Irancell" cc="ir" country="Iran" operator="MTN Irancell Telecommunications Services Company" status="Operational" 70 bands="GSM 900 / GSM 1800" brand="TCI" cc="ir" country="Iran" operator="Telephone Communications Company of Iran" status="Operational" 93 bands="GSM 1800" brand="Iraphone" cc="ir" country="Iran" operator="Iraphone" status="Operational" 00-99 @@ -1630,8 +1757,8 @@ 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Beeline" cc="uz" country="Uzbekistan" operator="Unitel LLC" status="Operational" 05 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Ucell" cc="uz" country="Uzbekistan" operator="Coscom" status="Operational" 06 bands="CDMA2000 800" brand="Perfectum Mobile" cc="uz" country="Uzbekistan" operator="RUBICON WIRELESS COMMUNICATION" status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="UMS" cc="uz" country="Uzbekistan" operator="Universal Mobile Systems" status="Operational" - 08 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="UzMobile" cc="uz" country="Uzbekistan" operator="Uzbektelekom" status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="UMS" cc="uz" country="Uzbekistan" operator="Universal Mobile Systems" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="UzMobile" cc="uz" country="Uzbekistan" operator="Uzbektelekom" status="Operational" 00-99 436 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Tcell" cc="tj" country="Tajikistan" operator="JV Somoncom" status="Operational" @@ -1642,10 +1769,10 @@ 12 bands="UMTS 2100" brand="Tcell" cc="tj" country="Tajikistan" operator="Indigo" status="" 00-99 437 - 01 bands="GSM 900 / GSM 1800" brand="Beeline" cc="kg" country="Kyrgyzstan" operator="Sky Mobile LLC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800" brand="Beeline" cc="kg" country="Kyrgyzstan" operator="Sky Mobile LLC" status="Operational" 03 bands="CDMA2000" brand="Fonex" cc="kg" country="Kyrgyzstan" operator="Aktel Ltd" status="Operational" - 05 bands="GSM 900 / GSM 1800" brand="MegaCom" cc="kg" country="Kyrgyzstan" operator="Alfa Telecom CJSC" status="Operational" - 09 bands="GSM 900 / GSM 1800" brand="O!" cc="kg" country="Kyrgyzstan" operator="NurTelecom LLC" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800 / LTE 2100" brand="MegaCom" cc="kg" country="Kyrgyzstan" operator="Alfa Telecom CJSC" status="Operational" + 09 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="O!" cc="kg" country="Kyrgyzstan" operator="NurTelecom LLC" status="Operational" 00-99 438 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTS" cc="tm" country="Turkmenistan" operator="MTS Turkmenistan" status="Operational" @@ -1680,17 +1807,17 @@ 10 bands="WiMAX 2500" brand="UQ WiMAX" cc="jp" country="Japan" operator="UQ Communications Inc." status="Operational" 00-99 450 - 02 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" - 03 bands="CDMA2000 800" brand="Power 017" cc="kr" country="South Korea" operator="Shinsegi Telecom, Inc." status="Discontinued" - 04 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Discontinued" - 05 bands="CDMA2000 800 / UMTS 2100 / LTE 850 1800 2100" brand="SKTelecom" cc="kr" country="South Korea" operator="SK Telecom" status="Operational" - 06 bands="CDMA2000 1800 / LTE 850 2100 2600" brand="LG U+" cc="kr" country="South Korea" operator="LG Telecom" status="Operational" - 08 bands="UMTS 2100 / LTE 900 1800 2100" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" + 02 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Not operational" + 03 bands="CDMA2000 800" brand="Power 017" cc="kr" country="South Korea" operator="Shinsegi Telecom, Inc." status="Not operational" + 04 bands="CDMA2000 1800" brand="KT" cc="kr" country="South Korea" operator="KT" status="Not operational" + 05 bands="CDMA2000 800 / UMTS 2100 / LTE 850 / LTE 1800 / LTE 2100" brand="SKTelecom" cc="kr" country="South Korea" operator="SK Telecom" status="Operational" + 06 bands="CDMA2000 1800 / LTE 850 / LTE 2100 / LTE 2600" brand="LG U+" cc="kr" country="South Korea" operator="LG Telecom" status="Operational" + 08 bands="UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="olleh" cc="kr" country="South Korea" operator="KT" status="Operational" 11 bands="MVNO of SK Telecom" cc="kr" country="South Korea" operator="Korea Cable Telecom" status="Operational" 00-99 452 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MobiFone" cc="vn" country="Vietnam" operator="Vietnam Mobile Telecom Services Company" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 /UMTS 2100" brand="Vinaphone" cc="vn" country="Vietnam" operator="Vietnam Telecom Services Company" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vinaphone" cc="vn" country="Vietnam" operator="Vietnam Telecom Services Company" status="Operational" 03 bands="CDMA2000 800" brand="S-Fone" cc="vn" country="Vietnam" operator="S-Telecom" status="Not operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Viettel Mobile" cc="vn" country="Vietnam" operator="Viettel Telecom" status="Operational" 05 bands="GSM 900 / UMTS 2100" brand="Vietnamobile" cc="vn" country="Vietnam" operator="Hanoi Telecom" status="Operational" @@ -1702,22 +1829,22 @@ 00 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="1O1O / One2Free / New World Mobility / SUNMobile" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" 01 bands="MVNO" cc="hk" country="Hong Kong" operator="CITIC Telecom 1616" status="Operational" 02 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Operational" - 03 bands="UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="3" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" + 03 bands="UMTS 900 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="3" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="3 (2G)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 05 bands="CDMA 800" brand="3 (CDMA)" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Not operational" - 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2600" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" + 06 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="SmarTone" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" 07 bands="MVNO" brand="China Unicom" cc="hk" country="Hong Kong" operator="China Unicom (Hong Kong) Limited" status="Operational" 08 bands="MVNO" brand="Truphone" cc="hk" country="Hong Kong" operator="Truphone Limited" status="Operational" 09 bands="MVNO" cc="hk" country="Hong Kong" operator="China Motion Telecom" status="Operational" - 10 bands="GSM 1800" brand="New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" + 10 bands="GSM 1800" brand="New World Mobility" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not operational" 11 bands="MVNO" cc="hk" country="Hong Kong" operator="China-Hong Kong Telecom" status="Operational" - 12 bands="GSM 1800 / LTE 1800 / LTE 2600" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="Operational" + 12 bands="GSM 1800 / LTE 1800 / TD-LTE 2300 / LTE 2600" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="Operational" 13 bands="MVNO" brand="CMCC HK" cc="hk" country="Hong Kong" operator="China Mobile Hong Kong Company Limited" status="Operational" 14 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="Hutchison Telecom" status="Operational" 15 bands="GSM 1800" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" 16 bands="GSM 1800" brand="PCCW Mobile (2G)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 17 bands="GSM 1800" cc="hk" country="Hong Kong" operator="SmarTone Mobile Communications Limited" status="Operational" - 18 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not Operational" + 18 bands="GSM 900 / GSM 1800" cc="hk" country="Hong Kong" operator="CSL Limited" status="Not operational" 19 bands="UMTS 2100 / LTE 1800 / LTE 2600" brand="PCCW Mobile (3G/4G)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 20 bands="" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="" 21 bands="" cc="hk" country="Hong Kong" operator="21Vianet Mobile Ltd." status="" @@ -1726,17 +1853,17 @@ 29 bands="CDMA 800" brand="PCCW Mobile (CDMA)" cc="hk" country="Hong Kong" operator="PCCW-HKT" status="Operational" 00-99 455 - 00 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="Smartone – Comunicações Móveis, S.A." status="Operational" - 01 bands="GSM 900 / GSM 1800 / LTE" brand="CTM" cc="mo" country="Macau (China)" operator="Companhia de Telecomunicações de Macau, S.A.R.L." status="Operational" + 00 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="SmarTone" cc="mo" country="Macau (China)" operator="Smartone – Comunicações Móveis, S.A." status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="CTM" cc="mo" country="Macau (China)" operator="Companhia de Telecomunicações de Macau, S.A.R.L." status="Operational" 02 bands="CDMA 800" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom (Macau) Company Limited" status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telephone (Macau), Limitada" status="Operational" + 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telephone (Macau), Limitada" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="CTM" cc="mo" country="Macau (China)" operator="Companhia de Telecomunicações de Macau, S.A.R.L." status="Operational" 05 bands="UMTS 900 / UMTS 2100" brand="3" cc="mo" country="Macau (China)" operator="Hutchison Telephone (Macau), Limitada" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="SmarTone" cc="mo" country="Macau (China)" operator="Smartone – Comunicações Móveis, S.A." status="Operational" - 07 bands="LTE" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom (Macau) Limitada" status="Operational" + 07 bands="LTE 1800" brand="China Telecom" cc="mo" country="Macau (China)" operator="China Telecom (Macau) Limitada" status="Operational" 00-99 456 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Cellcard" cc="kh" country="Cambodia" operator="CamGSM / The Royal Group" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cellcard" cc="kh" country="Cambodia" operator="CamGSM / The Royal Group" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Smart" cc="kh" country="Cambodia" operator="Smart Axiata Co. Ltd" status="Operational" 03 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" 04 bands="GSM 1800 / UMTS 2100" brand="qb" cc="kh" country="Cambodia" operator="Cambodia Advance Communications Co. Ltd" status="Operational" @@ -1754,14 +1881,14 @@ 08 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Beeline" cc="la" country="Laos" operator="VimpelCom Lao Ltd" status="Operational" 00-99 460 - 00 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Operational" - 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / TD-LTE 2300 / TD-LTE 2600 / LTE 1800" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Operational" - 02 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" - 03 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" + 00 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2500" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / TD-LTE 2300 / TD-LTE 2500" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2500" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" + 03 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2500" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Operational" 04 bands="" cc="cn" country="China" operator="Global Star Satellite" status="" - 05 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2600" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" + 05 bands="CDMA2000 800 / LTE 1800 / LTE 2100 / TD-LTE 2300 / TD-LTE 2500" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="Not operational" 06 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="Not operational" - 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2600" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" + 07 bands="GSM 900 / GSM 1800 / TD-SCDMA 1900 / TD-SCDMA 2000 / TD-LTE 1900 / TD-LTE 2300 / TD-LTE 2500" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="Not operational" 08 bands="" brand="China Mobile" cc="cn" country="China" operator="China Mobile" status="" 09 bands="" brand="China Unicom" cc="cn" country="China" operator="China Unicom" status="" 11 bands="" brand="China Telecom" cc="cn" country="China" operator="China Telecom" status="" @@ -1781,9 +1908,9 @@ 56 bands="WiMAX 2600 / PHS" brand="FITEL" cc="tw" country="Taiwan" operator="First International Telecom" status="Not operational" 68 bands="WiMAX 2600" cc="tw" country="Taiwan" operator="Tatung InfoComm" status="Not operational" 88 bands="GSM 1800" brand="FarEasTone" cc="tw" country="Taiwan" operator="Far EasTone Telecommunications Co Ltd" status="Operational" - 89 bands="UMTS 2100 / LTE 900" brand="T Star" cc="tw" country="Taiwan" operator="Taiwan Star Telecom" status="Operational" + 89 bands="UMTS 2100 / LTE 900 / LTE 2600" brand="T Star" cc="tw" country="Taiwan" operator="Taiwan Star Telecom" status="Operational" 90 bands="LTE 900" brand="T Star" cc="tw" country="Taiwan" operator="Taiwan Star Telecom" status="" - 92 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Chunghwa" cc="tw" country="Taiwan" operator="Chunghwa Telecom" status="Operational" + 92 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2600" brand="Chunghwa" cc="tw" country="Taiwan" operator="Chunghwa Telecom" status="Operational" 93 bands="GSM 900" brand="MobiTai" cc="tw" country="Taiwan" operator="Mobitai Communications" status="Not operational" 97 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700 / LTE 1800" brand="Taiwan Mobile" cc="tw" country="Taiwan" operator="Taiwan Mobile Co. Ltd" status="Operational" 99 bands="GSM 900" brand="TransAsia" cc="tw" country="Taiwan" operator="TransAsia Telecoms" status="Not operational" @@ -1800,37 +1927,37 @@ 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="TeleTalk" cc="bd" country="Bangladesh" operator="Teletalk Bangladesh Limited" status="Operational" 05 bands="CDMA 800 / GSM 900 / GSM 1800" brand="Citycell" cc="bd" country="Bangladesh" operator="Pacific Bangladesh Telecom Limited" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="bd" country="Bangladesh" operator="Bharti airtel Bangladesh Ltd." status="Operational" - 09 bands="LTE 800 / LTE 2600 / WiMAX" brand="ollo" cc="bd" country="Bangladesh" operator="Bangladesh Internet Exchange Limited (BIEL)" status="Operational" + 09 bands="LTE 800 / LTE 2600 / WiMAX 3500" brand="ollo" cc="bd" country="Bangladesh" operator="Bangladesh Internet Exchange Limited (BIEL)" status="Operational" 00-99 472 - 01 bands="GSM 900 / UMTS 2100" brand="Dhiraagu" cc="mv" country="Maldives" operator="Dhivehi Raajjeyge Gulhun" status="Operational" + 01 bands="GSM 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Dhiraagu" cc="mv" country="Maldives" operator="Dhivehi Raajjeyge Gulhun" status="Operational" 02 bands="GSM 900 / UMTS 2100 / LTE 2600" brand="Ooredoo" cc="mv" country="Maldives" operator="Wataniya Telecom Maldives" status="Operational" 00-99 502 01 bands="CDMA2000 450" brand="ATUR 450" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" 10 cc="my" country="Malaysia" operator="DiGi Telecommunications" status="" - 11 bands="CDMA2000 850" brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" - 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Maxis" cc="my" country="Malaysia" operator="Maxis Mobile Services SDN Berhad" status="Operational" - 13 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" + 11 bands="CDMA2000 850 / LTE 850" brand="TM Homeline" cc="my" country="Malaysia" operator="Telekom Malaysia Bhd" status="Operational" + 12 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Maxis" cc="my" country="Malaysia" operator="Maxis Mobile Services SDN Berhad" status="Operational" + 13 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" 14 cc="my" country="Malaysia" operator="Telekom Malaysia Berhad for PSTN SMS" status="" 150 bands="MVNO" brand="Tune Talk" cc="my" country="Malaysia" operator="Tune Talk Sdn Bhd" status="Operational" 151 bands="MVNO" cc="my" country="Malaysia" operator="Baraka Telecom Sdn Bhd (MVNE)" status="Operational" - 152 bands="WiMAX 2.3 GHz / LTE 4G" brand="Yes" cc="my" country="Malaysia" operator="YTL Communications Sdn Bhd" status="Operational" - 153 bands="WiMAX 2.3 GHz" cc="my" country="Malaysia" operator="Packet One Networks Sdn Bhd" status="Operational" + 152 bands="WiMAX 2300 / TD-LTE 2300 / TD-LTE 2600" brand="Yes" cc="my" country="Malaysia" operator="YTL Communications Sdn Bhd" status="Operational" + 153 bands="WiMAX 2300 / LTE" brand="Webe" cc="my" country="Malaysia" operator="Packet One Networks Sdn Bhd" status="Operational" 154 bands="" cc="my" country="Malaysia" operator="Talk Focus Sdn Bhd" status="" 155 bands="" cc="my" country="Malaysia" operator="Clixster Mobile Sdn Bhd" status="" - 156 bands="LTE 4G / MVNO" brand="Altel" cc="my" country="Malaysia" operator="Altel Communications Sdn Bhd" status="Operational" + 156 bands="MVNO" brand="Altel" cc="my" country="Malaysia" operator="Altel Communications Sdn Bhd" status="Operational" 157 bands="" cc="my" country="Malaysia" operator="Telekomunikasi Indonesia International (M) Sdn Bhd" status="" - 16 bands="GSM 1800 / UMTS 2100 / LTE 2600" brand="DiGi" cc="my" country="Malaysia" operator="DiGi Telecommunications" status="Operational" + 16 bands="GSM 1800 / UMTS 2100 / LTE 1800 / LTE 2600" brand="DiGi" cc="my" country="Malaysia" operator="DiGi Telecommunications" status="Operational" 17 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Hotlink" cc="my" country="Malaysia" operator="Maxis Prepaid" status="Operational" - 18 bands="UMTS 2100" brand="U Mobile" cc="my" country="Malaysia" operator="U Mobile Sdn Bhd" status="Operational" + 18 bands="UMTS 2100 / LTE 2600" brand="U Mobile" cc="my" country="Malaysia" operator="U Mobile Sdn Bhd" status="Operational" 19 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600" brand="Celcom" cc="my" country="Malaysia" operator="Celcom Axiata Berhad" status="Operational" 20 bands="CDMA" cc="my" country="Malaysia" operator="Electcoms Wireless Sdn Bhd" status="Operational" 00-99 505 - 01 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / TD-LTE 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 900 / LTE 1800 / LTE 2100" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2100 / TD-LTE 2300" brand="Optus" cc="au" country="Australia" operator="Singtel Optus Proprietary Limited" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 850 / LTE 1800" brand="Vodafone" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" 04 bands="" cc="au" country="Australia" operator="Department of Defence" status="Operational" 05 brand="Ozitel" cc="au" country="Australia" status="Not operational" 06 bands="UMTS 2100" brand="3" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Not operational" @@ -1840,15 +1967,15 @@ 10 bands="GSM 900" brand="Norfolk Telecom" cc="nf" country="Norfolk Island" operator="Norfolk Telecom" status="Operational" 11 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Ltd." status="" 12 bands="UMTS 2100" brand="3" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Not operational" - 13 bands="GSM 1800" brand="Railcorp" cc="au" country="Australia" operator="Railcorp, Transport for New South Wales" status="Operational" - 14 bands="GSM 1800 / UMTS 2100" brand="AAPT" cc="au" country="Australia" operator="Telecom New Zealand" status="Operational" + 13 bands="GSM-R 1800" brand="Railcorp" cc="au" country="Australia" operator="Railcorp, Transport for New South Wales" status="Operational" + 14 bands="MVNO" brand="AAPT" cc="au" country="Australia" operator="TPG Telecom" status="Operational" 15 brand="3GIS" cc="au" country="Australia" status="Not operational" - 16 bands="GSM 1800" brand="VicTrack" cc="au" country="Australia" operator="Victorian Rail Track" status="Reserved" - 17 bands="" cc="au" country="Australia" operator="Vivid Wireless Pty. Ltd." status="" - 18 brand="Pactel" cc="au" country="Australia" operator="Pactel International Pty Ltd" status="Reserved" + 16 bands="GSM-R 1800" brand="VicTrack" cc="au" country="Australia" operator="Victorian Rail Track" status="Operational" + 17 bands="TD-LTE 2300" cc="au" country="Australia" operator="Optus" status="" + 18 brand="Pactel" cc="au" country="Australia" operator="Pactel International Pty Ltd" status="" 19 bands="MVNO" brand="Lycamobile" cc="au" country="Australia" operator="Lycamobile Pty Ltd" status="Operational" 20 bands="" cc="au" country="Australia" operator="Ausgrid Corporation" status="" - 21 bands="" cc="au" country="Australia" operator="Queensland Rail Limited" status="" + 21 bands="GSM-R 1800" cc="au" country="Australia" operator="Queensland Rail Limited" status="" 22 bands="" cc="au" country="Australia" operator="iiNet Ltd" status="" 23 bands="LTE 2100" cc="au" country="Australia" operator="Challenge Networks Pty. Ltd." status="Planning" 24 bands="" cc="au" country="Australia" operator="Advanced Communications Technologies Pty. Ltd." status="" @@ -1863,9 +1990,11 @@ 34 bands="" cc="au" country="Australia" operator="Santos Limited" status="" 35 bands="" cc="au" country="Australia" operator="MessageBird Pty Ltd" status="" 36 bands="" brand="Optus" cc="au" country="Australia" operator="Optus Mobile Pty. Ltd." status="" - 38 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="Crazy John's" cc="au" country="Australia" operator="Vodafone Hutchison Australia Proprietary Limited" status="Operational" - 62 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" - 68 bands="LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="" + 37 bands="" cc="au" country="Australia" operator="Yancoal Australia Ltd" status="" + 38 bands="MVNO" brand="Truphone" cc="au" country="Australia" operator="Truphone Pty Ltd" status="Operational" + 39 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Ltd." status="" + 62 bands="TD-LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="Operational" + 68 bands="TD-LTE 2300" brand="NBN" cc="au" country="Australia" operator="National Broadband Network Co." status="Operational" 71 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" 72 bands="" brand="Telstra" cc="au" country="Australia" operator="Telstra Corporation Limited" status="Operational" 88 brand="Localstar Holding Pty. Ltd." cc="au" country="Australia" status="Not operational" @@ -1876,9 +2005,9 @@ 00 bands="Satellite" brand="PSN" cc="id" country="Indonesia" operator="PT Pasifik Satelit Nusantara (ACeS)" status="Operational" 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Indosat Ooredoo" cc="id" country="Indonesia" operator="PT Indonesian Satellite Corporation Tbk (INDOSAT)" status="Operational" 03 bands="CDMA 800" brand="StarOne" cc="id" country="Indonesia" operator="PT Indosat Tbk" status="Not operational" - 07 bands="CDMA 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Operational" + 07 bands="CDMA 800" brand="TelkomFlexi" cc="id" country="Indonesia" operator="PT Telkom" status="Not operational" 08 bands="GSM 1800 / UMTS 2100" brand="AXIS" cc="id" country="Indonesia" operator="PT Natrindo Telepon Seluler" status="Not operational" - 09 bands="CDMA 800 / CDMA 1900 / LTE 850 / TD-LTE 2300" brand="Smartfren" cc="id" country="Indonesia" operator="PT Smart Telecom" status="Operational" + 09 bands="CDMA 800 / CDMA 1900 / LTE 850 / TD-LTE 2300" brand="Smartfren" cc="id" country="Indonesia" operator="PT Smartfren Telecom" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="Telkomsel" cc="id" country="Indonesia" operator="PT Telekomunikasi Selular" status="Operational" 11 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800" brand="XL" cc="id" country="Indonesia" operator="PT XL Axiata Tbk" status="Operational" 20 bands="GSM 1800" brand="TELKOMMobile" cc="id" country="Indonesia" operator="PT Telkom Indonesia Tbk" status="Not operational" @@ -1887,7 +2016,7 @@ 28 bands="CDMA 800 / LTE 850 / TD-LTE 2300" brand="Fren/Hepi" cc="id" country="Indonesia" operator="PT Mobile-8 Telecom" status="Operational" 88 bands="TD-LTE 2300" brand="BOLT! Super 4G" cc="id" country="Indonesia" operator="PT Internux" status="Operational" 89 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="3" cc="id" country="Indonesia" operator="PT Hutchison CP Telecommunications" status="Operational" - 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Operational" + 99 bands="CDMA 800" brand="Esia" cc="id" country="Indonesia" operator="PT Bakrie Telecom" status="Not Operational" 00-99 514 01 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Telkomcel" cc="tl" country="East Timor" operator="PT Telekomunikasi Indonesia International" status="Operational" @@ -1896,19 +2025,19 @@ 00-99 515 01 bands="GSM 900" brand="Islacom" cc="ph" country="Philippines" operator="Globe Telecom via Innove Communications" status="Not operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 1800" brand="SMART" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" - 05 bands="GSM 1800 / UMTS 2100 / LTE 1800" brand="Sun" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 900 / UMTS 2100 / LTE 1800 / TD-LTE 2500" brand="Globe" cc="ph" country="Philippines" operator="Globe Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 850 / LTE 1800 / LTE 2100" brand="SMART" cc="ph" country="Philippines" operator="PLDT via Smart Communications" status="Operational" + 05 bands="GSM 1800 / UMTS 2100" brand="Sun Cellular" cc="ph" country="Philippines" operator="Digital Telecommunications Philippines" status="Operational" 11 bands="" cc="ph" country="Philippines" operator="PLDT via ACeS Philippines" status="" 18 bands="GSM 900 / UMTS 2100" brand="Cure" cc="ph" country="Philippines" operator="PLDT via Smart's Connectivity Unlimited Resources Enterprise" status="Not operational" - 24 bands="" brand="ABS-CBN" cc="ph" country="Philippines" operator="ABS-CBN Convergence with Globe Telecom" status="Operational" - 88 bands="" cc="ph" country="Philippines" operator="Nextel" status="" + 24 bands="MVNO" brand="ABS-CBN Mobile" cc="ph" country="Philippines" operator="ABS-CBN Convergence with Globe Telecom" status="Operational" + 88 bands="iDEN" cc="ph" country="Philippines" operator="Next Mobile Inc." status="Operational" 00-99 520 00 bands="UMTS 850" brand="my by CAT" cc="th" country="Thailand" operator="CAT Telecom" status="Operational" 01 bands="GSM 900 / UMTS 900" brand="AIS" cc="th" country="Thailand" operator="Advanced Info Service" status="Not operational" 02 bands="CDMA 800" brand="CAT CDMA" cc="th" country="Thailand" operator="CAT Telecom" status="Not operational" - 03 bands="UMTS 2100 / LTE 1800" brand="AIS" cc="th" country="Thailand" operator="Advanced Wireless Network Company Ltd." status="Operational" + 03 bands="UMTS 2100 / LTE 1800 / LTE 2100" brand="AIS" cc="th" country="Thailand" operator="Advanced Wireless Network Company Ltd." status="Operational" 04 bands="UMTS 2100 / LTE 1800 / LTE 2100" brand="TrueMove H" cc="th" country="Thailand" operator="Real Future Company Ltd." status="Operational" 05 bands="UMTS 850 / UMTS 2100 / LTE 1800 / LTE 2100" brand="dtac TriNet" cc="th" country="Thailand" operator="DTAC Network Company Ltd." status="Operational" 15 bands="UMTS 2100" brand="TOT 3G" cc="th" country="Thailand" operator="TOT Public Company Limited" status="Operational" @@ -1965,13 +2094,13 @@ 541 00 bands="GSM 900" brand="AIL" cc="vu" country="Vanuatu" operator="ACeS International (AIL)" status="Operational" 01 bands="GSM 900" brand="SMILE" cc="vu" country="Vanuatu" operator="Telecom Vanuatu Ltd" status="Operational" - 05 bands="GSM 900 / UMTS 900" brand="Digicel" cc="vu" country="Vanuatu" operator="Digicel Vanuatu Ltd" status="Operational" + 05 bands="GSM 900 / UMTS 900 / LTE 700" brand="Digicel" cc="vu" country="Vanuatu" operator="Digicel Vanuatu Ltd" status="Operational" 07 bands="TD-LTE 2300" brand="WanTok" cc="vu" country="Vanuatu" operator="WanTok Vanuatu Ltd" status="Operational" 00-99 542 01 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Vodafone" cc="fj" country="Fiji" operator="Vodafone Fiji" status="Operational" - 02 bands="GSM 900 / UMTS 900 / UMTS 2100 / WIMAX 4G" brand="Digicel" cc="fj" country="Fiji" operator="Digicel Fiji" status="Operational" - 03 bands="CDMA" cc="fj" country="Fiji" operator="Telecom Fiji Ltd" status="" + 02 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800 / WiMAX" brand="Digicel" cc="fj" country="Fiji" operator="Digicel Fiji" status="Operational" + 03 bands="CDMA2000 850 / LTE 700" cc="fj" country="Fiji" operator="Telecom Fiji Ltd" status="Operational" 00-99 543 01 bands="" cc="wf" country="Wallis and Futuna" operator="Manuia" status="" @@ -1987,7 +2116,7 @@ 01 bands="GSM 900 / UMTS 900 / LTE 800 / LTE 1800 / LTE 2600" brand="Mobilis" cc="nc" country="New Caledonia (France)" operator="OPT New Caledonia" status="Operational" 00-99 547 - 05 bands="WiMAX" cc="pf" country="French Polynesia" operator="VITI" status="Operational" + 05 bands="WiMAX / LTE 800 / LTE 2600" brand="Ora" cc="pf" country="French Polynesia" operator="VITI" status="Operational" 10 bands="GSM 900" cc="pf" country="French Polynesia" operator="Mara Telecom" status="Not operational" 15 bands="GSM 900 / UMTS 2100" brand="Vodafone" cc="pf" country="French Polynesia" operator="Pacific Mobile Telecom" status="Operational" 20 bands="GSM 900 / UMTS 2100" brand="Vini" cc="pf" country="French Polynesia" operator="Tikiphone SA" status="Operational" @@ -2007,7 +2136,7 @@ 00-99 552 01 bands="GSM 900" brand="PNCC" cc="pw" country="Palau" operator="Palau National Communications Corp." status="Operational" - 80 bands="GSM 1800" brand="Palau Mobile" cc="pw" country="Palau" operator="Palau Mobile Corporation" status="Operational" + 80 bands="GSM 1800" brand="Palau Mobile" cc="pw" country="Palau" operator="Palau Mobile Corporation" status="Not operational" 00-99 553 01 bands="GSM 900" brand="TTC" cc="tv" country="Tuvalu" operator="Tuvalu Telecom" status="Operational" @@ -2021,9 +2150,9 @@ 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="eg" country="Egypt" operator="Etisalat Egypt" status="Operational" 00-99 603 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / CDMA 1900" brand="Mobilis" cc="dz" country="Algeria" operator="ATM Mobilis" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Djezzy" cc="dz" country="Algeria" operator="Orascom Telecom Algerie Spa" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Ooredoo" cc="dz" country="Algeria" operator="Wataniya Telecom Algerie" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800 / CDMA 1900" brand="Mobilis" cc="dz" country="Algeria" operator="Algérie Télécom" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Djezzy" cc="dz" country="Algeria" operator="Optimum Telecom Algérie Spa" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Ooredoo" cc="dz" country="Algeria" operator="Wataniya Telecom Algérie" status="Operational" 00-99 604 00 bands="GSM 900 / GSM 1800 / LTE" brand="Méditel" cc="ma" country="Morocco" operator="Medi Telecom" status="Operational" @@ -2032,9 +2161,9 @@ 05 bands="GSM 900 / GSM 1800 / LTE 1800" brand="INWI (Telecommunications)" cc="ma" country="Morocco" operator="WANA - Groupe ONA" status="Operational" 00-99 605 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" - 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Tunicell" cc="tn" country="Tunisia" operator="Tunisie Telecom" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 1800" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="ooredoo Tunisiana" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Orange" cc="tn" country="Tunisia" operator="Orange Tunisie" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 800 / LTE 1800" brand="Tunicell" cc="tn" country="Tunisia" operator="Tunisie Telecom" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800 / LTE 1800" brand="OOREDOO TN" cc="tn" country="Tunisia" operator="ooredoo Tunisiana" status="Operational" 00-99 606 00 bands="GSM900 / GSM 1800 / UMTS 2100" brand="Libyana" cc="ly" country="Libya" operator="Libyana" status="Operational" @@ -2044,10 +2173,12 @@ 06 bands="CDMA2000" brand="Hatef Libya" cc="ly" country="Libya" operator="Hatef Libya" status="Operational" 00-99 607 - 01 bands="GSM 900 / GSM 1900" brand="Gamcel" cc="gm" country="Gambia" operator="Gamcel" status="Operational" - 02 bands="GSM 900 / GSM 1900" brand="Africell" cc="gm" country="Gambia" operator="Africell" status="Operational" - 03 bands="GSM 900 / GSM 1900" brand="Comium" cc="gm" country="Gambia" operator="Comium" status="Operational" + 01 bands="GSM 900 / GSM 1800" brand="Gamcel" cc="gm" country="Gambia" operator="Gamcel" status="Operational" + 02 bands="GSM 900 / GSM 1800" brand="Africell" cc="gm" country="Gambia" operator="Africell" status="Operational" + 03 bands="GSM 900 / GSM 1800" brand="Comium" cc="gm" country="Gambia" operator="Comium" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="QCell" cc="gm" country="Gambia" operator="QCell Gambia" status="Operational" + 05 bands="WiMAX / LTE" cc="gm" country="Gambia" operator="GAMTEL-Ecowan" status="" + 06 bands="TD-LTE 2300" cc="gm" country="Gambia" operator="NETPAGE" status="Operational" 00-99 608 01 bands="GSM 900 / UMTS 2100" brand="Orange" cc="sn" country="Senegal" operator="Sonatel" status="Operational" @@ -2105,15 +2236,15 @@ 00-99 617 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Orange" cc="mu" country="Mauritius" operator="Cellplus Mobile Communications Ltd." status="Operational" - 02 bands="GSM 900 / CDMA2000" brand="MTML" cc="mu" country="Mauritius" operator="Mahanagar Telephone (Mauritius) Ltd." status="Operational" - 03 bands="" brand="MTML" cc="mu" country="Mauritius" operator="Mahanagar Telephone (Mauritius) Ltd." status="" + 02 bands="CDMA2000" brand="MOKOZE / AZU" cc="mu" country="Mauritius" operator="Mahanagar Telephone Mauritius Limited (MTML)" status="Operational" + 03 bands="GSM 900 / LTE 1800" brand="CHILI" cc="mu" country="Mauritius" operator="Mahanagar Telephone Mauritius Limited (MTML)" status="Operational" 10 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Emtel" cc="mu" country="Mauritius" operator="Emtel Ltd." status="Operational" 00-99 618 01 bands="GSM 900" brand="Lonestar Cell" cc="lr" country="Liberia" operator="Lonestar Communications Corporation" status="Operational" 02 bands="" brand="Libercell" cc="lr" country="Liberia" operator="Atlantic Wireless (Liberia) Inc." status="Not operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Novafone" cc="lr" country="Liberia" operator="Novafone Inc." status="Operational" - 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Cellcom" cc="lr" country="Liberia" operator="Cellcom Telecommunications, Inc." status="Operational" + 07 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Cellcom" cc="lr" country="Liberia" operator="Cellcom Telecommunications, Inc." status="Operational" 20 bands="CDMA2000" brand="LIBTELCO" cc="lr" country="Liberia" operator="Liberia Telecommunications Corporation" status="Operational" 00-99 619 @@ -2132,7 +2263,7 @@ 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE 800" brand="MTN" cc="gh" country="Ghana" operator="MTN Group" status="Operational" 02 bands="GSM 900 / GSM 1800 / UMTS / LTE 1800" brand="Vodafone" cc="gh" country="Ghana" operator="Vodafone Group" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS" brand="tiGO" cc="gh" country="Ghana" operator="Millicom Ghana" status="Operational" - 04 bands="CDMA2000" brand="Expresso" cc="gh" country="Ghana" operator="Kasapa / Hutchison Telecom" status="Operational" + 04 bands="CDMA2000 850" brand="Expresso" cc="gh" country="Ghana" operator="Kasapa / Hutchison Telecom" status="Operational" 06 bands="GSM 900 / GSM 1800 / UMTS" brand="Airtel" cc="gh" country="Ghana" operator="Airtel" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS" brand="Globacom" cc="gh" country="Ghana" operator="Globacom Group" status="Operational" 08 bands="LTE 2600" brand="Surfline" cc="gh" country="Ghana" operator="Surfline Communications Ltd" status="Operational" @@ -2142,14 +2273,15 @@ 621 00 bands="LTE 1900" cc="ng" country="Nigeria" operator="Capcom" status="Not operational" 20 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="ng" country="Nigeria" operator="Bharti Airtel Limited" status="Operational" + 22 bands="LTE 800" brand="InterC" cc="ng" country="Nigeria" operator="InterC Network Ltd." status="Operational" 24 bands="TD-LTE 2300" cc="ng" country="Nigeria" operator="Spectranet" status="Operational" - 25 bands="CDMA2000 800 / CDMA2000 1900" brand="Visafone" cc="ng" country="Nigeria" operator="Visafone Communications Ltd." status="Operational" + 25 bands="CDMA2000 800 / CDMA2000 1900" brand="Visafone" cc="ng" country="Nigeria" operator="Visafone Communications Ltd." status="Not operational" 26 bands="TD-LTE 2300" cc="ng" country="Nigeria" operator="Swift" status="Operational" 27 bands="LTE 800" brand="Smile" cc="ng" country="Nigeria" operator="Smile Communications Nigeria" status="Operational" - 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" + 30 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 2600 / LTE 3500" brand="MTN" cc="ng" country="Nigeria" operator="MTN Nigeria Communications Limited" status="Operational" 40 bands="LTE 900 / LTE 1800" brand="Ntel" cc="ng" country="Nigeria" operator="Nigerian Mobile Telecommunications Limited" status="Operational" - 50 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Glo" cc="ng" country="Nigeria" operator="Globacom Ltd" status="Operational" - 60 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" + 50 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700" brand="Glo" cc="ng" country="Nigeria" operator="Globacom Ltd" status="Operational" + 60 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Etisalat" cc="ng" country="Nigeria" operator="Emerging Markets Telecommunication Services Ltd (Etisalat)" status="Operational" 00-99 622 01 bands="GSM 900 / UMTS" brand="Airtel" cc="td" country="Chad" operator="Bharti Airtel SA" status="Operational" @@ -2164,9 +2296,9 @@ 04 bands="GSM 900" brand="Nationlink" cc="cf" country="Central African Republic" operator="Nationlink Telecom RCA" status="Operational" 00-99 624 - 01 bands="GSM 900" brand="MTN Cameroon" cc="cm" country="Cameroon" operator="Mobile Telephone Network Cameroon Ltd" status="Operational" + 01 bands="GSM 900 / TD-LTE 2500" brand="MTN Cameroon" cc="cm" country="Cameroon" operator="Mobile Telephone Network Cameroon Ltd" status="Operational" 02 bands="GSM 900" brand="Orange" cc="cm" country="Cameroon" operator="Orange Cameroun S.A." status="Operational" - 04 bands="" brand="Nexttel" cc="cm" country="Cameroon" operator="Nexttel" status="Not operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Nexttel" cc="cm" country="Cameroon" operator="Viettel Cameroun" status="Operational" 00-99 625 01 bands="GSM 900 / UMTS" brand="CVMOVEL" cc="cv" country="Cape Verde" operator="CVMóvel, S.A." status="Operational" @@ -2180,10 +2312,10 @@ 03 bands="GSM 900 / GSM 1800" brand="Hits GQ" cc="gq" country="Equatorial Guinea" operator="HiTs EG.SA" status="Operational" 00-99 628 - 01 bands="GSM 900" brand="Libertis" cc="ga" country="Gabon" operator="Gabon Telecom & Libertis S.A." status="Operational" + 01 bands="GSM 900 / LTE" brand="Libertis" cc="ga" country="Gabon" operator="Gabon Telecom & Libertis S.A." status="Operational" 02 bands="GSM 900" brand="Moov" cc="ga" country="Gabon" operator="Atlantique Télécom (Etisalat Group) Gabon S.A." status="Operational" - 03 bands="GSM 900" brand="Airtel" cc="ga" country="Gabon" operator="Airtel Gabon S.A." status="Operational" - 04 bands="GSM 900" brand="Azur" cc="ga" country="Gabon" operator="USAN Gabon S.A." status="Operational" + 03 bands="GSM 900 / LTE" brand="Airtel" cc="ga" country="Gabon" operator="Airtel Gabon S.A." status="Operational" + 04 bands="GSM 900 / GSM 1800" brand="Azur" cc="ga" country="Gabon" operator="USAN Gabon S.A." status="Operational" 05 bands="" brand="RAG" cc="ga" country="Gabon" operator="Réseau de l’Administration Gabonaise" status="" 00-99 629 @@ -2209,7 +2341,7 @@ 632 01 bands="GSM 900 / GSM 1800" brand="Guinetel" cc="gw" country="Guinea-Bissau" operator="Guinétel S.A." status="Operational" 02 bands="GSM 900 / GSM 1800" brand="MTN Areeba" cc="gw" country="Guinea-Bissau" operator="Spacetel Guiné-Bissau S.A." status="Operational" - 03 bands="GSM 900 / GSM 1800" brand="Orange" cc="gw" country="Guinea-Bissau" status="Operational" + 03 bands="GSM 900 / GSM 1800 / LTE" brand="Orange" cc="gw" country="Guinea-Bissau" status="Operational" 07 bands="GSM 900 / GSM 1800" brand="Guinetel" cc="gw" country="Guinea-Bissau" operator="Guinétel S.A." status="Operational" 00-99 633 @@ -2230,7 +2362,7 @@ 11 bands="CDMA" brand="Rwandatel" cc="rw" country="Rwanda" operator="Rwandatel S.A." status="Not operational" 12 bands="GSM" brand="Rwandatel" cc="rw" country="Rwanda" operator="Rwandatel S.A." status="Not operational" 13 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Tigo" cc="rw" country="Rwanda" operator="TIGO RWANDA S.A" status="Operational" - 14 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE" brand="Airtel" cc="rw" country="Rwanda" operator="Airtel RWANDA" status="Operational" + 14 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="rw" country="Rwanda" operator="Airtel RWANDA" status="Operational" 17 bands="LTE 800" brand="Olleh" cc="rw" country="Rwanda" operator="Olleh Rwanda Networks" status="Operational" 00-99 636 @@ -2259,17 +2391,18 @@ 07 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Orange Kenya" cc="ke" country="Kenya" operator="Telkom Kenya" status="Operational" 00-99 640 - 01 bands="" cc="tz" country="Tanzania" operator="Rural NetCo Limited" status="" + 01 bands="UMTS 900" cc="tz" country="Tanzania" operator="Rural NetCo Limited" status="Not operational" 02 bands="GSM 900 / GSM 1800 / LTE 800" brand="tiGO" cc="tz" country="Tanzania" operator="MIC Tanzania Limited" status="Operational" 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Zantel" cc="tz" country="Tanzania" operator="Zanzibar Telecom Ltd" status="Operational" 04 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Vodacom" cc="tz" country="Tanzania" operator="Vodacom Tanzania Limited" status="Operational" 05 bands="GSM 900 / GSM 1800" brand="Airtel" cc="tz" country="Tanzania" operator="Bharti Airtel" status="Operational" - 06 bands="CDMA" brand="Sasatel" cc="tz" country="Tanzania" operator="Dovetel Limited" status="Operational" - 07 bands="CDMA 800" brand="TTCL Mobile" cc="tz" country="Tanzania" operator="Tanzania Telecommunication Company LTD (TTCL)" status="Operational" - 08 bands="CDMA" brand="Benson Online (BOL)" cc="tz" country="Tanzania" operator="Benson Informatics Limited" status="Operational" - 09 brand="Hits" cc="tz" country="Tanzania" operator="ExcellentCom Tanzania Limited" status="Not operational" + 06 bands="CDMA 800" brand="Sasatel (Dovetel)" cc="tz" country="Tanzania" operator="Dovetel Limited" status="Not operational" + 07 bands="CDMA 800 / LTE 1800 / TD-LTE 2300" brand="TTCL Mobile" cc="tz" country="Tanzania" operator="Tanzania Telecommunication Company LTD (TTCL)" status="Operational" + 08 bands="TD-LTE 2300" brand="Smart" cc="tz" country="Tanzania" operator="Benson Informatics Limited" status="Operational" + 09 bands="GSM 900 / GSM 1800" brand="Halotel" cc="tz" country="Tanzania" operator="Viettel Tanzania Limited" status="Operational" 11 bands="LTE 800" brand="SmileCom" cc="tz" country="Tanzania" operator="Smile Telecoms Holdings Ltd." status="Operational" - 12 bands="" cc="tz" country="Tanzania" operator="MyCell Limited" status="" + 12 bands="" cc="tz" country="Tanzania" operator="MyCell Limited" status="Not operational" + 13 bands="" brand="Cootel" cc="tz" country="Tanzania" operator="Wiafrica Tanzania Limited" status="" 00-99 641 01 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="ug" country="Uganda" operator="Bharti Airtel" status="Operational" @@ -2286,12 +2419,12 @@ 66 bands="" brand="i-Tel" cc="ug" country="Uganda" operator="i-Tel Ltd" status="" 00-99 642 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Spacetel" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="econet Leo" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" 02 bands="GSM 900" brand="Tempo" cc="bi" country="Burundi" operator="VTEL MEA" status="Not operational" 03 bands="GSM 900" brand="Onatel" cc="bi" country="Burundi" operator="Onatel" status="Operational" 07 bands="GSM 1800 / UMTS" brand="Smart Mobile" cc="bi" country="Burundi" operator="LACELL SU" status="Operational" - 08 bands="" brand="HiTs Telecom" cc="bi" country="Burundi" operator="HiTs Telecom" status="Not operational" - 82 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Leo" cc="bi" country="Burundi" operator="Orascom Telecom" status="Operational" + 08 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100 / LTE" brand="Lumitel" cc="bi" country="Burundi" operator="Viettel Burundi" status="Operational" + 82 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="econet Leo" cc="bi" country="Burundi" operator="Econet Wireless Burundi PLC" status="Operational" 00-99 643 01 bands="GSM 900 / GSM 1800 / UMTS 900 / UMTS 2100" brand="mCel" cc="mz" country="Mozambique" operator="Mocambique Celular S.A." status="Operational" @@ -2301,7 +2434,7 @@ 645 01 bands="GSM 900" brand="Airtel" cc="zm" country="Zambia" operator="Bharti Airtel" status="Operational" 02 bands="GSM 900 / LTE 1800" brand="MTN" cc="zm" country="Zambia" operator="MTN Group" status="Operational" - 03 bands="GSM 900" brand="ZAMTEL" cc="zm" country="Zambia" operator="Zambia Telecommunications Company Ltd" status="Operational" + 03 bands="GSM 900 / LTE" brand="ZAMTEL" cc="zm" country="Zambia" operator="Zambia Telecommunications Company Ltd" status="Operational" 00-99 646 01 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Airtel" cc="mg" country="Madagascar" operator="Bharti Airtel" status="Operational" @@ -2316,28 +2449,29 @@ 10 bands="GSM 900" brand="SFR Reunion" cc="re" country="Réunion (France)" operator="Societe Reunionnaise de Radiotelephone" status="Operational" 00-99 648 - 01 bands="GSM 900" brand="Net*One" cc="zw" country="Zimbabwe" operator="Net*One Cellular (Pvt) Ltd" status="Operational" + 01 bands="GSM 900 / LTE" brand="Net*One" cc="zw" country="Zimbabwe" operator="Net*One Cellular (Pvt) Ltd" status="Operational" 03 bands="GSM 900" brand="Telecel" cc="zw" country="Zimbabwe" operator="Telecel Zimbabwe (PVT) Ltd" status="Operational" 04 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Econet" cc="zw" country="Zimbabwe" operator="Econet Wireless" status="Operational" 00-99 649 - 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="MTC" cc="na" country="Namibia" operator="MTC Namibia" status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 800 / LTE 1800" brand="MTC" cc="na" country="Namibia" operator="MTC Namibia" status="Operational" 02 bands="CDMA2000 800" brand="switch" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" 03 bands="GSM 900 / GSM 1800 / LTE 1800" brand="TN Mobile" cc="na" country="Namibia" operator="Telecom Namibia" status="Operational" 04 bands="WiMAX 2500" cc="na" country="Namibia" operator="Paratus Telecommunications (Pty)" status="Operational" 05 bands="" cc="na" country="Namibia" operator="Demshi Investments CC" status="" 00-99 650 - 01 bands="GSM 900 / GSM 1800" brand="TNM" cc="mw" country="Malawi" operator="Telecom Network Malawi" status="Operational" - 10 bands="GSM 900" brand="Airtel" cc="mw" country="Malawi" operator="Bharti Airtel Limited" status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE" brand="TNM" cc="mw" country="Malawi" operator="Telecom Network Malawi" status="Operational" + 02 bands="CDMA / LTE 850" brand="Access" cc="mw" country="Malawi" operator="Access Communications Ltd" status="Operational" + 10 bands="GSM 900 / UMTS 2100" brand="Airtel" cc="mw" country="Malawi" operator="Bharti Airtel Limited" status="Operational" 00-99 651 01 bands="GSM 900 / LTE 800" brand="Vodacom" cc="ls" country="Lesotho" operator="Vodacom Lesotho (Pty) Ltd" status="Operational" 02 bands="GSM / UMTS" brand="Econet Telecom" cc="ls" country="Lesotho" operator="Econet Ezi-cel" status="Operational" 00-99 652 - 01 bands="GSM 900 / UMTS" brand="Mascom" cc="bw" country="Botswana" operator="Mascom Wireless (Pty) Limited" status="Operational" - 02 bands="GSM 900" brand="Bip" cc="mg" country="Madagascar" operator="Bip Madagascar S.A." status="Operational" + 01 bands="GSM 900 / UMTS / LTE 1800" brand="Mascom" cc="bw" country="Botswana" operator="Mascom Wireless (Pty) Limited" status="Operational" + 02 bands="GSM 900 / UMTS 2100 / LTE 1800" brand="Orange" cc="bw" country="Botswana" operator="Orange (Botswana) Pty Limited" status="Operational" 04 bands="GSM 900 / GSM 1800" brand="BTC Mobile" cc="bw" country="Botswana" operator="Botswana Telecommunications Corporation" status="Operational" 00-99 653 @@ -2345,15 +2479,16 @@ 10 bands="GSM 900" brand="Swazi MTN" cc="sz" country="Swaziland" operator="Swazi MTN Limited" status="Operational" 00-99 654 - 01 bands="" brand="Comoros Telecom" cc="km" country="Comoros" operator="HURI - SNPT" status="Operational" + 01 bands="GSM 900" brand="HURI" cc="km" country="Comoros" operator="Comoros Telecom" status="Operational" + 02 bands="" brand="TELCO SA" cc="km" country="Comoros" operator="Telecom Malagasy (Telma)" status="" 00-99 655 - 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 1800" brand="Vodacom" cc="za" country="South Africa" operator="Vodacom" status="Operational" + 01 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 900 / LTE 1800 / LTE 2100" brand="Vodacom" cc="za" country="South Africa" operator="Vodacom" status="Operational" 02 bands="GSM 1800 / UMTS 2100 / TD-LTE 2300" brand="Telkom" cc="za" country="South Africa" operator="Telkom SA Ltd" status="Operational" 04 bands="" cc="za" country="South Africa" operator="Sasol (Pty) Ltd." status="" 06 bands="" cc="za" country="South Africa" operator="Sentech (Pty) Ltd" status="Operational" 07 bands="GSM 900 / GSM 1800 / UMTS 900 / LTE 1800 / LTE 2100" brand="Cell C" cc="za" country="South Africa" operator="Cell C (Pty) Ltd" status="Operational" - 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="Operational" + 10 bands="GSM 900 / UMTS 900 / UMTS 2100 / LTE 1800 / LTE 2100" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="Operational" 11 bands="TETRA 410" cc="za" country="South Africa" operator="South African Police Service Gauteng" status="Operational" 12 bands="" brand="MTN" cc="za" country="South Africa" operator="MTN Group" status="" 13 bands="CDMA 800" brand="Neotel" cc="za" country="South Africa" operator="Neotel Pty Ltd" status="Operational" @@ -2375,14 +2510,17 @@ 36 bands="" cc="za" country="South Africa" operator="Amatole Telecommunications Pty Ltd" status="" 38 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="" 41 bands="" cc="za" country="South Africa" operator="South African Police Service" status="" + 46 bands="MVNO" cc="za" country="South Africa" operator="SMS Cellular Services (Pty) Ltd" status="Operational" 50 bands="" cc="za" country="South Africa" operator="Ericsson South Africa (Pty) Ltd" status="" 51 bands="" cc="za" country="South Africa" operator="Integrat (Pty) Ltd" status="" + 73 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="" + 74 bands="" brand="iBurst" cc="za" country="South Africa" operator="Wireless Business Solutions (Pty) Ltd" status="" 00-99 657 01 bands="GSM 900" brand="Eritel" cc="er" country="Eritrea" operator="Eritrea Telecommunications Services Corporation" status="Operational" 00-99 658 - 01 bands="GSM" brand="Sure" cc="sh" country="Saint Helena, Ascension and Tristan da Cunha" operator="Sure South Atlantic Ltd." status="Operational" + 01 bands="GSM 900 / GSM 1800 / LTE 1800" brand="Sure" cc="sh" country="Saint Helena, Ascension and Tristan da Cunha" operator="Sure South Atlantic Ltd." status="Operational" 00-99 659 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="MTN" cc="ss" country="South Sudan" operator="MTN South Sudan" status="Operational" @@ -2399,8 +2537,8 @@ 00-99 704 01 bands="CDMA 1900 / GSM 900 / GSM 1900 / UMTS 1900" brand="Claro" cc="gt" country="Guatemala" operator="Telecomunicaciones de Guatemala, S.A." status="Operational" - 02 bands="GSM 850 / TDMA 800 / UMTS 850" brand="Tigo" cc="gt" country="Guatemala" operator="Millicom / Local partners" status="Operational" - 03 bands="CDMA 1900 / GSM 1900 / UMTS 1900" brand="movistar" cc="gt" country="Guatemala" operator="Telefónica Móviles Guatemala (Telefónica)" status="Operational" + 02 bands="GSM 850 / TDMA 800 / UMTS 850 / LTE 850" brand="Tigo" cc="gt" country="Guatemala" operator="Millicom / Local partners" status="Operational" + 03 bands="CDMA 1900 / GSM 1900 / UMTS 1900 / LTE 1900" brand="movistar" cc="gt" country="Guatemala" operator="Telefónica Móviles Guatemala (Telefónica)" status="Operational" 00-99 706 01 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="sv" country="El Salvador" operator="CTE Telecom Personal, S.A. de C.V." status="Operational" @@ -2410,15 +2548,15 @@ 05 bands="iDEN" brand="RED" cc="sv" country="El Salvador" operator="INTELFON, S.A. de C.V." status="Operational" 00-99 708 - 001 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="hn" country="Honduras" operator="Servicios de Comunicaciones de Honduras S.A. de C.V." status="Operational" - 002 bands="CDMA 850 / GSM 850 / UMTS 850" brand="Tigo" cc="hn" country="Honduras" operator="Celtel" status="Operational" + 001 bands="GSM 1900 / UMTS 1900 / LTE 1700" brand="Claro" cc="hn" country="Honduras" operator="Servicios de Comunicaciones de Honduras S.A. de C.V." status="Operational" + 002 bands="CDMA 850 / GSM 850 / UMTS 850 / LTE 1700" brand="Tigo" cc="hn" country="Honduras" operator="Celtel" status="Operational" 030 bands="GSM 1900" brand="Hondutel" cc="hn" country="Honduras" operator="Empresa Hondureña de Telecomunicaciones" status="Operational" 040 bands="GSM 1900" brand="Digicel" cc="hn" country="Honduras" operator="Digicel de Honduras" status="Operational" 000-999 710 - 21 bands="UMTS 850 / GSM 1900" brand="Claro" cc="ni" country="Nicaragua" operator="Empresa Nicaragüense de Telecomunicaciones, S.A. (ENITEL) (América Móvil)" status="Operational" - 30 bands="UMTS 850 / GSM 850 / GSM 1900" brand="movistar" cc="ni" country="Nicaragua" operator="Telefonía Celular de Nicaragua, S.A. (Telefónica, S.A.)" status="Operational" - 73 bands="UMTS 850 / GSM 1900" brand="Claro" cc="ni" country="Nicaragua" operator="Servicios de Comunicaciones S.A." status="Operational" + 21 bands="GSM 1900 / UMTS 850 / LTE 1700" brand="Claro" cc="ni" country="Nicaragua" operator="Empresa Nicaragüense de Telecomunicaciones, S.A. (ENITEL) (América Móvil)" status="Operational" + 30 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 1900" brand="movistar" cc="ni" country="Nicaragua" operator="Telefonía Celular de Nicaragua, S.A. (Telefónica, S.A.)" status="Operational" + 73 bands="GSM 1900 / UMTS 850" brand="Claro" cc="ni" country="Nicaragua" operator="Servicios de Comunicaciones S.A." status="Operational" 00-99 712 01 bands="GSM 1800 / UMTS 850 / LTE 2600" brand="Kolbi ICE" cc="cr" country="Costa Rica" operator="Instituto Costarricense de Electricidad" status="Operational" @@ -2429,16 +2567,16 @@ 00-99 714 01 bands="GSM 850 / UMTS 850 / LTE 700" brand="Cable & Wireless" cc="pa" country="Panama" operator="Cable & Wireless Panama S.A." status="Operational" - 02 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="movistar" cc="pa" country="Panama" operator="Telefónica Moviles Panama S.A, Bell South Corp. (BSC)" status="Operational" - 03 bands="GSM 1900 / UMTS 1900" brand="Claro" cc="pa" country="Panama" operator="América Móvil" status="Operational" + 02 bands="GSM 850 / UMTS 850 / UMTS 1900 / LTE 700" brand="movistar" cc="pa" country="Panama" operator="Telefónica Moviles Panama S.A, Bell South Corp. (BSC)" status="Operational" + 03 bands="GSM 1900 / UMTS 1900 / LTE 700 / LTE 1900" brand="Claro" cc="pa" country="Panama" operator="América Móvil" status="Operational" 04 bands="GSM 1900 / UMTS 1900" brand="Digicel" cc="pa" country="Panama" operator="Digicel Group" status="Operational" 00-99 716 - 06 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" + 06 bands="CDMA2000 850 / GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 700 / LTE 1700" brand="Movistar" cc="pe" country="Peru" operator="Telefónica Móviles Perú" status="Operational" 07 bands="iDEN" brand="Entel" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" - 10 bands="GSM 1900 / UMTS 850 / LTE 1900" brand="Claro" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" - 15 bands="GSM 1900 / UMTS 1900" brand="Viettel Mobile" cc="pe" country="Peru" operator="Viettel Peru S.A.C." status="Operational" - 17 bands="UMTS 1900" brand="Entel" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" + 10 bands="GSM 1900 / UMTS 850 / LTE 700 / LTE 1900 / TD-LTE 3500" brand="Claro" cc="pe" country="Peru" operator="América Móvil Perú" status="Operational" + 15 bands="GSM 1900 / UMTS 1900" brand="Bitel" cc="pe" country="Peru" operator="Viettel Peru S.A.C." status="Operational" + 17 bands="UMTS 1900 / LTE 1700 / TD-LTE 2300" brand="Entel" cc="pe" country="Peru" operator="Americatel Perú" status="Operational" 00-99 722 010 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" @@ -2447,18 +2585,18 @@ 040 bands="" brand="Globalstar" cc="ar" country="Argentina" operator="TE.SA.M Argentina S.A." status="Operational" 070 bands="GSM 1900" brand="Movistar" cc="ar" country="Argentina" operator="Telefónica Móviles Argentina S.A." status="Operational" 310 bands="GSM 1900" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 320 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" - 330 bands="GSM 850 / GSM 1900 / UMTS" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" + 320 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" + 330 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Claro" cc="ar" country="Argentina" operator="AMX Argentina S.A." status="Operational" 341 bands="GSM 850 / GSM 1900 / UMTS / LTE 1700" brand="Personal" cc="ar" country="Argentina" operator="Telecom Personal S.A." status="Operational" 350 bands="GSM 900" brand="PORT-HABLE" cc="ar" country="Argentina" operator="Hutchison Telecommunications Argentina S.A." status="Not operational" 000-999 724 00 bands="iDEN 850" brand="Nextel" cc="br" country="Brazil" operator="NII Holdings, Inc." status="Operational" 01 bands="MVNO" cc="br" country="Brazil" operator="SISTEER DO BRASIL TELECOMUNICAÇÔES" status="" - 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" - 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" - 04 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" - 05 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Claro" cc="br" country="Brazil" operator="Claro" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" + 03 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" + 04 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="TIM" cc="br" country="Brazil" operator="Telecom Italia Mobile" status="Operational" + 05 bands="GSM 900 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 700 / LTE 1800 / LTE 2600" brand="Claro" cc="br" country="Brazil" operator="Claro" status="Operational" 06 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 10 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" 11 bands="GSM 850 / GSM 1800 / UMTS 850 / UMTS 2100 / LTE 2600" brand="Vivo" cc="br" country="Brazil" operator="Vivo S.A." status="Operational" @@ -2481,15 +2619,15 @@ 99 bands="" brand="Local" cc="br" country="Brazil" operator="Local ( purpose or usage)" status="" 00-99 730 - 01 bands="GSM 1900 / UMTS 1900 / LTE 2600" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" - 02 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" + 01 bands="GSM 1900 / UMTS 1900 / LTE 700 / LTE 2600" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" + 02 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 700 / LTE 2600" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="Operational" 03 bands="GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="Claro" cc="cl" country="Chile" operator="Claro Chile S.A." status="Operational" 04 bands="iDEN 800" brand="WOM" cc="cl" country="Chile" operator="Novator Partners" status="Operational" 05 bands="" cc="cl" country="Chile" operator="Multikom S.A." status="" 06 bands="MVNO" brand="Telefónica del Sur" cc="cl" country="Chile" operator="Blue Two Chile S.A." status="Operational" 07 bands="" brand="movistar" cc="cl" country="Chile" operator="Telefónica Móvil de Chile" status="" 08 bands="MVNO" brand="VTR Móvil" cc="cl" country="Chile" operator="VTR S.A." status="Operational" - 09 bands="UMTS 1700" brand="WOM" cc="cl" country="Chile" operator="Novator Partners" status="Operational" + 09 bands="UMTS 1700 / LTE 1700" brand="WOM" cc="cl" country="Chile" operator="Novator Partners" status="Operational" 10 bands="GSM 1900 / UMTS 1900" brand="entel" cc="cl" country="Chile" operator="Entel Telefonía Móvil S.A." status="Operational" 11 bands="" cc="cl" country="Chile" operator="Celupago S.A." status="" 12 bands="MVNO" brand="Wanderers Móvil" cc="cl" country="Chile" operator="Telestar Móvil S.A." status="Operational" @@ -2509,7 +2647,7 @@ 004 bands="" cc="co" country="Colombia" operator="COMPATEL COLOMBIA SAS" status="" 020 bands="LTE 2600" brand="Tigo" cc="co" country="Colombia" operator="Une EPM Telecomunicaciones S.A. E.S.P." status="Operational" 099 bands="GSM 900" brand="EMCALI" cc="co" country="Colombia" operator="Empresas Municipales de Cali" status="Operational" - 101 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1700 / LTE 2600" brand="Claro" cc="co" country="Colombia" operator="COMCEL S.A." status="Operational" + 101 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 2600" brand="Claro" cc="co" country="Colombia" operator="COMCEL S.A." status="Operational" 102 bands="GSM 850 / GSM 1900 / CDMA 850" cc="co" country="Colombia" operator="Bellsouth Colombia" status="Not operational" 103 bands="GSM 1900 / UMTS / LTE 1700" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil S.A. ESP" status="Operational" 111 bands="GSM 1900 / UMTS / LTE 1700" brand="Tigo" cc="co" country="Colombia" operator="Colombia Móvil S.A. ESP" status="Operational" @@ -2529,9 +2667,9 @@ 06 bands="CDMA2000 850 / GSM 850 / UMTS 1900" brand="Movilnet" cc="ve" country="Venezuela" operator="Telecomunicaciones Movilnet" status="Operational" 00-99 736 - 01 bands="GSM 1900 / UMTS" brand="Viva" cc="bo" country="Bolivia" operator="Nuevatel PCS De Bolivia SA" status="Operational" + 01 bands="GSM 1900 / UMTS / LTE 1700" brand="Viva" cc="bo" country="Bolivia" operator="Nuevatel PCS De Bolivia SA" status="Operational" 02 bands="GSM 850 / GSM 1900 / UMTS 850 / LTE 700" brand="Entel" cc="bo" country="Bolivia" operator="Entel SA" status="Operational" - 03 bands="GSM 850 / UMTS" brand="Tigo" cc="bo" country="Bolivia" operator="Telefónica Celular De Bolivia S.A" status="Operational" + 03 bands="GSM 850 / UMTS / LTE 700" brand="Tigo" cc="bo" country="Bolivia" operator="Telefónica Celular De Bolivia S.A" status="Operational" 00-99 738 01 bands="GSM 900" brand="Digicel" cc="gy" country="Guyana" operator="U-Mobile (Cellular) Inc." status="Operational" @@ -2541,7 +2679,7 @@ 00-99 740 00 bands="GSM 850 / GSM 1900 / UMTS 850 / UMTS 1900 / LTE 1900" brand="Movistar" cc="ec" country="Ecuador" operator="Otecel S.A." status="Operational" - 01 bands="GSM 850 / UMTS 850 / UMTS 1900" brand="Claro" cc="ec" country="Ecuador" operator="CONECEL S.A." status="Operational" + 01 bands="GSM 850 / UMTS 850 / UMTS 1900 / LTE 1700" brand="Claro" cc="ec" country="Ecuador" operator="CONECEL S.A." status="Operational" 02 bands="GSM 850 / UMTS 1900 / LTE 1700" brand="CNT Mobile" cc="ec" country="Ecuador" operator="Corporación Nacional de Telecomunicaciones (CNT EP)" status="Operational" 00-99 744 @@ -2553,7 +2691,7 @@ 06 bands="GSM 1800 / LTE 1700" brand="Copaco" cc="py" country="Paraguay" operator="Copaco S.A." status="Operational" 00-99 746 - 02 bands="GSM 900 / GSM 1800 / UMTS 2100" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="Operational" + 02 bands="GSM 900 / GSM 1800 / UMTS 2100 / LTE 700 / LTE 1800" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="Operational" 03 bands="GSM 900 / GSM 1800 / UMTS 850" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" 04 bands="GSM 900 / UMTS" brand="Digicel" cc="sr" country="Suriname" operator="Digicel Group Limited" status="Operational" 05 bands="CDMA 450" brand="Telesur" cc="sr" country="Suriname" operator="Telecommunications Company Suriname (Telesur)" status="" @@ -2580,7 +2718,7 @@ 09 bands="" country="International operators" operator="Unassigned" status="Returned spare" 10 bands="Satellite" brand="ACeS" country="International operators" status="Not operational" 11 bands="Satellite" brand="Inmarsat" country="International operators" status="Operational" - 12 bands="GSM 1800" brand="Telenor" country="International operators" operator="Maritime Communications Partner AS (MCP)" status="Operational" + 12 bands="GSM 1800 / LTE 800" brand="Telenor" country="International operators" operator="Telenor Maritime AS" status="Operational" 13 bands="GSM 1800" brand="GSM.AQ" country="International operators" operator="BebbiCell AG" status="Operational" 14 bands="GSM 1800" brand="AeroMobile" country="International operators" operator="AeroMobile AS" status="Operational" 15 bands="GSM 1800" brand="OnAir" country="International operators" operator="OnAir Switzerland Sarl" status="Operational" @@ -2620,5 +2758,10 @@ 49 bands="" country="International operators" operator="Zain Kuwait" status="" 50 bands="Satellite" country="International operators" operator="EchoStar Mobile" status="" 51 bands="" country="International operators" operator="VisionNG" status="" + 52 bands="" country="International operators" operator="Manx Telecom Trading Ltd." status="" + 53 bands="" country="International operators" operator="Deutsche Telekom AG" status="" 88 bands="" country="International operators" operator="UN Office for the Coordination of Humanitarian Affairs (OCHA)" status="" 00-99 +995 + 01 bands="GSM 900" brand="FonePlus" cc="io" country="British Indian Ocean Territory (United Kingdom)" operator="Sure (Diego Garcia) Ltd" status="Operational" + 00-99 diff --git a/stdnum/isbn.dat b/stdnum/isbn.dat index 49e57c3d..4289339b 100644 --- a/stdnum/isbn.dat +++ b/stdnum/isbn.dat @@ -1,16 +1,17 @@ # generated from RangeMessage.xml, downloaded from # https://www.isbn-international.org/export_rangemessage.xml -# file serial 06b89123-0e43-4b34-92ef-de9637e6f095 -# file date Mon, 25 Jul 2016 18:49:43 CEST +# file serial ba776596-a833-425a-ad40-560b7658dd7c +# file date Mon, 31 Oct 2016 17:32:39 CET 978 0-5,600-649,7-7,80-94,950-989,9900-9989,99900-99999 0 agency="English language" - 00-19,200-699,7000-8499,85000-89999,900000-949999,9500000-9999999 + 00-19,200-227,2280-2289,229-647,6480000-6489999,649-699,7000-8499 + 85000-89999,900000-949999,9500000-9999999 1 agency="English language" 00-09,100-399,4000-5499,55000-86979,869800-998999,9990000-9999999 2 agency="French language" - 00-19,200-349,35000-39999,400-699,7000-8399,84000-89999,900000-949999 - 9500000-9999999 + 00-19,200-349,35000-39999,400-699,7000-8399,84000-89999,900000-919942 + 9199430-9199689,919969-949999,9500000-9999999 3 agency="German language" 00-02,030-033,0340-0369,03700-03999,04-19,200-699,7000-8499,85000-89999 900000-949999,9500000-9539999,95400-96999,9700000-9899999,99000-99499 @@ -28,8 +29,8 @@ 00-19,200-699,7000-7999,80000-84999,85-99 602 agency="Indonesia" 00-07,0800-0899,0900-1099,1100-1199,1200-1399,14000-14999,1500-1699 - 17000-17999,18000-18999,19000-19999,200-619,6200-6749,6750-6999 - 70000-74999,7500-7999,8000-9499,95000-99999 + 17000-17999,18000-18999,19000-19999,200-599,60000-61999,6200-6749 + 6750-6999,70000-74999,7500-7999,8000-9499,95000-99999 603 agency="Saudi Arabia" 00-04,05-49,500-799,8000-8999,90000-99999 604 agency="Vietnam" @@ -86,8 +87,8 @@ 87 agency="Denmark" 00-29,400-649,7000-7999,85000-94999,970000-999999 88 agency="Italy" - 00-19,200-599,6000-8499,85000-89999,900000-909999,910-929,9300-9399 - 940000-949999,95000-99999 + 00-19,200-326,3270-3389,339-599,6000-8499,85000-89999,900000-909999 + 910-929,9300-9399,940000-947999,94800-94999,95000-99999 89 agency="Korea, Republic" 00-24,250-549,5500-8499,85000-94999,950000-969999,97000-98999,990-999 90 agency="Netherlands" @@ -112,15 +113,15 @@ 954 agency="Bulgaria" 00-28,2900-2999,300-799,8000-8999,90000-92999,9300-9999 955 agency="Sri Lanka" - 0000-1999,20-38,3900-4099,41000-43999,44000-44999,4500-4999,50000-54999 - 550-749,7500-7999,8000-9499,95000-99999 + 0000-1999,20-37,38000-38999,3900-4099,41000-43999,44000-44999,4500-4999 + 50000-54999,550-719,7200-7499,7500-7999,8000-9499,95000-99999 956 agency="Chile" 00-19,200-699,7000-9999 957 agency="Taiwan" 00-02,0300-0499,05-19,2000-2099,21-27,28000-30999,31-43,440-819 8200-9699,97000-99999 958 agency="Colombia" - 00-56,57000-59999,600-799,8000-9499,95000-99999 + 00-53,5400-5599,56000-56999,57000-59999,600-799,8000-9499,95000-99999 959 agency="Cuba" 00-19,200-699,7000-8499,85000-99999 960 agency="Greece" @@ -448,7 +449,7 @@ 99964 agency="Nicaragua" 0-1,20-79,800-999 99965 agency="Macau" - 0-3,40-62,630-999 + 0-2,300-399,40-62,630-999 99966 agency="Kuwait" 0-2,30-69,700-799,80-94 99967 agency="Paraguay" @@ -475,6 +476,8 @@ 0-1,40-69,700-799 99978 agency="Mongolia" 0-4,50-79,800-999 + 99979 agency="Honduras" + 0-4,50-79,800-999 979 10-12 10 agency="France" diff --git a/stdnum/isil.dat b/stdnum/isil.dat index 2d2dff2c..e47fbb5f 100644 --- a/stdnum/isil.dat +++ b/stdnum/isil.dat @@ -13,7 +13,7 @@ CY$ country="Cyprus" ra_url="http://library.cut.ac.cy/en/isil" ra="Cyprus Univer DE$ country="Germany" ra_url="http://sigel.staatsbibliothek-berlin.de/" ra="Staatsbibliothek zu Berlin" DK$ country="Denmark" ra_url="http://www.kulturstyrelsen.dk/english/institutions/libraries/national-solutions/standards/danish-library-number/" ra="Danish Agency for Culture and Palaces" EG$ country="Egypt" ra_url="http://www.sti.sci.eg/index.php?option=com_content&view=article&id=30:focal-point&catid=1:pages&Itemid=56" ra="Egyptian National Scientific and Technical Information Network (ENSTINET)" -FI$ country="Finland" ra_url="http://www.nationallibrary.fi/libraries/standards/isil.html" ra="The National Library of Finland" +FI$ country="Finland" ra_url="http://isil.kansalliskirjasto.fi/en/" ra="The National Library of Finland" FR$ country="France" ra_url="http://www.abes.fr" ra="Agence Bibliographique de l'Enseignement Superieur" GB$ country="United Kingdom" ra_url="http://www.bl.uk/bibliographic/isilagency.html" ra="British Library" GL$ country="Greenland" ra_url="http://www.katak.gl/ISIL/Greenlandic_library_identifiers.html" ra="Central and Public Library of Greenland" @@ -22,7 +22,7 @@ IR$ country="Islamic Republic of Iran" ra_url="http://www.nlai.ir/special_servic IT$ country="Italy" ra_url="http://www.iccu.sbn.it/genera.jsp?id=78&l=en" ra="Istituto Centrale per il Catalogo Unico delle biblioteche italiane e per le informazioni bibliografiche" JP$ country="Japan" ra_url="http://www.ndl.go.jp/en/library/isil/index.html" ra="National Diet Library" KR$ country="Republic of Korea" ra_url="http://www.nl.go.kr/isil/" ra="The National Library of Korea" -LU$ country="Luxembourg" ra_url="http://www.anlux.lu" ra="Archives nationales de Luxembourg" +LU$ country="Luxembourg" ra_url="http://www.anlux.public.lu" ra="Archives nationales de Luxembourg" NL$ country="The Netherlands" ra_url="http://www.kb.nl/expertise/voor-bibliotheken/interbibliotheciar-leenverkeer/internationale-standard-identifier-for-libraries-isil" ra="Koninklijke Bibliotheek, National Library of the Netherlands" NO$ country="Norway" ra_url="http://www.nb.no/" ra="National Library of Norway" NZ$ country="New Zealand" ra_url="http://natlib.govt.nz/" ra="National Library of New Zealand Te Puna Matauranga o Aotearoa" diff --git a/tests/test_iban.doctest b/tests/test_iban.doctest index 9c95c24d..855b88d8 100644 --- a/tests/test_iban.doctest +++ b/tests/test_iban.doctest @@ -48,7 +48,6 @@ numbers: ... BR9700360305000010009795493P1 ... CH93 0076 2011 6238 5295 7 ... CH9300762011623852957 -... CR0515202001026284066 ... CY17 0020 0128 0000 0012 0052 7600 ... CY17002001280000001200527600 ... CZ65 0800 0000 1920 0014 5399 From 62ebbceaf8dd7baeb6ff310da90ff8e2096af580 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 13 Nov 2016 23:27:42 +0100 Subject: [PATCH 137/654] Get files ready for 1.5 release --- ChangeLog | 214 ++++++++++++++++++++++--- NEWS | 16 ++ README | 9 +- docs/index.rst | 7 + docs/stdnum.au.abn.rst | 5 + docs/stdnum.au.acn.rst | 5 + docs/stdnum.au.tfn.rst | 5 + docs/stdnum.es.ccc.rst | 5 + docs/stdnum.es.cups.rst | 5 + docs/stdnum.es.iban.rst | 5 + docs/stdnum.es.referenciacatastral.rst | 5 + stdnum/__init__.py | 11 +- 12 files changed, 269 insertions(+), 23 deletions(-) create mode 100644 docs/stdnum.au.abn.rst create mode 100644 docs/stdnum.au.acn.rst create mode 100644 docs/stdnum.au.tfn.rst create mode 100644 docs/stdnum.es.ccc.rst create mode 100644 docs/stdnum.es.cups.rst create mode 100644 docs/stdnum.es.iban.rst create mode 100644 docs/stdnum.es.referenciacatastral.rst diff --git a/ChangeLog b/ChangeLog index 412b3ad4..8ba0abc5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,179 @@ +2016-11-13 Arthur de Jong + + * [c9beb00] stdnum/cn/loc.dat, stdnum/iban.dat, stdnum/imsi.dat, + stdnum/isbn.dat, stdnum/isil.dat, tests/test_iban.doctest: + Update database files + + This removes the Costa Rica IBAN test because the format of the + IBAN seems to have been changed. The old length still seems to + be in use so a more permanent solution is probably required. + +2016-11-13 Arthur de Jong + + * [ac560a7] getisbn.py: Update getisbn to Python3 + + There were some SSL-related issues with the urllib module. This + was the easiest solution. + +2016-11-13 Arthur de Jong + + * [458c310] getiban.py: Update gettin IBAN registry + + The format of the registry file has changed. Before it was a + straightforward CSV file with countries in rows but countries + are now in columns. + +2016-11-09 Sergi Almacellas Abellana + + * [45faa7c] .gitignore, tox.ini: Add tox.ini file + +2016-11-08 Sergi Almacellas Abellana + + * [a9e5405] stdnum/eu/at_02.py: Implement calc_check_digits in + SEPA Identifier of the Creditor (AT-02) + +2016-10-14 Arthur de Jong + + * [8ea76ba] stdnum/au/tfn.py, tests/test_au_tfn.doctest: Add + Australian Tax File Number + + Based on the implementation provided by Vincent Bastos + + + See https://github.com/arthurdejong/python-stdnum/pull/40 + +2016-10-14 Arthur de Jong + + * [8028c3a] stdnum/au/acn.py, tests/test_au_acn.doctest: Add + Australian Company Number + + Based on the implementation provided by Vincent Bastos + + + See https://github.com/arthurdejong/python-stdnum/pull/40 + +2016-10-14 Arthur de Jong + + * [70b94ee] stdnum/au/__init__.py, stdnum/au/abn.py, + tests/test_au_abn.doctest: Add Australian Business Number + + Based on the implementation provided by Vincent Bastos + + + See https://github.com/arthurdejong/python-stdnum/pull/40 + +2016-10-14 Arthur de Jong + + * [d7cff5d] stdnum/be/__init__.py, stdnum/be/vat.py: Provide + businessid as an alias + + The Belgian company number or enterprise number + (ondernemingsnummer) is the new name for what was previously + the VAT number. + +2016-09-10 Arthur de Jong + + * [352aa8a] stdnum/es/referenciacatastral.py: Add reference to + Referencia Catastral implementation + +2016-09-03 Arthur de Jong + + * [49db553] tests/test_es_referenciacatastral.doctest: Add more + tests for Referencia Catastral + + This adds a number of extra tests for the Spanish Referencia + Catastral (stdnum.es.referenciacatastral) module, mostly based + on numbers found online. + + This commit includes some of the documentation on the structure + of Referencia Catastral that was in the original pull request. + + See https://github.com/arthurdejong/python-stdnum/pull/38 + +2016-08-31 David García Garzón + + * [2c557a0] stdnum/es/referenciacatastral.py: Add Spansih Referencia + Catastral + + The control digit check algorithm is based on Javascript + implementation by Vicente Sancho that can be found at + http://trellat.es/validar-la-referencia-catastral-en-javascript/ + + See https://github.com/arthurdejong/python-stdnum/pull/38 + +2016-09-10 Arthur de Jong + + * [b128c8d] tests/test_iban.doctest: Test a few Spanish IBANs + found online + +2016-09-10 Arthur de Jong + + * [878e036] stdnum/numdb.py: Avoid leaving open file descriptor + in test + +2016-09-08 Arthur de Jong + + * [be24790] stdnum/es/iban.py, tests/test_iban.doctest: Add Spanish + IBAN number module + + This validates the country-specific part of the IBAN. + +2016-09-08 Arthur de Jong + + * [2510932] stdnum/iban.py: Validate country-specific part of IBAN + + This adds the possible of validating the country-specific part + of the IBAN. If the country has an IBAN module, checking is also + delegated to that module. + +2016-09-06 Arthur de Jong + + * [d8cca82] stdnum/eu/vat.py, stdnum/util.py: Introduce + get_cc_module() utility function + + This changes the get_vat_module() function to a more generic + get_cc_module() function so that it can also be used for other + things like IBAN checking. + +2016-09-06 Arthur de Jong + + * [1622873] stdnum/es/ccc.py: Add to_iban() function to Spanish CCC + +2016-09-08 Arthur de Jong + + * [7d969be] stdnum/iban.py: Implement calc_check_digits() in IBAN + + Introduce a function to calculate the two check digits of an + IBAN. Since the check digits are the third and fourth characters + in the number, placeholders need to be provided when calling + this function. + +2016-08-31 David García Garzón + + * [294f872] stdnum/es/ccc.py: Add Spanish Código Cuenta Corriente + (CCC) + +2016-08-28 David García Garzón + + * [466cec8] stdnum/es/cups.py, tests/test_es_cups.doctest: Add + Spanish CUPS code + +2016-08-28 Arthur de Jong + + * [d95382f] stdnum/exceptions.py: Properly print error message + of exceptions + + This ensures that the message passed to the constructor is shown + in the traceback while falling back to the class default. + +2016-07-26 Arthur de Jong + + * [01a7f34] ChangeLog, NEWS, README, docs/index.rst, + docs/stdnum.damm.rst, docs/stdnum.fr.nif.rst, + docs/stdnum.fr.nir.rst, docs/stdnum.fr.siret.rst, + docs/stdnum.gb.nhs.rst, docs/stdnum.tr.tckimlik.rst, + stdnum/__init__.py: Get files ready for 1.4 release + 2016-07-26 Arthur de Jong * [3e4e9e2] getmybp.py, stdnum/cn/loc.dat, stdnum/iban.dat, @@ -307,8 +483,8 @@ Jong 2015-10-10 Arthur de Jong - * [ebb5c07] MANIFEST.in, numdb-test.dat, stdnum/numdb.py, - tests/numdb-test.dat: Move numdb test file + * [ebb5c07] MANIFEST.in, stdnum/numdb.py, tests/numdb-test.dat: + Move numdb test file This places the test database file in the tests directory. @@ -881,8 +1057,8 @@ Jong http://www.citizensinformation.ie/en/social_welfare/irish_social_welfare_system/personal_public_service_number.html 2014-02-06 Arthur de Jong - * [71d9837] stdnum/at_02.py, stdnum/eu/at_02.py: Rename AT-02 - module to stdnum.eu.at_02 + * [71d9837] stdnum/eu/at_02.py: Rename AT-02 module to + stdnum.eu.at_02 2014-02-05 Sergi Almacellas Abellana @@ -1583,8 +1759,7 @@ Jong 2012-02-20 Arthur de Jong - * [680b7d1] numdb-test.dat, stdnum/numdb.py, test.dat: rename - numdb test file + * [680b7d1] numdb-test.dat, stdnum/numdb.py: rename numdb test file 2012-02-20 Arthur de Jong @@ -2133,13 +2308,13 @@ Jong 2011-02-05 Arthur de Jong - * [62aa496] tests/test_br_cpf.doctest, tests/test_iban.doctest, - tests/test_imei.doctest, tests/test_isan.doctest, - tests/test_isbn.doctest, tests/test_ismn.doctest, - tests/test_issn.doctest, tests/test_luhn.doctest, - tests/test_meid.doctest, tests/test_nl_bsn.doctest, - tests/test_robustness.doctest, tests/test_verhoeff.doctest: - move all robustness tests into one test file + * [62aa496] tests/test_iban.doctest, tests/test_imei.doctest, + tests/test_isan.doctest, tests/test_isbn.doctest, + tests/test_ismn.doctest, tests/test_issn.doctest, + tests/test_luhn.doctest, tests/test_meid.doctest, + tests/test_nl_bsn.doctest, tests/test_robustness.doctest, + tests/test_verhoeff.doctest: move all robustness tests into one + test file 2011-02-05 Arthur de Jong @@ -2207,9 +2382,8 @@ Jong 2011-01-15 Arthur de Jong - * [8d3a92c] stdnum/bsn.py, stdnum/nl/__init__.py, stdnum/nl/bsn.py, - tests/test_bsn.doctest, tests/test_nl_bsn.doctest: move bsn - module inside nl package + * [8d3a92c] stdnum/nl/__init__.py, stdnum/nl/bsn.py, + tests/test_nl_bsn.doctest: move bsn module inside nl package 2010-11-26 Arthur de Jong @@ -2219,10 +2393,10 @@ Jong 2010-11-24 Arthur de Jong * [124c16d] getisbn.py, stdnum/isbn.dat, stdnum/isbn.py, - stdnum/isbn/__init__.py, stdnum/isbn/ranges.py, stdnum/numdb.py, - test.dat, tests/test_isbn.doctest: implement a new numdb module - to hold information on hierarchically organised numbers and - switch the isbn module to use this format instead + stdnum/isbn/ranges.py, stdnum/numdb.py, test.dat, + tests/test_isbn.doctest: implement a new numdb module to hold + information on hierarchically organised numbers and switch the + isbn module to use this format instead 2010-09-11 Arthur de Jong diff --git a/NEWS b/NEWS index 1f8261da..317f8bb1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,19 @@ +changes from 1.4 to 1.5 +----------------------- + +* add modules for the following number formats: + - ABN (Australian Business Number) + - ACN (Australian Company Number) + - TFN (Australian Tax File Number) + - CCC (Código Cuenta Corriente, Spanish Bank Account Code) + - CUPS (Código Unificado de Punto de Suministro, Supply Point Unified Code) + - Spanish IBAN (International Bank Account Number) + - Referencia Catastral (Spanish real estate property id) +* The IBAN module now support validating the country-specific part +* The Belgian VAT number is now also referenced as businessid +* add a Tox configuration file + + changes from 1.3 to 1.4 ----------------------- diff --git a/README b/README index 4c8c8de0..0cfdab8f 100644 --- a/README +++ b/README @@ -13,7 +13,10 @@ Currently this package supports the following formats: * CUIT (Código Único de Identificación Tributaria, Argentinian tax number) * Austrian Company Register Numbers * UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) - * BTW, TVA, NWSt (Belgian VAT number) + * ABN (Australian Business Number) + * ACN (Australian Company Number) + * TFN (Australian Tax File Number) + * BTW, TVA, NWSt, ondernemingsnummer (Belgian enterprise number) * EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) * PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) * VAT (Идентификационен номер по ДДС, Bulgarian VAT number) @@ -40,10 +43,14 @@ Currently this package supports the following formats: * RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) * Isikukood (Estonian Personcal ID number) * KMKR (Käibemaksukohuslase, Estonian VAT number) + * CCC (Código Cuenta Corriente, Spanish Bank Account Code) * CIF (Certificado de Identificación Fiscal, Spanish company tax number) + * CUPS (Código Unificado de Punto de Suministro, Supply Point Unified Code) * DNI (Documento nacional de identidad, Spanish personal identity codes) + * Spanish IBAN (International Bank Account Number) * NIE (Número de Identificación de Extranjeros, Spanish foreigner number) * NIF (Número de Identificación Fiscal, Spanish VAT number) + * Referencia Catastral (Spanish real estate property id) * SEPA Identifier of the Creditor (AT-02) * VAT (European Union VAT number) * ALV nro (Arvonlisäveronumero, Finnish VAT number) diff --git a/docs/index.rst b/docs/index.rst index b85a8e0a..3e4096f5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -90,6 +90,9 @@ Available formats ar.cuit at.businessid at.uid + au.abn + au.acn + au.tfn be.vat bg.egn bg.pnf @@ -117,10 +120,14 @@ Available formats ec.ruc ee.ik ee.kmkr + es.ccc es.cif + es.cups es.dni + es.iban es.nie es.nif + es.referenciacatastral eu.at_02 eu.vat fi.alv diff --git a/docs/stdnum.au.abn.rst b/docs/stdnum.au.abn.rst new file mode 100644 index 00000000..e1b646a7 --- /dev/null +++ b/docs/stdnum.au.abn.rst @@ -0,0 +1,5 @@ +stdnum.au.abn +============= + +.. automodule:: stdnum.au.abn + :members: \ No newline at end of file diff --git a/docs/stdnum.au.acn.rst b/docs/stdnum.au.acn.rst new file mode 100644 index 00000000..9b35a0af --- /dev/null +++ b/docs/stdnum.au.acn.rst @@ -0,0 +1,5 @@ +stdnum.au.acn +============= + +.. automodule:: stdnum.au.acn + :members: \ No newline at end of file diff --git a/docs/stdnum.au.tfn.rst b/docs/stdnum.au.tfn.rst new file mode 100644 index 00000000..a010db83 --- /dev/null +++ b/docs/stdnum.au.tfn.rst @@ -0,0 +1,5 @@ +stdnum.au.tfn +============= + +.. automodule:: stdnum.au.tfn + :members: \ No newline at end of file diff --git a/docs/stdnum.es.ccc.rst b/docs/stdnum.es.ccc.rst new file mode 100644 index 00000000..75c830a3 --- /dev/null +++ b/docs/stdnum.es.ccc.rst @@ -0,0 +1,5 @@ +stdnum.es.ccc +============= + +.. automodule:: stdnum.es.ccc + :members: \ No newline at end of file diff --git a/docs/stdnum.es.cups.rst b/docs/stdnum.es.cups.rst new file mode 100644 index 00000000..2fb20235 --- /dev/null +++ b/docs/stdnum.es.cups.rst @@ -0,0 +1,5 @@ +stdnum.es.cups +============== + +.. automodule:: stdnum.es.cups + :members: \ No newline at end of file diff --git a/docs/stdnum.es.iban.rst b/docs/stdnum.es.iban.rst new file mode 100644 index 00000000..6811e2c5 --- /dev/null +++ b/docs/stdnum.es.iban.rst @@ -0,0 +1,5 @@ +stdnum.es.iban +============== + +.. automodule:: stdnum.es.iban + :members: \ No newline at end of file diff --git a/docs/stdnum.es.referenciacatastral.rst b/docs/stdnum.es.referenciacatastral.rst new file mode 100644 index 00000000..c77588fb --- /dev/null +++ b/docs/stdnum.es.referenciacatastral.rst @@ -0,0 +1,5 @@ +stdnum.es.referenciacatastral +============================= + +.. automodule:: stdnum.es.referenciacatastral + :members: \ No newline at end of file diff --git a/stdnum/__init__.py b/stdnum/__init__.py index d12dcd47..777a09bc 100644 --- a/stdnum/__init__.py +++ b/stdnum/__init__.py @@ -29,7 +29,10 @@ * ar.cuit: CUIT (Código Único de Identificación Tributaria, Argentinian tax number) * at.businessid: Austrian Company Register Numbers * at.uid: UID (Umsatzsteuer-Identifikationsnummer, Austrian VAT number) -* be.vat: BTW, TVA, NWSt (Belgian VAT number) +* au.abn: ABN (Australian Business Number) +* au.acn: ACN (Australian Company Number) +* au.tfn: TFN (Australian Tax File Number) +* be.vat: BTW, TVA, NWSt, ondernemingsnummer (Belgian enterprise number) * bg.egn: EGN (ЕГН, Единен граждански номер, Bulgarian personal identity codes) * bg.pnf: PNF (ЛНЧ, Личен номер на чужденец, Bulgarian number of a foreigner) * bg.vat: VAT (Идентификационен номер по ДДС, Bulgarian VAT number) @@ -56,10 +59,14 @@ * ec.ruc: RUC (Registro Único de Contribuyentes, Ecuadorian company tax number) * ee.ik: Isikukood (Estonian Personcal ID number) * ee.kmkr: KMKR (Käibemaksukohuslase, Estonian VAT number) +* es.ccc: CCC (Código Cuenta Corriente, Spanish Bank Account Code) * es.cif: CIF (Certificado de Identificación Fiscal, Spanish company tax number) +* es.cups: CUPS (Código Unificado de Punto de Suministro, Supply Point Unified Code) * es.dni: DNI (Documento nacional de identidad, Spanish personal identity codes) +* es.iban: Spanish IBAN (International Bank Account Number) * es.nie: NIE (Número de Identificación de Extranjeros, Spanish foreigner number) * es.nif: NIF (Número de Identificación Fiscal, Spanish VAT number) +* es.referenciacatastral: Referencia Catastral (Spanish real estate property id) * eu.at_02: SEPA Identifier of the Creditor (AT-02) * eu.vat: VAT (European Union VAT number) * fi.alv: ALV nro (Arvonlisäveronumero, Finnish VAT number) @@ -159,4 +166,4 @@ # the version number of the library -__version__ = '1.4' +__version__ = '1.5' From da18e3ba8794b9eaa611c17fed23552dd51aa024 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 14 Nov 2016 23:53:30 +0100 Subject: [PATCH 138/654] Add Python 2.6 support This also brings the list of Python versions in setup.py in line with tox.ini. --- setup.py | 1 + stdnum/fi/associationid.py | 4 ++-- stdnum/meid.py | 12 ++++++++++-- tests/test_mx_rfc.doctest | 2 +- tox.ini | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/setup.py b/setup.py index d91a7a93..941ff4eb 100755 --- a/setup.py +++ b/setup.py @@ -55,6 +55,7 @@ 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', 'Topic :: Office/Business :: Financial', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Text Processing :: General', diff --git a/stdnum/fi/associationid.py b/stdnum/fi/associationid.py index 7af46c95..4efed2b1 100644 --- a/stdnum/fi/associationid.py +++ b/stdnum/fi/associationid.py @@ -31,11 +31,11 @@ >>> validate('123123123') Traceback (most recent call last): ... -stdnum.exceptions.InvalidLength: The number has an invalid length. +InvalidLength: The number has an invalid length. >>> validate('12df') Traceback (most recent call last): ... -stdnum.exceptions.InvalidFormat: The number has an invalid format. +InvalidFormat: The number has an invalid format. >>> format('123') '123' >>> format('1234') diff --git a/stdnum/meid.py b/stdnum/meid.py index 36b4445d..be52fbdb 100644 --- a/stdnum/meid.py +++ b/stdnum/meid.py @@ -1,6 +1,6 @@ # meid.py - functions for handling Mobile Equipment Identifiers (MEIDs) # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2016 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -105,6 +105,14 @@ def compact(number, strip_check_digit=True): return number + cd +def _bit_length(n): + """Number of bits necessary to represent the number in binary.""" + if hasattr(n, 'bit_length'): + return n.bit_length() + import math + return int(math.log(n, 2)) + 1 + + def validate(number, strip_check_digit=True): """Checks to see if the number provided is a valid MEID number. This converts the representation format of the number (if it is @@ -119,7 +127,7 @@ def validate(number, strip_check_digit=True): # convert to hex manufacturer_code = int(number[0:10]) serial_num = int(number[10:18]) - if manufacturer_code.bit_length() > 32 or serial_num.bit_length() > 24: + if _bit_length(manufacturer_code) > 32 or _bit_length(serial_num) > 24: raise InvalidComponent() number = '%08X%06X' % (manufacturer_code, serial_num) cd = calc_check_digit(number) diff --git a/tests/test_mx_rfc.doctest b/tests/test_mx_rfc.doctest index 2d5e2f30..eba887d9 100644 --- a/tests/test_mx_rfc.doctest +++ b/tests/test_mx_rfc.doctest @@ -35,7 +35,7 @@ InvalidComponent: ... The last three digits are in a special alphabet and should only contain 1-9A-V, 1-9A-Z and 0-9A for the last digits. ->>> rfc.validate('AABN 821103 8Ñ2') +>>> rfc.validate('AABN 821103 8\xd12') # \xd1 is the N with tilde Traceback (most recent call last): ... InvalidFormat: ... diff --git a/tox.ini b/tox.ini index f8b77dc9..ec926c41 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = {py27,py34,py35,py36,pypy} +envlist = {py26,py27,py34,py35,py36,pypy} [testenv] deps = nose From dcde8f4f0dfbaba274d0ced7383b5a0809c11e48 Mon Sep 17 00:00:00 2001 From: Luciano Rossi Date: Mon, 14 Nov 2016 16:35:24 -0300 Subject: [PATCH 139/654] Implement CBU (unique bank code) of Argentina See https://github.com/arthurdejong/python-stdnum/issues/43 --- stdnum/ar/cbu.py | 86 +++++++++++++++++++++++++++++++++++++++ tests/test_ar_cbu.doctest | 79 +++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 stdnum/ar/cbu.py create mode 100644 tests/test_ar_cbu.doctest diff --git a/stdnum/ar/cbu.py b/stdnum/ar/cbu.py new file mode 100644 index 00000000..cd753ac1 --- /dev/null +++ b/stdnum/ar/cbu.py @@ -0,0 +1,86 @@ +# cbu.py - functions for handling Argentinian CBU numbers +# coding: utf-8 +# +# Copyright (C) 2016 Luciano Rossi +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""CBU (Clave Bancaria Uniforme, Argentine bank account number). + +CBU it s a code of the Banks of Argentina to identify customer +accounts. The number consists of 22 digits and consists of a 3 digit +bank identiefyer, followed by a 4 digit branch identifyer, a check +digit, a 13 digit account identifyer and another check digit. + +More information: + +* https://es.wikipedia.org/wiki/Clave_Bancaria_Uniforme +* http://www.clientebancario.gov.ar/mediospago/mp080000.asp + +>>> validate('2850590940090418135201') +'2850590940090418135201' +>>> format('2850590940090418135201') +'28505909 40090418135201' +>>> validate('2810590940090418135201') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -').strip() + + +def calc_check_digit(number): + """Calculate the check digit.""" + weights = (3, 1, 7, 9) + check = sum(int(n) * weights[i % 4] + for i, n in enumerate(reversed(number))) + return str((10 - check) % 10) + + +def validate(number): + """Checks to see if the number provided is a valid CBU.""" + number = compact(number) + if len(number) != 22: + raise InvalidLength() + if not number.isdigit(): + raise InvalidFormat() + if calc_check_digit(number[:7]) != number[7]: + raise InvalidChecksum() + if calc_check_digit(number[8:-1]) != number[-1]: + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid CBU.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + number = compact(number) + return ' '.join((number[:8], number[8:])) diff --git a/tests/test_ar_cbu.doctest b/tests/test_ar_cbu.doctest new file mode 100644 index 00000000..151600e9 --- /dev/null +++ b/tests/test_ar_cbu.doctest @@ -0,0 +1,79 @@ +test_ar_cbu.doctest - more detailed doctests for the stdnum.ar.cbu module + +Copyright (C) 2016 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.ar.cbu module. It +tries to validate a number of numbers that have been found online. + +>>> from stdnum.ar import cbu +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 0 0 7 0 9 9 9 0 2 0 0 0 0 0 6 5 7 0 6 0 8 0 +... 0 1 1 0 4 3 3 6 3 0 0 4 3 3 1 3 8 5 7 6 8 3 +... 0 1 4 0 3 3 9 6 0 1 6 3 0 2 0 1 3 8 1 2 7 6 +... 0 1400 236 – 01 5068 0262 5874 +... 0 4 4 0 0 6 4 – 6 – 4 0 0 0 0 1 4 2 9 4 1 0 9 – 2 +... 0 7 2 0 1 4 6 8 2 0 0 0 0 0 0 1 0 6 2 3 4 0 +... 0 7 2 0 1 6 8 0 2 0 0 0 0 0 0 1 1 8 3 2 3 6 +... 0 7 2 0 3 8 0 8 8 8 0 0 0 0 3 5 5 3 3 9 6 8 +... 0070090020000004146504 +... 0110097630009704213797 +... 0140339601630201381276 +... 0140351801684605023087 +... 0168888-1-0000827441015-8 +... 01703342 – 200 000 3036 7766 +... 0200915901000000274233 +... 03400562 00560007577005 +... 0720079388000035942322 +... 0940099324001313220028 +... 1 5 0 0 0 0 6 0 0 0 0 0 5 6 6 0 4 4 7 2 0 0 +... 1 5 0 0 0 8 7 9 - 0 0 0 5 1 3 3 2 0 7 5 1 9 - 6 +... 1 9 1 0 1 1 9 6 5 5 0 1 1 9 0 1 0 8 4 6 4 6 +... 2850590940090418135201 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not cbu.is_valid(x)] +[] + + +More detailed tests: + +>>> cbu.validate('285059094009041') +Traceback (most recent call last): + ... +InvalidLength: ... +>>> cbu.validate('A850590940090418135201') +Traceback (most recent call last): + ... +InvalidFormat: ... +>>> cbu.validate('0940099324001313220028') +'0940099324001313220028' +>>> cbu.validate('1940099324001313220028') # error in first part +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> cbu.validate('0940099324001313220038') # error in second part +Traceback (most recent call last): + ... +InvalidChecksum: ... From 7d16ea5318bd0c3ce0606718c9e0a376cef3b023 Mon Sep 17 00:00:00 2001 From: Greg Kuwaye Date: Thu, 1 Dec 2016 14:30:32 -0800 Subject: [PATCH 140/654] Add new 47 EIN prefix; fix duplicate 46; move 81 47 appears to be a new Internet campus code. Prefix 46 was listed twice, once under the Philadelphia campus and again under the Internet campus. This error may be seen on the IRS website itself. The Wikipedia article on EIN (https://en.wikipedia.org/wiki/Employer_Identification_Number) does not have 46 listed twice. 81 has moved from the Philadelphia campus to the Internet campus. --- stdnum/us/ein.dat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdnum/us/ein.dat b/stdnum/us/ein.dat index e1a8e03d..d4d72e0d 100644 --- a/stdnum/us/ein.dat +++ b/stdnum/us/ein.dat @@ -4,10 +4,10 @@ 01,02,03,04,05,06,11,13,14,16,21,22,23,25,34,51,52,54,55,56,57,58,59,65 campus="Brookhaven" 10,12 campus="Andover" 15,24 campus="Fresno" -20,26,27,45,46 campus="Internet" +20,26,27,45,46,47,81 campus="Internet" 30,32,35,36,37,38,61 campus="Cincinnati" 31 campus="Small Business Administration (SBA)" -33,39,41,42,43,46,48,62,63,64,66,68,71,72,73,74,75,76,77,81,82,83,84,85,86,87,88,91,92,93,98,99 campus="Philadelphia" +33,39,41,42,43,48,62,63,64,66,68,71,72,73,74,75,76,77,82,83,84,85,86,87,88,91,92,93,98,99 campus="Philadelphia" 40,44 campus="Kansas City" 50,53 campus="Austin" 60,67 campus="Atlanta" From 5b4385732f6b7d7b5959e742881e20d63ec58183 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 11 Dec 2016 19:07:41 +0100 Subject: [PATCH 141/654] Remove unused import --- stdnum/au/tfn.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/stdnum/au/tfn.py b/stdnum/au/tfn.py index 99b4b84b..f4c1ab4d 100644 --- a/stdnum/au/tfn.py +++ b/stdnum/au/tfn.py @@ -42,8 +42,6 @@ '123 456 782' """ -import operator - from stdnum.exceptions import * from stdnum.util import clean From c957318aacacf6496e7fef6198f6b9e791552b70 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 19 Mar 2017 15:28:27 +0100 Subject: [PATCH 142/654] Add support for Monaco VAT number The number uses the French TVA number but, unlike normal French VAT numbers, they are not valid French SIREN numbers. See https://github.com/arthurdejong/python-stdnum/issues/46 --- stdnum/fr/tva.py | 8 +++-- stdnum/mc/__init__.py | 24 +++++++++++++++ stdnum/mc/tva.py | 63 +++++++++++++++++++++++++++++++++++++++ tests/test_eu_vat.doctest | 26 +++++++++++++++- 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 stdnum/mc/__init__.py create mode 100644 stdnum/mc/tva.py diff --git a/stdnum/fr/tva.py b/stdnum/fr/tva.py index c82ad82f..bb46feda 100644 --- a/stdnum/fr/tva.py +++ b/stdnum/fr/tva.py @@ -1,7 +1,7 @@ # tva.py - functions for handling French TVA numbers # coding: utf-8 # -# Copyright (C) 2012-2015 Arthur de Jong +# Copyright (C) 2012-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -67,9 +67,13 @@ def validate(number): number = compact(number) if not all(x in _alphabet for x in number[:2]): raise InvalidFormat() + if not number[2:].isdigit(): + raise InvalidFormat() if len(number) != 11: raise InvalidLength() - siren.validate(number[2:]) + if number[2:5] != '000': + # numbers from Monaco are valid TVA but not SIREN + siren.validate(number[2:]) if number.isdigit(): # all-numeric digits if int(number[:2]) != (int(number[2:] + '12') % 97): diff --git a/stdnum/mc/__init__.py b/stdnum/mc/__init__.py new file mode 100644 index 00000000..835d258d --- /dev/null +++ b/stdnum/mc/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Monacan numbers +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Monacan numbers.""" + +# provide vat as an alias +from stdnum.mc import tva as vat diff --git a/stdnum/mc/tva.py b/stdnum/mc/tva.py new file mode 100644 index 00000000..dacf803d --- /dev/null +++ b/stdnum/mc/tva.py @@ -0,0 +1,63 @@ +# tva.py - functions for handling Monacan TVA numbers +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""n° TVA (taxe sur la valeur ajoutée, Monacan VAT number). + +For VAT purposes Monaco is treated as territory of France. The number is +also validated the same as the French TVA, except that it is not based on +a French SIREN. + +>>> compact('53 0000 04605') +'FR53000004605' +>>> validate('53 0000 04605') +'FR53000004605' +>>> validate('FR 61 954 506 077') # French numbers are invalid +Traceback (most recent call last): + ... +InvalidComponent: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean +from stdnum.fr import tva + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return 'FR' + tva.compact(number) + + +def validate(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length, formatting and check digit.""" + number = tva.validate(number) + if number[2:5] != '000': + raise InvalidComponent() + return 'FR' + number + + +def is_valid(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_eu_vat.doctest b/tests/test_eu_vat.doctest index ce10efd5..a578d67d 100644 --- a/tests/test_eu_vat.doctest +++ b/tests/test_eu_vat.doctest @@ -1,6 +1,6 @@ test_eu_vat.doctest - more detailed doctests for the stdnum.eu.vat module -Copyright (C) 2012-2015 Arthur de Jong +Copyright (C) 2012-2017 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -313,6 +313,28 @@ These have been found online and should all be valid numbers. ... Fr 96 631 620 572 ... fr 71383076817 ... +... FR16000063601 +... FR23000047372 +... FR26000040583 +... FR28000113851 +... FR30000017854 +... FR32000000330 +... FR36000006022 +... FR40000066034 +... FR43000020445 +... FR48000052489 +... FR54000065101 +... FR64000063908 +... FR65000100833 +... FR79000030642 +... FR83000065143 +... FR83000113158 +... FR84000082668 +... FR87000018746 +... FR88000008820 +... FR88000053537 +... FR96000110899 +... ... GB 002 4257 28 ... GB 003232345 ... GB 100 1950 75 @@ -864,6 +886,8 @@ These numbers should be mostly valid except that they have the wrong length. ... ... ES B-583784312 ... +... FR000076090 +... ... NL006866304B021 ... ... SE 55643359201 From 649f073f27154aa0664c04be0a53eb55d5600ae9 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 26 Mar 2017 18:07:41 +0200 Subject: [PATCH 143/654] Remove unused import --- stdnum/mc/tva.py | 1 - 1 file changed, 1 deletion(-) diff --git a/stdnum/mc/tva.py b/stdnum/mc/tva.py index dacf803d..9acb2227 100644 --- a/stdnum/mc/tva.py +++ b/stdnum/mc/tva.py @@ -35,7 +35,6 @@ """ from stdnum.exceptions import * -from stdnum.util import clean from stdnum.fr import tva From 61d73c17201a31b11bbdb0d7ab71423a1ce06fbb Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 26 Mar 2017 18:11:41 +0200 Subject: [PATCH 144/654] Add European NACE classification This number is used to classify business. Validation is done based on a downloaded registry. --- getnace.py | 74 +++ stdnum/eu/nace.dat | 999 ++++++++++++++++++++++++++++++++++ stdnum/eu/nace.py | 109 ++++ tests/test_robustness.doctest | 4 +- 4 files changed, 1184 insertions(+), 2 deletions(-) create mode 100755 getnace.py create mode 100644 stdnum/eu/nace.dat create mode 100644 stdnum/eu/nace.py diff --git a/getnace.py b/getnace.py new file mode 100755 index 00000000..0830563d --- /dev/null +++ b/getnace.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 + +# getnace.py - script to get the NACE v2 catalogue +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""This script downloads XML data from the European commission RAMON Eurostat +Metadata Server and extracts the information that is used for validating NACE +codes.""" + +from xml.etree import ElementTree +import cgi +import urllib.request + + +# the location of the ISBN Ranges XML file +download_url = 'http://ec.europa.eu/eurostat/ramon/nomenclatures/index.cfm?TargetUrl=ACT_OTH_CLS_DLD&StrNom=NACE_REV2&StrFormat=XML&StrLanguageCode=EN' + + +def get(f=None): + if f is None: + f = urllib.request.urlopen(download_url) + _, params = cgi.parse_header(f.info().get('Content-Disposition', '')) + filename = params.get('filename', '?') + yield '# generated from %s, downloaded from' % filename + yield '# %s' % download_url + else: + yield '# generated from %s' % f + + # parse XML document + doc = ElementTree.parse(f).getroot() + + # output header + yield '# %s: %s' % ( + doc.find('Classification').get('id'), + doc.find('Classification/Label/LabelText[@language="EN"]').text) + + for item in doc.findall('Classification/Item'): + number = item.get('id') + level = int(item.get('idLevel', 0)) + label = item.find('Label/LabelText[@language="EN"]').text + isic = item.find( + 'Property[@genericName="ISIC4_REF"]/PropertyQualifier/' + + 'PropertyText').text + if level == 1: + section = number + yield '%s label="%s" isic="%s"' % (number, label, isic) + elif level == 2: + yield '%s section="%s" label="%s" isic="%s"' % ( + number, section, label, isic) + else: + yield '%s%s label="%s" isic="%s"' % ( + ' ' * (level - 2), number[level], label, isic) + + +if __name__ == '__main__': + #get('NACE_REV2_20170326_162216.xml') + for row in get(): + print(row) diff --git a/stdnum/eu/nace.dat b/stdnum/eu/nace.dat new file mode 100644 index 00000000..370d5e6f --- /dev/null +++ b/stdnum/eu/nace.dat @@ -0,0 +1,999 @@ +# generated from NACE_REV2_20170326_174221.xml, downloaded from +# http://ec.europa.eu/eurostat/ramon/nomenclatures/index.cfm?TargetUrl=ACT_OTH_CLS_DLD&StrNom=NACE_REV2&StrFormat=XML&StrLanguageCode=EN +# NACE_REV2: Statistical Classification of Economic Activities in the European Community, Rev. 2 (2008) +A label="AGRICULTURE, FORESTRY AND FISHING" isic="A" +01 section="A" label="Crop and animal production, hunting and related service activities" isic="01" + 1 label="Growing of non-perennial crops" isic="011" + 1 label="Growing of cereals (except rice), leguminous crops and oil seeds" isic="0111" + 2 label="Growing of rice" isic="0112" + 3 label="Growing of vegetables and melons, roots and tubers" isic="0113" + 4 label="Growing of sugar cane" isic="0114" + 5 label="Growing of tobacco" isic="0115" + 6 label="Growing of fibre crops" isic="0116" + 9 label="Growing of other non-perennial crops" isic="0119" + 2 label="Growing of perennial crops" isic="012" + 1 label="Growing of grapes" isic="0121" + 2 label="Growing of tropical and subtropical fruits" isic="0122" + 3 label="Growing of citrus fruits" isic="0123" + 4 label="Growing of pome fruits and stone fruits" isic="0124" + 5 label="Growing of other tree and bush fruits and nuts" isic="0125" + 6 label="Growing of oleaginous fruits" isic="0126" + 7 label="Growing of beverage crops" isic="0127" + 8 label="Growing of spices, aromatic, drug and pharmaceutical crops" isic="0128" + 9 label="Growing of other perennial crops" isic="0129" + 3 label="Plant propagation" isic="013" + 0 label="Plant propagation" isic="0130" + 4 label="Animal production" isic="014" + 1 label="Raising of dairy cattle" isic="0141" + 2 label="Raising of other cattle and buffaloes" isic="0141" + 3 label="Raising of horses and other equines" isic="0142" + 4 label="Raising of camels and camelids" isic="0143" + 5 label="Raising of sheep and goats" isic="0144" + 6 label="Raising of swine/pigs" isic="0145" + 7 label="Raising of poultry" isic="0146" + 9 label="Raising of other animals" isic="0149" + 5 label="Mixed farming" isic="015" + 0 label="Mixed farming" isic="0150" + 6 label="Support activities to agriculture and post-harvest crop activities" isic="016" + 1 label="Support activities for crop production" isic="0161" + 2 label="Support activities for animal production" isic="0162" + 3 label="Post-harvest crop activities" isic="0163" + 4 label="Seed processing for propagation" isic="0164" + 7 label="Hunting, trapping and related service activities" isic="017" + 0 label="Hunting, trapping and related service activities" isic="0170" +02 section="A" label="Forestry and logging" isic="02" + 1 label="Silviculture and other forestry activities" isic="021" + 0 label="Silviculture and other forestry activities" isic="0210" + 2 label="Logging" isic="022" + 0 label="Logging" isic="0220" + 3 label="Gathering of wild growing non-wood products" isic="023" + 0 label="Gathering of wild growing non-wood products" isic="0230" + 4 label="Support services to forestry" isic="024" + 0 label="Support services to forestry" isic="0240" +03 section="A" label="Fishing and aquaculture" isic="03" + 1 label="Fishing" isic="031" + 1 label="Marine fishing" isic="0311" + 2 label="Freshwater fishing" isic="0312" + 2 label="Aquaculture" isic="032" + 1 label="Marine aquaculture" isic="0321" + 2 label="Freshwater aquaculture" isic="0322" +B label="MINING AND QUARRYING" isic="B" +05 section="B" label="Mining of coal and lignite" isic="05" + 1 label="Mining of hard coal" isic="051" + 0 label="Mining of hard coal" isic="0510" + 2 label="Mining of lignite" isic="052" + 0 label="Mining of lignite" isic="0520" +06 section="B" label="Extraction of crude petroleum and natural gas" isic="06" + 1 label="Extraction of crude petroleum" isic="061" + 0 label="Extraction of crude petroleum" isic="0610" + 2 label="Extraction of natural gas" isic="062" + 0 label="Extraction of natural gas" isic="0620" +07 section="B" label="Mining of metal ores" isic="07" + 1 label="Mining of iron ores" isic="071" + 0 label="Mining of iron ores" isic="0710" + 2 label="Mining of non-ferrous metal ores" isic="072" + 1 label="Mining of uranium and thorium ores" isic="0721" + 9 label="Mining of other non-ferrous metal ores" isic="0729" +08 section="B" label="Other mining and quarrying" isic="08" + 1 label="Quarrying of stone, sand and clay" isic="081" + 1 label="Quarrying of ornamental and building stone, limestone, gypsum, chalk and slate" isic="0810" + 2 label="Operation of gravel and sand pits; mining of clays and kaolin" isic="0810" + 9 label="Mining and quarrying n.e.c." isic="089" + 1 label="Mining of chemical and fertiliser minerals" isic="0891" + 2 label="Extraction of peat" isic="0892" + 3 label="Extraction of salt" isic="0893" + 9 label="Other mining and quarrying n.e.c." isic="0899" +09 section="B" label="Mining support service activities" isic="09" + 1 label="Support activities for petroleum and natural gas extraction" isic="091" + 0 label="Support activities for petroleum and natural gas extraction" isic="0910" + 9 label="Support activities for other mining and quarrying" isic="099" + 0 label="Support activities for other mining and quarrying" isic="0990" +C label="MANUFACTURING" isic="C" +10 section="C" label="Manufacture of food products" isic="10" + 1 label="Processing and preserving of meat and production of meat products" isic="101" + 1 label="Processing and preserving of meat" isic="1010" + 2 label="Processing and preserving of poultry meat" isic="1010" + 3 label="Production of meat and poultry meat products" isic="1010" + 2 label="Processing and preserving of fish, crustaceans and molluscs" isic="102" + 0 label="Processing and preserving of fish, crustaceans and molluscs" isic="1020" + 3 label="Processing and preserving of fruit and vegetables" isic="103" + 1 label="Processing and preserving of potatoes" isic="1030" + 2 label="Manufacture of fruit and vegetable juice" isic="1030" + 9 label="Other processing and preserving of fruit and vegetables" isic="1030" + 4 label="Manufacture of vegetable and animal oils and fats" isic="104" + 1 label="Manufacture of oils and fats" isic="1040" + 2 label="Manufacture of margarine and similar edible fats" isic="1040" + 5 label="Manufacture of dairy products" isic="105" + 1 label="Operation of dairies and cheese making" isic="1050" + 2 label="Manufacture of ice cream" isic="1050" + 6 label="Manufacture of grain mill products, starches and starch products" isic="106" + 1 label="Manufacture of grain mill products" isic="1061" + 2 label="Manufacture of starches and starch products" isic="1062" + 7 label="Manufacture of bakery and farinaceous products" isic="107" + 1 label="Manufacture of bread; manufacture of fresh pastry goods and cakes" isic="1071" + 2 label="Manufacture of rusks and biscuits; manufacture of preserved pastry goods and cakes" isic="1071" + 3 label="Manufacture of macaroni, noodles, couscous and similar farinaceous products" isic="1074" + 8 label="Manufacture of other food products" isic="107" + 1 label="Manufacture of sugar" isic="1072" + 2 label="Manufacture of cocoa, chocolate and sugar confectionery" isic="1073" + 3 label="Processing of tea and coffee" isic="1079" + 4 label="Manufacture of condiments and seasonings" isic="1079" + 5 label="Manufacture of prepared meals and dishes" isic="1075" + 6 label="Manufacture of homogenised food preparations and dietetic food" isic="1079" + 9 label="Manufacture of other food products n.e.c." isic="1079" + 9 label="Manufacture of prepared animal feeds" isic="108" + 1 label="Manufacture of prepared feeds for farm animals" isic="1080" + 2 label="Manufacture of prepared pet foods" isic="1080" +11 section="C" label="Manufacture of beverages" isic="11" + 0 label="Manufacture of beverages" isic="110" + 1 label="Distilling, rectifying and blending of spirits" isic="1101" + 2 label="Manufacture of wine from grape" isic="1102" + 3 label="Manufacture of cider and other fruit wines" isic="1102" + 4 label="Manufacture of other non-distilled fermented beverages" isic="1102" + 5 label="Manufacture of beer" isic="1103" + 6 label="Manufacture of malt" isic="1103" + 7 label="Manufacture of soft drinks; production of mineral waters and other bottled waters" isic="1104" +12 section="C" label="Manufacture of tobacco products" isic="12" + 0 label="Manufacture of tobacco products" isic="120" + 0 label="Manufacture of tobacco products" isic="1200" +13 section="C" label="Manufacture of textiles" isic="13" + 1 label="Preparation and spinning of textile fibres" isic="131" + 0 label="Preparation and spinning of textile fibres" isic="1311" + 2 label="Weaving of textiles" isic="131" + 0 label="Weaving of textiles" isic="1312" + 3 label="Finishing of textiles" isic="131" + 0 label="Finishing of textiles" isic="1313" + 9 label="Manufacture of other textiles" isic="139" + 1 label="Manufacture of knitted and crocheted fabrics" isic="1391" + 2 label="Manufacture of made-up textile articles, except apparel" isic="1392" + 3 label="Manufacture of carpets and rugs" isic="1393" + 4 label="Manufacture of cordage, rope, twine and netting" isic="1394" + 5 label="Manufacture of non-wovens and articles made from non-wovens, except apparel" isic="1399" + 6 label="Manufacture of other technical and industrial textiles" isic="1399" + 9 label="Manufacture of other textiles n.e.c." isic="1399" +14 section="C" label="Manufacture of wearing apparel" isic="14" + 1 label="Manufacture of wearing apparel, except fur apparel" isic="141" + 1 label="Manufacture of leather clothes" isic="1410" + 2 label="Manufacture of workwear" isic="1410" + 3 label="Manufacture of other outerwear" isic="1410" + 4 label="Manufacture of underwear" isic="1410" + 9 label="Manufacture of other wearing apparel and accessories" isic="1410" + 2 label="Manufacture of articles of fur" isic="142" + 0 label="Manufacture of articles of fur" isic="1420" + 3 label="Manufacture of knitted and crocheted apparel" isic="143" + 1 label="Manufacture of knitted and crocheted hosiery" isic="1430" + 9 label="Manufacture of other knitted and crocheted apparel" isic="1430" +15 section="C" label="Manufacture of leather and related products" isic="15" + 1 label="Tanning and dressing of leather; manufacture of luggage, handbags, saddlery and harness; dressing and dyeing of fur" isic="151" + 1 label="Tanning and dressing of leather; dressing and dyeing of fur" isic="1511" + 2 label="Manufacture of luggage, handbags and the like, saddlery and harness" isic="1512" + 2 label="Manufacture of footwear" isic="152" + 0 label="Manufacture of footwear" isic="1520" +16 section="C" label="Manufacture of wood and of products of wood and cork, except furniture; manufacture of articles of straw and plaiting materials" isic="16" + 1 label="Sawmilling and planing of wood" isic="161" + 0 label="Sawmilling and planing of wood" isic="1610" + 2 label="Manufacture of products of wood, cork, straw and plaiting materials" isic="162" + 1 label="Manufacture of veneer sheets and wood-based panels" isic="1621" + 2 label="Manufacture of assembled parquet floors" isic="1622" + 3 label="Manufacture of other builders' carpentry and joinery" isic="1622" + 4 label="Manufacture of wooden containers" isic="1623" + 9 label="Manufacture of other products of wood; manufacture of articles of cork, straw and plaiting materials" isic="1629" +17 section="C" label="Manufacture of paper and paper products" isic="17" + 1 label="Manufacture of pulp, paper and paperboard" isic="170" + 1 label="Manufacture of pulp" isic="1701" + 2 label="Manufacture of paper and paperboard" isic="1701" + 2 label="Manufacture of articles of paper and paperboard " isic="170" + 1 label="Manufacture of corrugated paper and paperboard and of containers of paper and paperboard" isic="1702" + 2 label="Manufacture of household and sanitary goods and of toilet requisites" isic="1709" + 3 label="Manufacture of paper stationery" isic="1709" + 4 label="Manufacture of wallpaper" isic="1709" + 9 label="Manufacture of other articles of paper and paperboard" isic="1709" +18 section="C" label="Printing and reproduction of recorded media" isic="18" + 1 label="Printing and service activities related to printing" isic="181" + 1 label="Printing of newspapers" isic="1811" + 2 label="Other printing" isic="1811" + 3 label="Pre-press and pre-media services" isic="1812" + 4 label="Binding and related services" isic="1812" + 2 label="Reproduction of recorded media" isic="182" + 0 label="Reproduction of recorded media" isic="1820" +19 section="C" label="Manufacture of coke and refined petroleum products" isic="19" + 1 label="Manufacture of coke oven products" isic="191" + 0 label="Manufacture of coke oven products" isic="1910" + 2 label="Manufacture of refined petroleum products" isic="192" + 0 label="Manufacture of refined petroleum products" isic="1920" +20 section="C" label="Manufacture of chemicals and chemical products" isic="20" + 1 label="Manufacture of basic chemicals, fertilisers and nitrogen compounds, plastics and synthetic rubber in primary forms" isic="201" + 1 label="Manufacture of industrial gases" isic="2011" + 2 label="Manufacture of dyes and pigments" isic="2011" + 3 label="Manufacture of other inorganic basic chemicals" isic="2011" + 4 label="Manufacture of other organic basic chemicals" isic="2011" + 5 label="Manufacture of fertilisers and nitrogen compounds" isic="2012" + 6 label="Manufacture of plastics in primary forms" isic="2013" + 7 label="Manufacture of synthetic rubber in primary forms" isic="2013" + 2 label="Manufacture of pesticides and other agrochemical products" isic="202" + 0 label="Manufacture of pesticides and other agrochemical products" isic="2021" + 3 label="Manufacture of paints, varnishes and similar coatings, printing ink and mastics" isic="202" + 0 label="Manufacture of paints, varnishes and similar coatings, printing ink and mastics" isic="2022" + 4 label="Manufacture of soap and detergents, cleaning and polishing preparations, perfumes and toilet preparations" isic="202" + 1 label="Manufacture of soap and detergents, cleaning and polishing preparations" isic="2023" + 2 label="Manufacture of perfumes and toilet preparations" isic="2023" + 5 label="Manufacture of other chemical products" isic="202" + 1 label="Manufacture of explosives" isic="2029" + 2 label="Manufacture of glues" isic="2029" + 3 label="Manufacture of essential oils" isic="2029" + 9 label="Manufacture of other chemical products n.e.c." isic="2029" + 6 label="Manufacture of man-made fibres" isic="203" + 0 label="Manufacture of man-made fibres" isic="2030" +21 section="C" label="Manufacture of basic pharmaceutical products and pharmaceutical preparations" isic="21" + 1 label="Manufacture of basic pharmaceutical products" isic="210" + 0 label="Manufacture of basic pharmaceutical products" isic="2100" + 2 label="Manufacture of pharmaceutical preparations" isic="210" + 0 label="Manufacture of pharmaceutical preparations" isic="2100" +22 section="C" label="Manufacture of rubber and plastic products" isic="22" + 1 label="Manufacture of rubber products" isic="221" + 1 label="Manufacture of rubber tyres and tubes; retreading and rebuilding of rubber tyres" isic="2211" + 9 label="Manufacture of other rubber products" isic="2219" + 2 label="Manufacture of plastic products" isic="222" + 1 label="Manufacture of plastic plates, sheets, tubes and profiles" isic="2220" + 2 label="Manufacture of plastic packing goods" isic="2220" + 3 label="Manufacture of builders’ ware of plastic" isic="2220" + 9 label="Manufacture of other plastic products" isic="2220" +23 section="C" label="Manufacture of other non-metallic mineral products" isic="23" + 1 label="Manufacture of glass and glass products" isic="231" + 1 label="Manufacture of flat glass" isic="2310" + 2 label="Shaping and processing of flat glass" isic="2310" + 3 label="Manufacture of hollow glass" isic="2310" + 4 label="Manufacture of glass fibres" isic="2310" + 9 label="Manufacture and processing of other glass, including technical glassware" isic="2310" + 2 label="Manufacture of refractory products" isic="239" + 0 label="Manufacture of refractory products" isic="2391" + 3 label="Manufacture of clay building materials" isic="239" + 1 label="Manufacture of ceramic tiles and flags" isic="2392" + 2 label="Manufacture of bricks, tiles and construction products, in baked clay" isic="2392" + 4 label="Manufacture of other porcelain and ceramic products" isic="239" + 1 label="Manufacture of ceramic household and ornamental articles" isic="2393" + 2 label="Manufacture of ceramic sanitary fixtures" isic="2393" + 3 label="Manufacture of ceramic insulators and insulating fittings" isic="2393" + 4 label="Manufacture of other technical ceramic products" isic="2393" + 9 label="Manufacture of other ceramic products" isic="2393" + 5 label="Manufacture of cement, lime and plaster" isic="239" + 1 label="Manufacture of cement" isic="2394" + 2 label="Manufacture of lime and plaster" isic="2394" + 6 label="Manufacture of articles of concrete, cement and plaster" isic="239" + 1 label="Manufacture of concrete products for construction purposes" isic="2395" + 2 label="Manufacture of plaster products for construction purposes" isic="2395" + 3 label="Manufacture of ready-mixed concrete" isic="2395" + 4 label="Manufacture of mortars" isic="2395" + 5 label="Manufacture of fibre cement" isic="2395" + 9 label="Manufacture of other articles of concrete, plaster and cement" isic="2395" + 7 label="Cutting, shaping and finishing of stone" isic="239" + 0 label="Cutting, shaping and finishing of stone" isic="2396" + 9 label="Manufacture of abrasive products and non-metallic mineral products n.e.c." isic="239" + 1 label="Production of abrasive products" isic="2399" + 9 label="Manufacture of other non-metallic mineral products n.e.c." isic="2399" +24 section="C" label="Manufacture of basic metals" isic="24" + 1 label="Manufacture of basic iron and steel and of ferro-alloys" isic="241" + 0 label="Manufacture of basic iron and steel and of ferro-alloys " isic="2410" + 2 label="Manufacture of tubes, pipes, hollow profiles and related fittings, of steel" isic="241" + 0 label="Manufacture of tubes, pipes, hollow profiles and related fittings, of steel" isic="2410" + 3 label="Manufacture of other products of first processing of steel" isic="241" + 1 label="Cold drawing of bars" isic="2410" + 2 label="Cold rolling of narrow strip" isic="2410" + 3 label="Cold forming or folding" isic="2410" + 4 label="Cold drawing of wire" isic="2410" + 4 label="Manufacture of basic precious and other non-ferrous metals" isic="242" + 1 label="Precious metals production" isic="2420" + 2 label="Aluminium production" isic="2420" + 3 label="Lead, zinc and tin production" isic="2420" + 4 label="Copper production" isic="2420" + 5 label="Other non-ferrous metal production" isic="2420" + 6 label="Processing of nuclear fuel " isic="2420" + 5 label="Casting of metals" isic="243" + 1 label="Casting of iron" isic="2431" + 2 label="Casting of steel" isic="2431" + 3 label="Casting of light metals" isic="2432" + 4 label="Casting of other non-ferrous metals" isic="2432" +25 section="C" label="Manufacture of fabricated metal products, except machinery and equipment" isic="25" + 1 label="Manufacture of structural metal products" isic="251" + 1 label="Manufacture of metal structures and parts of structures" isic="2511" + 2 label="Manufacture of doors and windows of metal" isic="2511" + 2 label="Manufacture of tanks, reservoirs and containers of metal" isic="251" + 1 label="Manufacture of central heating radiators and boilers" isic="2512" + 9 label="Manufacture of other tanks, reservoirs and containers of metal" isic="2512" + 3 label="Manufacture of steam generators, except central heating hot water boilers" isic="251" + 0 label="Manufacture of steam generators, except central heating hot water boilers" isic="2513" + 4 label="Manufacture of weapons and ammunition" isic="252" + 0 label="Manufacture of weapons and ammunition" isic="2520" + 5 label="Forging, pressing, stamping and roll-forming of metal; powder metallurgy" isic="259" + 0 label="Forging, pressing, stamping and roll-forming of metal; powder metallurgy" isic="2591" + 6 label="Treatment and coating of metals; machining" isic="259" + 1 label="Treatment and coating of metals" isic="2592" + 2 label="Machining" isic="2592" + 7 label="Manufacture of cutlery, tools and general hardware" isic="259" + 1 label="Manufacture of cutlery" isic="2593" + 2 label="Manufacture of locks and hinges" isic="2593" + 3 label="Manufacture of tools" isic="2593" + 9 label="Manufacture of other fabricated metal products" isic="259" + 1 label="Manufacture of steel drums and similar containers" isic="2599" + 2 label="Manufacture of light metal packaging " isic="2599" + 3 label="Manufacture of wire products, chain and springs" isic="2599" + 4 label="Manufacture of fasteners and screw machine products" isic="2599" + 9 label="Manufacture of other fabricated metal products n.e.c." isic="2599" +26 section="C" label="Manufacture of computer, electronic and optical products" isic="26" + 1 label="Manufacture of electronic components and boards" isic="261" + 1 label="Manufacture of electronic components" isic="2610" + 2 label="Manufacture of loaded electronic boards" isic="2610" + 2 label="Manufacture of computers and peripheral equipment" isic="262" + 0 label="Manufacture of computers and peripheral equipment" isic="2620" + 3 label="Manufacture of communication equipment" isic="263" + 0 label="Manufacture of communication equipment" isic="2630" + 4 label="Manufacture of consumer electronics" isic="264" + 0 label="Manufacture of consumer electronics" isic="2640" + 5 label="Manufacture of instruments and appliances for measuring, testing and navigation; watches and clocks" isic="265" + 1 label="Manufacture of instruments and appliances for measuring, testing and navigation" isic="2651" + 2 label="Manufacture of watches and clocks" isic="2652" + 6 label="Manufacture of irradiation, electromedical and electrotherapeutic equipment" isic="266" + 0 label="Manufacture of irradiation, electromedical and electrotherapeutic equipment" isic="2660" + 7 label="Manufacture of optical instruments and photographic equipment" isic="267" + 0 label="Manufacture of optical instruments and photographic equipment" isic="2670" + 8 label="Manufacture of magnetic and optical media" isic="268" + 0 label="Manufacture of magnetic and optical media" isic="2680" +27 section="C" label="Manufacture of electrical equipment" isic="27" + 1 label="Manufacture of electric motors, generators, transformers and electricity distribution and control apparatus" isic="271" + 1 label="Manufacture of electric motors, generators and transformers" isic="2710" + 2 label="Manufacture of electricity distribution and control apparatus" isic="2710" + 2 label="Manufacture of batteries and accumulators" isic="272" + 0 label="Manufacture of batteries and accumulators" isic="2720" + 3 label="Manufacture of wiring and wiring devices" isic="273" + 1 label="Manufacture of fibre optic cables" isic="2731" + 2 label="Manufacture of other electronic and electric wires and cables" isic="2732" + 3 label="Manufacture of wiring devices" isic="2733" + 4 label="Manufacture of electric lighting equipment" isic="274" + 0 label="Manufacture of electric lighting equipment" isic="2740" + 5 label="Manufacture of domestic appliances" isic="275" + 1 label="Manufacture of electric domestic appliances" isic="2750" + 2 label="Manufacture of non-electric domestic appliances" isic="2750" + 9 label="Manufacture of other electrical equipment" isic="279" + 0 label="Manufacture of other electrical equipment" isic="2790" +28 section="C" label="Manufacture of machinery and equipment n.e.c." isic="28" + 1 label="Manufacture of general-purpose machinery" isic="281" + 1 label="Manufacture of engines and turbines, except aircraft, vehicle and cycle engines" isic="2811" + 2 label="Manufacture of fluid power equipment" isic="2812" + 3 label="Manufacture of other pumps and compressors" isic="2813" + 4 label="Manufacture of other taps and valves" isic="2813" + 5 label="Manufacture of bearings, gears, gearing and driving elements" isic="2814" + 2 label="Manufacture of other general-purpose machinery" isic="281" + 1 label="Manufacture of ovens, furnaces and furnace burners" isic="2815" + 2 label="Manufacture of lifting and handling equipment" isic="2816" + 3 label="Manufacture of office machinery and equipment (except computers and peripheral equipment)" isic="2817" + 4 label="Manufacture of power-driven hand tools" isic="2818" + 5 label="Manufacture of non-domestic cooling and ventilation equipment" isic="2819" + 9 label="Manufacture of other general-purpose machinery n.e.c." isic="2819" + 3 label="Manufacture of agricultural and forestry machinery" isic="282" + 0 label="Manufacture of agricultural and forestry machinery" isic="2821" + 4 label="Manufacture of metal forming machinery and machine tools" isic="282" + 1 label="Manufacture of metal forming machinery" isic="2822" + 9 label="Manufacture of other machine tools" isic="2822" + 9 label="Manufacture of other special-purpose machinery" isic="282" + 1 label="Manufacture of machinery for metallurgy" isic="2823" + 2 label="Manufacture of machinery for mining, quarrying and construction" isic="2824" + 3 label="Manufacture of machinery for food, beverage and tobacco processing" isic="2825" + 4 label="Manufacture of machinery for textile, apparel and leather production" isic="2826" + 5 label="Manufacture of machinery for paper and paperboard production" isic="2829" + 6 label="Manufacture of plastics and rubber machinery" isic="2829" + 9 label="Manufacture of other special-purpose machinery n.e.c." isic="2829" +29 section="C" label="Manufacture of motor vehicles, trailers and semi-trailers" isic="29" + 1 label="Manufacture of motor vehicles" isic="291" + 0 label="Manufacture of motor vehicles" isic="2910" + 2 label="Manufacture of bodies (coachwork) for motor vehicles; manufacture of trailers and semi-trailers" isic="292" + 0 label="Manufacture of bodies (coachwork) for motor vehicles; manufacture of trailers and semi-trailers" isic="2920" + 3 label="Manufacture of parts and accessories for motor vehicles" isic="293" + 1 label="Manufacture of electrical and electronic equipment for motor vehicles" isic="2930" + 2 label="Manufacture of other parts and accessories for motor vehicles" isic="2930" +30 section="C" label="Manufacture of other transport equipment" isic="30" + 1 label="Building of ships and boats" isic="301" + 1 label="Building of ships and floating structures" isic="3011" + 2 label="Building of pleasure and sporting boats" isic="3012" + 2 label="Manufacture of railway locomotives and rolling stock" isic="302" + 0 label="Manufacture of railway locomotives and rolling stock" isic="3020" + 3 label="Manufacture of air and spacecraft and related machinery" isic="303" + 0 label="Manufacture of air and spacecraft and related machinery" isic="3030" + 4 label="Manufacture of military fighting vehicles" isic="304" + 0 label="Manufacture of military fighting vehicles" isic="3040" + 9 label="Manufacture of transport equipment n.e.c." isic="309" + 1 label="Manufacture of motorcycles" isic="3091" + 2 label="Manufacture of bicycles and invalid carriages" isic="3092" + 9 label="Manufacture of other transport equipment n.e.c." isic="3099" +31 section="C" label="Manufacture of furniture" isic="31" + 0 label="Manufacture of furniture" isic="310" + 1 label="Manufacture of office and shop furniture" isic="3100" + 2 label="Manufacture of kitchen furniture" isic="3100" + 3 label="Manufacture of mattresses" isic="3100" + 9 label="Manufacture of other furniture" isic="3100" +32 section="C" label="Other manufacturing" isic="32" + 1 label="Manufacture of jewellery, bijouterie and related articles" isic="321" + 1 label="Striking of coins" isic="3211" + 2 label="Manufacture of jewellery and related articles" isic="3211" + 3 label="Manufacture of imitation jewellery and related articles" isic="3212" + 2 label="Manufacture of musical instruments" isic="322" + 0 label="Manufacture of musical instruments" isic="3220" + 3 label="Manufacture of sports goods" isic="323" + 0 label="Manufacture of sports goods" isic="3230" + 4 label="Manufacture of games and toys" isic="324" + 0 label="Manufacture of games and toys" isic="3240" + 5 label="Manufacture of medical and dental instruments and supplies" isic="325" + 0 label="Manufacture of medical and dental instruments and supplies" isic="3250" + 9 label="Manufacturing n.e.c." isic="329" + 1 label="Manufacture of brooms and brushes" isic="3290" + 9 label="Other manufacturing n.e.c. " isic="3290" +33 section="C" label="Repair and installation of machinery and equipment" isic="33" + 1 label="Repair of fabricated metal products, machinery and equipment" isic="331" + 1 label="Repair of fabricated metal products" isic="3311" + 2 label="Repair of machinery" isic="3312" + 3 label="Repair of electronic and optical equipment" isic="3313" + 4 label="Repair of electrical equipment" isic="3314" + 5 label="Repair and maintenance of ships and boats" isic="3315" + 6 label="Repair and maintenance of aircraft and spacecraft" isic="3315" + 7 label="Repair and maintenance of other transport equipment" isic="3315" + 9 label="Repair of other equipment" isic="3319" + 2 label="Installation of industrial machinery and equipment" isic="332" + 0 label="Installation of industrial machinery and equipment" isic="3320" +D label="ELECTRICITY, GAS, STEAM AND AIR CONDITIONING SUPPLY" isic="D" +35 section="D" label="Electricity, gas, steam and air conditioning supply" isic="35" + 1 label="Electric power generation, transmission and distribution" isic="351" + 1 label="Production of electricity" isic="3510" + 2 label="Transmission of electricity" isic="3510" + 3 label="Distribution of electricity" isic="3510" + 4 label="Trade of electricity" isic="3510" + 2 label="Manufacture of gas; distribution of gaseous fuels through mains" isic="352" + 1 label="Manufacture of gas" isic="3520" + 2 label="Distribution of gaseous fuels through mains" isic="3520" + 3 label="Trade of gas through mains" isic="3520" + 3 label="Steam and air conditioning supply" isic="353" + 0 label="Steam and air conditioning supply" isic="3530" +E label="WATER SUPPLY; SEWERAGE, WASTE MANAGEMENT AND REMEDIATION ACTIVITIES" isic="E" +36 section="E" label="Water collection, treatment and supply" isic="36" + 0 label="Water collection, treatment and supply" isic="360" + 0 label="Water collection, treatment and supply" isic="3600" +37 section="E" label="Sewerage" isic="37" + 0 label="Sewerage" isic="370" + 0 label="Sewerage" isic="3700" +38 section="E" label="Waste collection, treatment and disposal activities; materials recovery" isic="38" + 1 label="Waste collection" isic="381" + 1 label="Collection of non-hazardous waste" isic="3811" + 2 label="Collection of hazardous waste" isic="3812" + 2 label="Waste treatment and disposal" isic="382" + 1 label="Treatment and disposal of non-hazardous waste" isic="3821" + 2 label="Treatment and disposal of hazardous waste" isic="3822" + 3 label="Materials recovery" isic="383" + 1 label="Dismantling of wrecks" isic="3830" + 2 label="Recovery of sorted materials" isic="3830" +39 section="E" label="Remediation activities and other waste management services" isic="39" + 0 label="Remediation activities and other waste management services" isic="390" + 0 label="Remediation activities and other waste management services" isic="3900" +F label="CONSTRUCTION" isic="F" +41 section="F" label="Construction of buildings" isic="41" + 1 label="Development of building projects" isic="410" + 0 label="Development of building projects" isic="4100" + 2 label="Construction of residential and non-residential buildings" isic="410" + 0 label="Construction of residential and non-residential buildings" isic="4100" +42 section="F" label="Civil engineering" isic="42" + 1 label="Construction of roads and railways" isic="421" + 1 label="Construction of roads and motorways" isic="4210" + 2 label="Construction of railways and underground railways" isic="4210" + 3 label="Construction of bridges and tunnels" isic="4210" + 2 label="Construction of utility projects" isic="422" + 1 label="Construction of utility projects for fluids" isic="4220" + 2 label="Construction of utility projects for electricity and telecommunications" isic="4220" + 9 label="Construction of other civil engineering projects" isic="429" + 1 label="Construction of water projects" isic="4290" + 9 label="Construction of other civil engineering projects n.e.c." isic="4290" +43 section="F" label="Specialised construction activities" isic="43" + 1 label="Demolition and site preparation" isic="431" + 1 label="Demolition" isic="4311" + 2 label="Site preparation" isic="4312" + 3 label="Test drilling and boring" isic="4312" + 2 label="Electrical, plumbing and other construction installation activities" isic="432" + 1 label="Electrical installation" isic="4321" + 2 label="Plumbing, heat and air-conditioning installation" isic="4322" + 9 label="Other construction installation" isic="4329" + 3 label="Building completion and finishing" isic="433" + 1 label="Plastering" isic="4330" + 2 label="Joinery installation" isic="4330" + 3 label="Floor and wall covering" isic="4330" + 4 label="Painting and glazing" isic="4330" + 9 label="Other building completion and finishing" isic="4330" + 9 label="Other specialised construction activities" isic="439" + 1 label="Roofing activities" isic="4390" + 9 label="Other specialised construction activities n.e.c." isic="4390" +G label="WHOLESALE AND RETAIL TRADE; REPAIR OF MOTOR VEHICLES AND MOTORCYCLES" isic="G" +45 section="G" label="Wholesale and retail trade and repair of motor vehicles and motorcycles" isic="45" + 1 label="Sale of motor vehicles" isic="451" + 1 label="Sale of cars and light motor vehicles" isic="4510" + 9 label="Sale of other motor vehicles" isic="4510" + 2 label="Maintenance and repair of motor vehicles" isic="452" + 0 label="Maintenance and repair of motor vehicles" isic="4520" + 3 label="Sale of motor vehicle parts and accessories" isic="453" + 1 label="Wholesale trade of motor vehicle parts and accessories" isic="4530" + 2 label="Retail trade of motor vehicle parts and accessories" isic="4530" + 4 label="Sale, maintenance and repair of motorcycles and related parts and accessories" isic="454" + 0 label="Sale, maintenance and repair of motorcycles and related parts and accessories" isic="4540" +46 section="G" label="Wholesale trade, except of motor vehicles and motorcycles" isic="46" + 1 label="Wholesale on a fee or contract basis" isic="461" + 1 label="Agents involved in the sale of agricultural raw materials, live animals, textile raw materials and semi-finished goods" isic="4610" + 2 label="Agents involved in the sale of fuels, ores, metals and industrial chemicals" isic="4610" + 3 label="Agents involved in the sale of timber and building materials" isic="4610" + 4 label="Agents involved in the sale of machinery, industrial equipment, ships and aircraft" isic="4610" + 5 label="Agents involved in the sale of furniture, household goods, hardware and ironmongery" isic="4610" + 6 label="Agents involved in the sale of textiles, clothing, fur, footwear and leather goods" isic="4610" + 7 label="Agents involved in the sale of food, beverages and tobacco" isic="4610" + 8 label="Agents specialised in the sale of other particular products" isic="4610" + 9 label="Agents involved in the sale of a variety of goods" isic="4610" + 2 label="Wholesale of agricultural raw materials and live animals" isic="462" + 1 label="Wholesale of grain, unmanufactured tobacco, seeds and animal feeds" isic="4620" + 2 label="Wholesale of flowers and plants" isic="4620" + 3 label="Wholesale of live animals" isic="4620" + 4 label="Wholesale of hides, skins and leather" isic="4620" + 3 label="Wholesale of food, beverages and tobacco" isic="463" + 1 label="Wholesale of fruit and vegetables" isic="4630" + 2 label="Wholesale of meat and meat products" isic="4630" + 3 label="Wholesale of dairy products, eggs and edible oils and fats" isic="4630" + 4 label="Wholesale of beverages" isic="4630" + 5 label="Wholesale of tobacco products" isic="4630" + 6 label="Wholesale of sugar and chocolate and sugar confectionery" isic="4630" + 7 label="Wholesale of coffee, tea, cocoa and spices" isic="4630" + 8 label="Wholesale of other food, including fish, crustaceans and molluscs" isic="4630" + 9 label="Non-specialised wholesale of food, beverages and tobacco" isic="4630" + 4 label="Wholesale of household goods" isic="464" + 1 label="Wholesale of textiles" isic="4641" + 2 label="Wholesale of clothing and footwear" isic="4641" + 3 label="Wholesale of electrical household appliances" isic="4649" + 4 label="Wholesale of china and glassware and cleaning materials" isic="4649" + 5 label="Wholesale of perfume and cosmetics" isic="4649" + 6 label="Wholesale of pharmaceutical goods" isic="4649" + 7 label="Wholesale of furniture, carpets and lighting equipment" isic="4649" + 8 label="Wholesale of watches and jewellery" isic="4649" + 9 label="Wholesale of other household goods" isic="4649" + 5 label="Wholesale of information and communication equipment" isic="465" + 1 label="Wholesale of computers, computer peripheral equipment and software" isic="4651" + 2 label="Wholesale of electronic and telecommunications equipment and parts" isic="4652" + 6 label="Wholesale of other machinery, equipment and supplies" isic="466" + 1 label="Wholesale of agricultural machinery, equipment and supplies" isic="4653" + 2 label="Wholesale of machine tools" isic="4659" + 3 label="Wholesale of mining, construction and civil engineering machinery" isic="4659" + 4 label="Wholesale of machinery for the textile industry and of sewing and knitting machines" isic="4659" + 5 label="Wholesale of office furniture" isic="4659" + 6 label="Wholesale of other office machinery and equipment" isic="4659" + 9 label="Wholesale of other machinery and equipment" isic="4659" + 7 label="Other specialised wholesale" isic="466" + 1 label="Wholesale of solid, liquid and gaseous fuels and related products" isic="4661" + 2 label="Wholesale of metals and metal ores" isic="4662" + 3 label="Wholesale of wood, construction materials and sanitary equipment" isic="4663" + 4 label="Wholesale of hardware, plumbing and heating equipment and supplies" isic="4663" + 5 label="Wholesale of chemical products" isic="4669" + 6 label="Wholesale of other intermediate products" isic="4669" + 7 label="Wholesale of waste and scrap" isic="4669" + 9 label="Non-specialised wholesale trade" isic="469" + 0 label="Non-specialised wholesale trade" isic="4690" +47 section="G" label="Retail trade, except of motor vehicles and motorcycles" isic="47" + 1 label="Retail sale in non-specialised stores" isic="471" + 1 label="Retail sale in non-specialised stores with food, beverages or tobacco predominating" isic="4711" + 9 label="Other retail sale in non-specialised stores" isic="4719" + 2 label="Retail sale of food, beverages and tobacco in specialised stores" isic="472" + 1 label="Retail sale of fruit and vegetables in specialised stores" isic="4721" + 2 label="Retail sale of meat and meat products in specialised stores" isic="4721" + 3 label="Retail sale of fish, crustaceans and molluscs in specialised stores" isic="4721" + 4 label="Retail sale of bread, cakes, flour confectionery and sugar confectionery in specialised stores" isic="4721" + 5 label="Retail sale of beverages in specialised stores" isic="4722" + 6 label="Retail sale of tobacco products in specialised stores" isic="4723" + 9 label="Other retail sale of food in specialised stores" isic="4721" + 3 label="Retail sale of automotive fuel in specialised stores" isic="473" + 0 label="Retail sale of automotive fuel in specialised stores" isic="4730" + 4 label="Retail sale of information and communication equipment in specialised stores" isic="474" + 1 label="Retail sale of computers, peripheral units and software in specialised stores" isic="4741" + 2 label="Retail sale of telecommunications equipment in specialised stores" isic="4741" + 3 label="Retail sale of audio and video equipment in specialised stores" isic="4742" + 5 label="Retail sale of other household equipment in specialised stores" isic="475" + 1 label="Retail sale of textiles in specialised stores" isic="4751" + 2 label="Retail sale of hardware, paints and glass in specialised stores" isic="4752" + 3 label="Retail sale of carpets, rugs, wall and floor coverings in specialised stores" isic="4753" + 4 label="Retail sale of electrical household appliances in specialised stores" isic="4759" + 9 label="Retail sale of furniture, lighting equipment and other household articles in specialised stores" isic="4759" + 6 label="Retail sale of cultural and recreation goods in specialised stores" isic="476" + 1 label="Retail sale of books in specialised stores" isic="4761" + 2 label="Retail sale of newspapers and stationery in specialised stores" isic="4761" + 3 label="Retail sale of music and video recordings in specialised stores" isic="4762" + 4 label="Retail sale of sporting equipment in specialised stores" isic="4763" + 5 label="Retail sale of games and toys in specialised stores" isic="4764" + 7 label="Retail sale of other goods in specialised stores" isic="477" + 1 label="Retail sale of clothing in specialised stores" isic="4771" + 2 label="Retail sale of footwear and leather goods in specialised stores" isic="4771" + 3 label="Dispensing chemist in specialised stores" isic="4772" + 4 label="Retail sale of medical and orthopaedic goods in specialised stores" isic="4772" + 5 label="Retail sale of cosmetic and toilet articles in specialised stores" isic="4772" + 6 label="Retail sale of flowers, plants, seeds, fertilisers, pet animals and pet food in specialised stores" isic="4773" + 7 label="Retail sale of watches and jewellery in specialised stores" isic="4773" + 8 label="Other retail sale of new goods in specialised stores" isic="4773" + 9 label="Retail sale of second-hand goods in stores" isic="4774" + 8 label="Retail sale via stalls and markets" isic="478" + 1 label="Retail sale via stalls and markets of food, beverages and tobacco products" isic="4781" + 2 label="Retail sale via stalls and markets of textiles, clothing and footwear" isic="4782" + 9 label="Retail sale via stalls and markets of other goods" isic="4789" + 9 label="Retail trade not in stores, stalls or markets" isic="479" + 1 label="Retail sale via mail order houses or via Internet" isic="4791" + 9 label="Other retail sale not in stores, stalls or markets" isic="4799" +H label="TRANSPORTATION AND STORAGE" isic="H" +49 section="H" label="Land transport and transport via pipelines" isic="49" + 1 label="Passenger rail transport, interurban" isic="491" + 0 label="Passenger rail transport, interurban" isic="4911" + 2 label="Freight rail transport" isic="491" + 0 label="Freight rail transport" isic="4912" + 3 label="Other passenger land transport " isic="492" + 1 label="Urban and suburban passenger land transport" isic="4921" + 2 label="Taxi operation" isic="4922" + 9 label="Other passenger land transport n.e.c." isic="4922" + 4 label="Freight transport by road and removal services" isic="492" + 1 label="Freight transport by road" isic="4923" + 2 label="Removal services" isic="4923" + 5 label="Transport via pipeline" isic="493" + 0 label="Transport via pipeline" isic="4930" +50 section="H" label="Water transport" isic="50" + 1 label="Sea and coastal passenger water transport" isic="501" + 0 label="Sea and coastal passenger water transport" isic="5011" + 2 label="Sea and coastal freight water transport" isic="501" + 0 label="Sea and coastal freight water transport" isic="5012" + 3 label="Inland passenger water transport" isic="502" + 0 label="Inland passenger water transport" isic="5021" + 4 label="Inland freight water transport" isic="502" + 0 label="Inland freight water transport" isic="5022" +51 section="H" label="Air transport" isic="51" + 1 label="Passenger air transport" isic="511" + 0 label="Passenger air transport" isic="5110" + 2 label="Freight air transport and space transport" isic="512" + 1 label="Freight air transport" isic="5120" + 2 label="Space transport" isic="5120" +52 section="H" label="Warehousing and support activities for transportation" isic="52" + 1 label="Warehousing and storage" isic="521" + 0 label="Warehousing and storage" isic="5210" + 2 label="Support activities for transportation" isic="522" + 1 label="Service activities incidental to land transportation" isic="5221" + 2 label="Service activities incidental to water transportation" isic="5222" + 3 label="Service activities incidental to air transportation" isic="5223" + 4 label="Cargo handling" isic="5224" + 9 label="Other transportation support activities " isic="5229" +53 section="H" label="Postal and courier activities" isic="53" + 1 label="Postal activities under universal service obligation" isic="531" + 0 label="Postal activities under universal service obligation" isic="5310" + 2 label="Other postal and courier activities" isic="532" + 0 label="Other postal and courier activities" isic="5320" +I label="ACCOMMODATION AND FOOD SERVICE ACTIVITIES" isic="I" +55 section="I" label="Accommodation" isic="55" + 1 label="Hotels and similar accommodation" isic="551" + 0 label="Hotels and similar accommodation" isic="5510" + 2 label="Holiday and other short-stay accommodation" isic="551" + 0 label="Holiday and other short-stay accommodation" isic="5510" + 3 label="Camping grounds, recreational vehicle parks and trailer parks" isic="552" + 0 label="Camping grounds, recreational vehicle parks and trailer parks" isic="5520" + 9 label="Other accommodation" isic="559" + 0 label="Other accommodation" isic="5590" +56 section="I" label="Food and beverage service activities" isic="56" + 1 label="Restaurants and mobile food service activities" isic="561" + 0 label="Restaurants and mobile food service activities" isic="5610" + 2 label="Event catering and other food service activities" isic="562" + 1 label="Event catering activities" isic="5621" + 9 label="Other food service activities" isic="5629" + 3 label="Beverage serving activities" isic="563" + 0 label="Beverage serving activities" isic="5630" +J label="INFORMATION AND COMMUNICATION" isic="J" +58 section="J" label="Publishing activities" isic="58" + 1 label="Publishing of books, periodicals and other publishing activities" isic="581" + 1 label="Book publishing" isic="5811" + 2 label="Publishing of directories and mailing lists" isic="5812" + 3 label="Publishing of newspapers" isic="5813" + 4 label="Publishing of journals and periodicals" isic="5813" + 9 label="Other publishing activities" isic="5819" + 2 label="Software publishing" isic="582" + 1 label="Publishing of computer games" isic="5820" + 9 label="Other software publishing" isic="5820" +59 section="J" label="Motion picture, video and television programme production, sound recording and music publishing activities" isic="59" + 1 label="Motion picture, video and television programme activities" isic="591" + 1 label="Motion picture, video and television programme production activities" isic="5911" + 2 label="Motion picture, video and television programme post-production activities" isic="5912" + 3 label="Motion picture, video and television programme distribution activities" isic="5913" + 4 label="Motion picture projection activities" isic="5914" + 2 label="Sound recording and music publishing activities" isic="592" + 0 label="Sound recording and music publishing activities" isic="5920" +60 section="J" label="Programming and broadcasting activities" isic="60" + 1 label="Radio broadcasting" isic="601" + 0 label="Radio broadcasting" isic="6010" + 2 label="Television programming and broadcasting activities" isic="602" + 0 label="Television programming and broadcasting activities" isic="6020" +61 section="J" label="Telecommunications" isic="61" + 1 label="Wired telecommunications activities" isic="611" + 0 label="Wired telecommunications activities" isic="6110" + 2 label="Wireless telecommunications activities" isic="612" + 0 label="Wireless telecommunications activities" isic="6120" + 3 label="Satellite telecommunications activities" isic="613" + 0 label="Satellite telecommunications activities" isic="6130" + 9 label="Other telecommunications activities" isic="619" + 0 label="Other telecommunications activities" isic="6190" +62 section="J" label="Computer programming, consultancy and related activities" isic="62" + 0 label="Computer programming, consultancy and related activities" isic="620" + 1 label="Computer programming activities" isic="6201" + 2 label="Computer consultancy activities" isic="6202" + 3 label="Computer facilities management activities" isic="6202" + 9 label="Other information technology and computer service activities" isic="6209" +63 section="J" label="Information service activities" isic="63" + 1 label="Data processing, hosting and related activities; web portals" isic="631" + 1 label="Data processing, hosting and related activities" isic="6311" + 2 label="Web portals" isic="6312" + 9 label="Other information service activities" isic="639" + 1 label="News agency activities" isic="6391" + 9 label="Other information service activities n.e.c." isic="6399" +K label="FINANCIAL AND INSURANCE ACTIVITIES" isic="K" +64 section="K" label="Financial service activities, except insurance and pension funding" isic="64" + 1 label="Monetary intermediation" isic="641" + 1 label="Central banking" isic="6411" + 9 label="Other monetary intermediation" isic="6419" + 2 label="Activities of holding companies" isic="642" + 0 label="Activities of holding companies" isic="6420" + 3 label="Trusts, funds and similar financial entities" isic="643" + 0 label="Trusts, funds and similar financial entities" isic="6430" + 9 label="Other financial service activities, except insurance and pension funding" isic="649" + 1 label="Financial leasing" isic="6491" + 2 label="Other credit granting" isic="6492" + 9 label="Other financial service activities, except insurance and pension funding n.e.c." isic="6499" +65 section="K" label="Insurance, reinsurance and pension funding, except compulsory social security" isic="65" + 1 label="Insurance" isic="651" + 1 label="Life insurance" isic="6511" + 2 label="Non-life insurance" isic="6512" + 2 label="Reinsurance" isic="652" + 0 label="Reinsurance" isic="6520" + 3 label="Pension funding" isic="653" + 0 label="Pension funding" isic="6530" +66 section="K" label="Activities auxiliary to financial services and insurance activities" isic="66" + 1 label="Activities auxiliary to financial services, except insurance and pension funding" isic="661" + 1 label="Administration of financial markets" isic="6611" + 2 label="Security and commodity contracts brokerage" isic="6612" + 9 label="Other activities auxiliary to financial services, except insurance and pension funding" isic="6619" + 2 label="Activities auxiliary to insurance and pension funding" isic="662" + 1 label="Risk and damage evaluation" isic="6621" + 2 label="Activities of insurance agents and brokers" isic="6622" + 9 label="Other activities auxiliary to insurance and pension funding" isic="6629" + 3 label="Fund management activities" isic="663" + 0 label="Fund management activities" isic="6630" +L label="REAL ESTATE ACTIVITIES" isic="L" +68 section="L" label="Real estate activities" isic="68" + 1 label="Buying and selling of own real estate" isic="681" + 0 label="Buying and selling of own real estate" isic="6810" + 2 label="Rental and operating of own or leased real estate" isic="681" + 0 label="Rental and operating of own or leased real estate" isic="6810" + 3 label="Real estate activities on a fee or contract basis" isic="682" + 1 label="Real estate agencies" isic="6820" + 2 label="Management of real estate on a fee or contract basis" isic="6820" +M label="PROFESSIONAL, SCIENTIFIC AND TECHNICAL ACTIVITIES" isic="M" +69 section="M" label="Legal and accounting activities" isic="69" + 1 label="Legal activities" isic="691" + 0 label="Legal activities" isic="6910" + 2 label="Accounting, bookkeeping and auditing activities; tax consultancy" isic="692" + 0 label="Accounting, bookkeeping and auditing activities; tax consultancy" isic="6920" +70 section="M" label="Activities of head offices; management consultancy activities" isic="70" + 1 label="Activities of head offices" isic="701" + 0 label="Activities of head offices" isic="7010" + 2 label="Management consultancy activities" isic="702" + 1 label="Public relations and communication activities" isic="7020" + 2 label="Business and other management consultancy activities" isic="7020" +71 section="M" label="Architectural and engineering activities; technical testing and analysis" isic="71" + 1 label="Architectural and engineering activities and related technical consultancy" isic="711" + 1 label="Architectural activities " isic="7110" + 2 label="Engineering activities and related technical consultancy" isic="7110" + 2 label="Technical testing and analysis" isic="712" + 0 label="Technical testing and analysis" isic="7120" +72 section="M" label="Scientific research and development " isic="72" + 1 label="Research and experimental development on natural sciences and engineering" isic="721" + 1 label="Research and experimental development on biotechnology" isic="7210" + 9 label="Other research and experimental development on natural sciences and engineering" isic="7210" + 2 label="Research and experimental development on social sciences and humanities" isic="722" + 0 label="Research and experimental development on social sciences and humanities" isic="7220" +73 section="M" label="Advertising and market research" isic="73" + 1 label="Advertising" isic="731" + 1 label="Advertising agencies" isic="7310" + 2 label="Media representation" isic="7310" + 2 label="Market research and public opinion polling" isic="732" + 0 label="Market research and public opinion polling" isic="7320" +74 section="M" label="Other professional, scientific and technical activities" isic="74" + 1 label="Specialised design activities" isic="741" + 0 label="Specialised design activities" isic="7410" + 2 label="Photographic activities" isic="742" + 0 label="Photographic activities" isic="7420" + 3 label="Translation and interpretation activities" isic="749" + 0 label="Translation and interpretation activities" isic="7490" + 9 label="Other professional, scientific and technical activities n.e.c." isic="749" + 0 label="Other professional, scientific and technical activities n.e.c." isic="7490" +75 section="M" label="Veterinary activities" isic="75" + 0 label="Veterinary activities" isic="750" + 0 label="Veterinary activities" isic="7500" +N label="ADMINISTRATIVE AND SUPPORT SERVICE ACTIVITIES" isic="N" +77 section="N" label="Rental and leasing activities" isic="77" + 1 label="Rental and leasing of motor vehicles" isic="771" + 1 label="Rental and leasing of cars and light motor vehicles" isic="7710" + 2 label="Rental and leasing of trucks" isic="7710" + 2 label="Rental and leasing of personal and household goods" isic="772" + 1 label="Rental and leasing of recreational and sports goods" isic="7721" + 2 label="Rental of video tapes and disks" isic="7722" + 9 label="Rental and leasing of other personal and household goods" isic="7729" + 3 label="Rental and leasing of other machinery, equipment and tangible goods" isic="773" + 1 label="Rental and leasing of agricultural machinery and equipment" isic="7730" + 2 label="Rental and leasing of construction and civil engineering machinery and equipment" isic="7730" + 3 label="Rental and leasing of office machinery and equipment (including computers)" isic="7730" + 4 label="Rental and leasing of water transport equipment" isic="7730" + 5 label="Rental and leasing of air transport equipment" isic="7730" + 9 label="Rental and leasing of other machinery, equipment and tangible goods n.e.c." isic="7730" + 4 label="Leasing of intellectual property and similar products, except copyrighted works" isic="774" + 0 label="Leasing of intellectual property and similar products, except copyrighted works" isic="7740" +78 section="N" label="Employment activities" isic="78" + 1 label="Activities of employment placement agencies" isic="781" + 0 label="Activities of employment placement agencies" isic="7810" + 2 label="Temporary employment agency activities" isic="782" + 0 label="Temporary employment agency activities" isic="7820" + 3 label="Other human resources provision" isic="783" + 0 label="Other human resources provision" isic="7830" +79 section="N" label="Travel agency, tour operator and other reservation service and related activities" isic="79" + 1 label="Travel agency and tour operator activities" isic="791" + 1 label="Travel agency activities" isic="7911" + 2 label="Tour operator activities" isic="7912" + 9 label="Other reservation service and related activities" isic="799" + 0 label="Other reservation service and related activities" isic="7990" +80 section="N" label="Security and investigation activities" isic="80" + 1 label="Private security activities" isic="801" + 0 label="Private security activities" isic="8010" + 2 label="Security systems service activities" isic="802" + 0 label="Security systems service activities" isic="8020" + 3 label="Investigation activities" isic="803" + 0 label="Investigation activities" isic="8030" +81 section="N" label="Services to buildings and landscape activities" isic="81" + 1 label="Combined facilities support activities" isic="811" + 0 label="Combined facilities support activities" isic="8110" + 2 label="Cleaning activities" isic="812" + 1 label="General cleaning of buildings" isic="8121" + 2 label="Other building and industrial cleaning activities" isic="8129" + 9 label="Other cleaning activities" isic="8129" + 3 label="Landscape service activities" isic="813" + 0 label="Landscape service activities" isic="8130" +82 section="N" label="Office administrative, office support and other business support activities" isic="82" + 1 label="Office administrative and support activities" isic="821" + 1 label="Combined office administrative service activities" isic="8211" + 9 label="Photocopying, document preparation and other specialised office support activities" isic="8219" + 2 label="Activities of call centres" isic="822" + 0 label="Activities of call centres" isic="8220" + 3 label="Organisation of conventions and trade shows" isic="823" + 0 label="Organisation of conventions and trade shows" isic="8230" + 9 label="Business support service activities n.e.c." isic="829" + 1 label="Activities of collection agencies and credit bureaus" isic="8291" + 2 label="Packaging activities" isic="8292" + 9 label="Other business support service activities n.e.c." isic="8299" +O label="PUBLIC ADMINISTRATION AND DEFENCE; COMPULSORY SOCIAL SECURITY" isic="O" +84 section="O" label="Public administration and defence; compulsory social security" isic="84" + 1 label="Administration of the State and the economic and social policy of the community" isic="841" + 1 label="General public administration activities" isic="8411" + 2 label="Regulation of the activities of providing health care, education, cultural services and other social services, excluding social security" isic="8412" + 3 label="Regulation of and contribution to more efficient operation of businesses" isic="8413" + 2 label="Provision of services to the community as a whole" isic="842" + 1 label="Foreign affairs" isic="8421" + 2 label="Defence activities" isic="8422" + 3 label="Justice and judicial activities" isic="8423" + 4 label="Public order and safety activities" isic="8423" + 5 label="Fire service activities" isic="8423" + 3 label="Compulsory social security activities" isic="843" + 0 label="Compulsory social security activities" isic="8430" +P label="EDUCATION" isic="P" +85 section="P" label="Education" isic="85" + 1 label="Pre-primary education" isic="851" + 0 label="Pre-primary education " isic="8510" + 2 label="Primary education" isic="851" + 0 label="Primary education " isic="8510" + 3 label="Secondary education" isic="852" + 1 label="General secondary education " isic="8521" + 2 label="Technical and vocational secondary education " isic="8522" + 4 label="Higher education" isic="853" + 1 label="Post-secondary non-tertiary education" isic="8530" + 2 label="Tertiary education" isic="8530" + 5 label="Other education" isic="854" + 1 label="Sports and recreation education" isic="8541" + 2 label="Cultural education" isic="8542" + 3 label="Driving school activities" isic="8549" + 9 label="Other education n.e.c." isic="8549" + 6 label="Educational support activities" isic="855" + 0 label="Educational support activities" isic="8550" +Q label="HUMAN HEALTH AND SOCIAL WORK ACTIVITIES" isic="Q" +86 section="Q" label="Human health activities" isic="86" + 1 label="Hospital activities" isic="861" + 0 label="Hospital activities" isic="8610" + 2 label="Medical and dental practice activities" isic="862" + 1 label="General medical practice activities" isic="8620" + 2 label="Specialist medical practice activities" isic="8620" + 3 label="Dental practice activities" isic="8620" + 9 label="Other human health activities" isic="869" + 0 label="Other human health activities" isic="8690" +87 section="Q" label="Residential care activities" isic="87" + 1 label="Residential nursing care activities" isic="871" + 0 label="Residential nursing care activities" isic="8710" + 2 label="Residential care activities for mental retardation, mental health and substance abuse" isic="872" + 0 label="Residential care activities for mental retardation, mental health and substance abuse" isic="8720" + 3 label="Residential care activities for the elderly and disabled" isic="873" + 0 label="Residential care activities for the elderly and disabled" isic="8730" + 9 label="Other residential care activities" isic="879" + 0 label="Other residential care activities" isic="8790" +88 section="Q" label="Social work activities without accommodation" isic="88" + 1 label="Social work activities without accommodation for the elderly and disabled" isic="881" + 0 label="Social work activities without accommodation for the elderly and disabled" isic="8810" + 9 label="Other social work activities without accommodation" isic="889" + 1 label="Child day-care activities" isic="8890" + 9 label="Other social work activities without accommodation n.e.c." isic="8890" +R label="ARTS, ENTERTAINMENT AND RECREATION" isic="R" +90 section="R" label="Creative, arts and entertainment activities" isic="90" + 0 label="Creative, arts and entertainment activities" isic="900" + 1 label="Performing arts" isic="9000" + 2 label="Support activities to performing arts" isic="9000" + 3 label="Artistic creation" isic="9000" + 4 label="Operation of arts facilities" isic="9000" +91 section="R" label="Libraries, archives, museums and other cultural activities" isic="91" + 0 label="Libraries, archives, museums and other cultural activities" isic="910" + 1 label="Library and archives activities" isic="9101" + 2 label="Museums activities" isic="9102" + 3 label="Operation of historical sites and buildings and similar visitor attractions" isic="9102" + 4 label="Botanical and zoological gardens and nature reserves activities" isic="9103" +92 section="R" label="Gambling and betting activities" isic="92" + 0 label="Gambling and betting activities" isic="920" + 0 label="Gambling and betting activities" isic="9200" +93 section="R" label="Sports activities and amusement and recreation activities" isic="93" + 1 label="Sports activities" isic="931" + 1 label="Operation of sports facilities" isic="9311" + 2 label="Activities of sports clubs" isic="9312" + 3 label="Fitness facilities" isic="9311" + 9 label="Other sports activities" isic="9319" + 2 label="Amusement and recreation activities" isic="932" + 1 label="Activities of amusement parks and theme parks" isic="9321" + 9 label="Other amusement and recreation activities" isic="9329" +S label="OTHER SERVICE ACTIVITIES" isic="S" +94 section="S" label="Activities of membership organisations" isic="94" + 1 label="Activities of business, employers and professional membership organisations" isic="941" + 1 label="Activities of business and employers membership organisations" isic="9411" + 2 label="Activities of professional membership organisations" isic="9412" + 2 label="Activities of trade unions" isic="942" + 0 label="Activities of trade unions" isic="9420" + 9 label="Activities of other membership organisations" isic="949" + 1 label="Activities of religious organisations" isic="9491" + 2 label="Activities of political organisations" isic="9492" + 9 label="Activities of other membership organisations n.e.c." isic="9499" +95 section="S" label="Repair of computers and personal and household goods" isic="95" + 1 label="Repair of computers and communication equipment" isic="951" + 1 label="Repair of computers and peripheral equipment" isic="9511" + 2 label="Repair of communication equipment" isic="9512" + 2 label="Repair of personal and household goods" isic="952" + 1 label="Repair of consumer electronics" isic="9521" + 2 label="Repair of household appliances and home and garden equipment" isic="9522" + 3 label="Repair of footwear and leather goods" isic="9523" + 4 label="Repair of furniture and home furnishings" isic="9524" + 5 label="Repair of watches, clocks and jewellery" isic="9529" + 9 label="Repair of other personal and household goods" isic="9529" +96 section="S" label="Other personal service activities" isic="96" + 0 label="Other personal service activities" isic="960" + 1 label="Washing and (dry-)cleaning of textile and fur products" isic="9601" + 2 label="Hairdressing and other beauty treatment" isic="9602" + 3 label="Funeral and related activities" isic="9603" + 4 label="Physical well-being activities" isic="9609" + 9 label="Other personal service activities n.e.c." isic="9609" +T label="ACTIVITIES OF HOUSEHOLDS AS EMPLOYERS; UNDIFFERENTIATED GOODS- AND SERVICES-PRODUCING ACTIVITIES OF HOUSEHOLDS FOR OWN USE" isic="T" +97 section="T" label="Activities of households as employers of domestic personnel" isic="97" + 0 label="Activities of households as employers of domestic personnel" isic="970" + 0 label="Activities of households as employers of domestic personnel" isic="9700" +98 section="T" label="Undifferentiated goods- and services-producing activities of private households for own use" isic="98" + 1 label="Undifferentiated goods-producing activities of private households for own use" isic="981" + 0 label="Undifferentiated goods-producing activities of private households for own use" isic="9810" + 2 label="Undifferentiated service-producing activities of private households for own use" isic="982" + 0 label="Undifferentiated service-producing activities of private households for own use" isic="9820" +U label="ACTIVITIES OF EXTRATERRITORIAL ORGANISATIONS AND BODIES" isic="U" +99 section="U" label="Activities of extraterritorial organisations and bodies" isic="99" + 0 label="Activities of extraterritorial organisations and bodies" isic="990" + 0 label="Activities of extraterritorial organisations and bodies" isic="9900" diff --git a/stdnum/eu/nace.py b/stdnum/eu/nace.py new file mode 100644 index 00000000..344629ce --- /dev/null +++ b/stdnum/eu/nace.py @@ -0,0 +1,109 @@ +# nace.py - functions for handling EU NACE classification +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""NACE (classification for businesses in the European Union). + +The NACE (nomenclature statistique des activités économiques dans la +Communauté européenne) is a 4-level (and up to 4 digit) code for classifying +economic activities. It is the European implementation of the UN +classification ISIC. + +The first 4 digits are the same in all EU countries while additional levels +and digits may be vary between countries. This module validates the numbers +according to revision 2 and based on the registry as published by the EC. + +More information: + +* https://en.wikipedia.org/wiki/Statistical_Classification_of_Economic_Activities_in_the_European_Community +* http://ec.europa.eu/eurostat/ramon/nomenclatures/index.cfm?TargetUrl=LST_NOM_DTL&StrNom=NACE_REV2&StrLanguageCode=EN&IntPcKey=&StrLayoutCode=HIERARCHIC + +>>> validate('A') +'A' +>>> validate('62.01') +'6201' +>>> str(label('62.01')) +'Computer programming activities' +>>> validate('62.05') +Traceback (most recent call last): + ... +InvalidComponent: ... +>>> validate('62059') # does not validate country-specific numbers +Traceback (most recent call last): + ... +InvalidLength: ... +>>> format('6201') +'62.01' +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, '.').strip() + + +def info(number): + """Lookup information about the specified NACE. This returns a dict.""" + number = compact(number) + from stdnum import numdb + info = dict() + for n, i in numdb.get('eu/nace').info(number): + if not i: + raise InvalidComponent() + info.update(i) + return info + + +def label(number): + """Lookup the category label for the number.""" + return info(number)['label'] + + +def validate(number): + """Checks to see if the number provided is a valid NACE. This checks the + format and searches the registry to see if it exists.""" + number = compact(number) + if len(number) > 4: + raise InvalidLength() + elif len(number) == 1: + if not number.isalpha(): + raise InvalidFormat() + else: + if not number.isdigit(): + raise InvalidFormat() + info(number) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid NACE. This checks the + format and searches the registry to see if it exists.""" + try: + return bool(validate(number)) + except ValidationError: + return False + + +def format(number): + """Reformat the passed number to the standard format.""" + return '.'.join((number[:2], number[2:])).strip('.') diff --git a/tests/test_robustness.doctest b/tests/test_robustness.doctest index 8e2c4be2..8ce1f355 100644 --- a/tests/test_robustness.doctest +++ b/tests/test_robustness.doctest @@ -1,6 +1,6 @@ test_robustness.doctest - test is_valid() functions to not break -Copyright (C) 2011-2016 Arthur de Jong +Copyright (C) 2011-2017 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -22,7 +22,7 @@ This file contains some tests for modules in the stdnum package to check whether all provided is_valid() functions can handle clearly invalid junk. ->>> testvalues = (None, '*&^%$', '', 0, False, object(), 'Q', 'QQ', '3') +>>> testvalues = (None, '*&^%$', '', 0, False, object(), 'Z', 'QQ', '3') >>> from stdnum.util import get_number_modules Go over each module and try every value. From d43c394049e52e474575948b94ab52ee8567fd44 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 26 Mar 2017 23:27:42 +0200 Subject: [PATCH 145/654] =?UTF-8?q?Add=20test=20for=20=C3=91=20in=20Refere?= =?UTF-8?q?ncia=20Catastral?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This supports the Referencia Catastral with an Ñ in it for both byte strings (Python 2) and unicode strings (Python 2 and 3). Support for literal unicode strings in Python 2 doctests is flaky so the test is a bit ugly. This also adds a few numbers that were found online. Sadly no real numbers with an Ñ in it have been found so the one in the test was constructed. --- stdnum/es/referenciacatastral.py | 17 ++++++++++++---- tests/test_es_referenciacatastral.doctest | 24 ++++++++++++++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/stdnum/es/referenciacatastral.py b/stdnum/es/referenciacatastral.py index fefb1081..b9882cfd 100644 --- a/stdnum/es/referenciacatastral.py +++ b/stdnum/es/referenciacatastral.py @@ -2,7 +2,7 @@ # coding: utf-8 # # Copyright (C) 2016 David García Garzón -# Copyright (C) 2016 Arthur de Jong +# Copyright (C) 2016-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -90,8 +90,16 @@ def _check_digit(number): return 'MQWERTYUIOPASDFGHJKLBZX'[s % 23] +def _force_unicode(number): + """Convert the number to unicode.""" + if not hasattr(number, 'isnumeric'): # pragma: no cover (Python 2 code) + number = number.decode('utf-8') + return number + + def calc_check_digits(number): """Calculate the check digits for the number.""" + number = _force_unicode(compact(number)) return ( _check_digit(number[0:7] + number[14:18]) + _check_digit(number[7:14] + number[14:18])) @@ -101,11 +109,12 @@ def validate(number): """Checks to see if the number provided is a valid Cadastral Reference. This checks the length, formatting and check digits.""" number = compact(number) - if not all(c in alphabet for c in number): + n = _force_unicode(number) + if not all(c in alphabet for c in n): raise InvalidFormat() - if len(number) != 20: + if len(n) != 20: raise InvalidLength() - if calc_check_digits(number) != number[18:]: + if calc_check_digits(n) != n[18:]: raise InvalidChecksum() return number diff --git a/tests/test_es_referenciacatastral.doctest b/tests/test_es_referenciacatastral.doctest index f175d1c9..94610ee8 100644 --- a/tests/test_es_referenciacatastral.doctest +++ b/tests/test_es_referenciacatastral.doctest @@ -1,7 +1,7 @@ test_es_referenciacatastral.doctest - more detailed doctests Copyright (C) 2016 David García Garzón -Copyright (C) 2015 Arthur de Jong +Copyright (C) 2015-2017 Arthur de Jong This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -72,6 +72,19 @@ An online validator can be found at https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCBusqueda.aspx +This is a constructed example of a Referencia Catastral with an Ñ in it. It +seems that unicode literals do not work so we are escaping Ñ. + +>>> referenciacatastral.calc_check_digits('9872023 ÑH5797S 0001') +'WP' +>>> referenciacatastral.calc_check_digits(u'9872023 \xd1H5797S 0001') +'WP' +>>> referenciacatastral.validate('9872023 ÑH5797S 0001 WP') == '9872023ÑH5797S0001WP' +True +>>> referenciacatastral.validate(u'9872023 \xd1H5797S 0001 WP') == u'9872023\xd1H5797S0001WP' +True + + These have been found online and should all be valid numbers. >>> numbers = ''' @@ -147,6 +160,9 @@ These have been found online and should all be valid numbers. ... 1344504PD5614S0001XE ... 1468103QC6316N0001PQ ... 1470436TJ5117S0001EP +... 15001A005004610000JK +... 15001A005004620000JR +... 15037A024005060000PX ... 1665311QC6316S0001OO ... 1811701QC3711S0001RM ... 1927510QD2812N0001GJ @@ -178,6 +194,8 @@ These have been found online and should all be valid numbers. ... 3065602TH8836N0001KA ... 3117006QC3731N0001KM ... 3135901PD7033E0001MF +... 3174922NH0737S0011QS +... 3174932NH0737S0001AT ... 3178101UJ2337N0001IB ... 3327002TJ6332N0001QH ... 3368022PE8136N0001LJ @@ -193,6 +211,7 @@ These have been found online and should all be valid numbers. ... 4637801TK6843N0001WI ... 4878424TK6347N0001GT ... 4926002QE4142N0001UP +... 50210A003001510000LT ... 5034623PC6853S0001MO ... 5078102VK8957N0001TB ... 5172401PD7057A0001HI @@ -236,6 +255,7 @@ These have been found online and should all be valid numbers. ... 6795121QD0069N0008EU ... 6821105TK5662S0001QI ... 6822811QD2162S0001GP +... 6837203FT3063N0001YP ... 6893505QC5569S0001LO ... 6991224PD3869S0001FW ... 7076102TJ5177N0001ZE @@ -247,6 +267,7 @@ These have been found online and should all be valid numbers. ... 7384201TJ5178S0019OB ... 7384201TJ5178S0043QS ... 7479113QE2477N0001UY +... 7499524NH0179N0001RJ ... 7570012TJ4377S0001PO ... 7640222QE4374B0001FR ... 7682601TJ5178S0001XT @@ -259,6 +280,7 @@ These have been found online and should all be valid numbers. ... 8344202PC6684S0001FT ... 8354003PD7085C0001RR ... 8384416TJ8688S0001IQ +... 8579507NH0387N0001QB ... 8645036TJ5984N0001TL ... 8670604TJ4587S0004BE ... 8679007TJ5187N0001LU From 194f02576de66a1cdd47f57081fb0a24519cc91a Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sun, 26 Mar 2017 23:32:17 +0200 Subject: [PATCH 146/654] Add unicode robustness tests This tests a few unicode strings and fixes a bug in the MEID module. --- stdnum/meid.py | 4 ++-- tests/test_robustness.doctest | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/stdnum/meid.py b/stdnum/meid.py index be52fbdb..30777538 100644 --- a/stdnum/meid.py +++ b/stdnum/meid.py @@ -1,6 +1,6 @@ # meid.py - functions for handling Mobile Equipment Identifiers (MEIDs) # -# Copyright (C) 2010-2016 Arthur de Jong +# Copyright (C) 2010-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -48,7 +48,7 @@ def _cleanup(number): """Remove any grouping information from the number and removes surrounding whitespace.""" - return clean(str(number), ' -').strip().upper() + return clean(number, ' -').strip().upper() def _ishex(number): diff --git a/tests/test_robustness.doctest b/tests/test_robustness.doctest index 8ce1f355..b4ba36ad 100644 --- a/tests/test_robustness.doctest +++ b/tests/test_robustness.doctest @@ -22,7 +22,9 @@ This file contains some tests for modules in the stdnum package to check whether all provided is_valid() functions can handle clearly invalid junk. ->>> testvalues = (None, '*&^%$', '', 0, False, object(), 'Z', 'QQ', '3') +>>> testvalues = ( +... None, '*&^%$', '', 0, False, object(), 'Z', 'QQ', '3', '€', u'€', +... '😴', '¥') >>> from stdnum.util import get_number_modules Go over each module and try every value. From 23b2150c6ceee574207e0c5e5b19d2f95fbd9828 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Sat, 1 Apr 2017 16:40:08 +0200 Subject: [PATCH 147/654] Add European EIC (Energy Identification Code) --- stdnum/eu/eic.py | 88 ++++++++++++++++++++++++++++ tests/test_eu_eic.doctest | 118 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 stdnum/eu/eic.py create mode 100644 tests/test_eu_eic.doctest diff --git a/stdnum/eu/eic.py b/stdnum/eu/eic.py new file mode 100644 index 00000000..88d28e05 --- /dev/null +++ b/stdnum/eu/eic.py @@ -0,0 +1,88 @@ +# eic.py - functions for handling EU EIC numbers +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""EIC (European Energy Identification Code). + +The EIC (Energy Identification Code) a 16 character code used in Europe to +uniquely identify entities and objects in the electricity and gas sector. + +The number uses letters, digits and the minus sign. The first 2 character +identify the issuing office, 1 character for the object type, 12 digits for +the object and 1 check character. + +More information: + +* https://en.wikipedia.org/wiki/Energy_Identification_Code +* http://www.eiccodes.eu/ + +>>> validate('22XWATTPLUS----G') +'22XWATTPLUS----G' +>>> validate('22XWATTPLUS----X') +Traceback (most recent call last): + ... +InvalidChecksum: ... +>>> validate('23X--130302DLGW-') # check digit cannot be minus +Traceback (most recent call last): + ... +InvalidFormat: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean + + +_alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-' + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding white space.""" + return clean(number, ' ').strip() + + +def calc_check_digit(number): + """Calculate the check digit for the number.""" + number = compact(number) + s = sum((16 - i) * _alphabet.index(n) for i, n in enumerate(number[:15])) + return _alphabet[36 - ((s - 1) % 37)] + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length, + format and check digit.""" + number = compact(number) + if not all(x in _alphabet for x in number): + raise InvalidFormat() + if len(number) != 16: + raise InvalidLength() + if number[-1] == '-': + raise InvalidFormat() + if number[-1] != calc_check_digit(number): + raise InvalidChecksum() + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length, + format and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_eu_eic.doctest b/tests/test_eu_eic.doctest new file mode 100644 index 00000000..92b7a32e --- /dev/null +++ b/tests/test_eu_eic.doctest @@ -0,0 +1,118 @@ +test_eu_eic.doctest - more detailed doctests for the stdnum.eu.eic module + +Copyright (C) 2017 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.eu.eic module. It +tries to validate a number of EIC numbers that have been found online. + +>>> from stdnum.eu import eic + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 10T-NO-SE-00005Q +... 10Y1001A1001B05V +... 10YAT-APG------L +... 10YCH-SWISSGRIDZ +... 10YDE-RWENET---I +... 10YDE-VE-------2 +... 11WD8JAEN1L---AD +... 11XE-WERK-STERNP +... 11XEMRHAENDLER-M +... 11XNATGAST00000G +... 11XNEW-ENERGIE-8 +... 11XWEMAG-------Q +... 13X-IKBAG-NV---3 +... 14X-VES--------8 +... 18X0000000002OOE +... 18X0000000003VQM +... 18XAIGVA-12345-G +... 18XALMAL-1234-12 +... 18XCEG-123456-1F +... 18XCEPSA-12345-6 +... 18XEACCO-12345-K +... 18XENERS-12345-Q +... 18XEPCSA-12345-S +... 18XERUYA-12345-5 +... 18XGEM3-12345--K +... 18XGESTN-12345-G +... 18XJEALS-12345-P +... 18XLURIA-12345-Y +... 18XMONTO-12345-C +... 18XUTZUB-1234-1M +... 19XENIONENERGIAM +... 21W000000000092T +... 21X0000000011845 +... 21X000000001297T +... 21YEA-EC-------9 +... 22X20160610----4 +... 23X----090406-1H +... 23X--150408-AS-5 +... 23XB4CARCAPMKT-H +... 25X-SHELLAUSTRIL +... 26X00000004851-Y +... 26X00000105742-Q +... 26X00000107862-1 +... 27XAPTPOWER-CZ-3 +... 27XG-ACTHERM-CV1 +... 27XG-RWE-STP-CZJ +... 27XMND---------8 +... 28XENS---------6 +... 37X000000000054S +... 59X000000000110J +... 59X0000000001515 +... 59X0000000002309 +... 59Z000000000216C +... 59Z000000000276V +... 59Z000000000368Q +... 59Z0000000004180 +... 59Z000000000673L +... 59Z000000000905Q +... 59Z000000001369J +... 59Z000000001534U +... 59Z0000000017952 +... 59Z000000001801X +... 59Z000000001934E +... 59Z0000000020518 +... 59Z0000000021522 +... 59Z000000002270X +... 59Z000000002349K +... 59Z000000002376H +... 59Z000000002475F +... 59Z0000000027818 +... 59Z000000003405V +... 59Z000000003499X +... 59Z000000003597X +... 59Z0000000036639 +... 59Z0000000038194 +... 59Z000000003867U +... 59Z000000004048O +... 59Z000000004192H +... 59Z000000004481A +... 59Z0000000045638 +... 59Z000000004595W +... 59Z000000004748X +... 59Z000000004764Z +... 59Z000000004787N +... +... ''' +>>> [x for x in numbers.splitlines() if x and not eic.is_valid(x)] +[] From 7493eca08309922c76974566cc6d2eee1de126e1 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Fri, 7 Apr 2017 15:27:48 +0200 Subject: [PATCH 148/654] Use a slightly more readable weight alternation Switch to a slightly more readable syntax for alternating between two weights in checksums calculations. --- stdnum/cusip.py | 4 ++-- stdnum/ean.py | 4 ++-- stdnum/ec/ci.py | 4 ++-- stdnum/isin.py | 4 ++-- stdnum/tr/tckimlik.py | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/stdnum/cusip.py b/stdnum/cusip.py index f6858802..9fa6d905 100644 --- a/stdnum/cusip.py +++ b/stdnum/cusip.py @@ -1,6 +1,6 @@ # cusip.py - functions for handling CUSIP numbers # -# Copyright (C) 2015 Arthur de Jong +# Copyright (C) 2015-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -57,7 +57,7 @@ def calc_check_digit(number): """Calculate the check digits for the number.""" # convert to numeric first, then sum individual digits number = ''.join( - str((i % 2 + 1) * _alphabet.index(n)) for i, n in enumerate(number)) + str((1, 2)[i % 2] * _alphabet.index(n)) for i, n in enumerate(number)) return str((10 - sum(int(n) for n in number)) % 10) diff --git a/stdnum/ean.py b/stdnum/ean.py index ec6007e4..c237f2ec 100644 --- a/stdnum/ean.py +++ b/stdnum/ean.py @@ -1,6 +1,6 @@ # ean.py - functions for handling EANs # -# Copyright (C) 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2011-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -41,7 +41,7 @@ def compact(number): def calc_check_digit(number): """Calculate the EAN check digit for 13-digit numbers. The number passed should not have the check bit included.""" - return str((10 - sum((3 - 2 * (i % 2)) * int(n) + return str((10 - sum((3, 1)[i % 2] * int(n) for i, n in enumerate(reversed(number)))) % 10) diff --git a/stdnum/ec/ci.py b/stdnum/ec/ci.py index 9343e471..9af837dd 100644 --- a/stdnum/ec/ci.py +++ b/stdnum/ec/ci.py @@ -2,7 +2,7 @@ # coding: utf-8 # # Copyright (C) 2014 Jonathan Finlay -# Copyright (C) 2014 Arthur de Jong +# Copyright (C) 2014-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -48,7 +48,7 @@ def compact(number): def _checksum(number): """Calculate a checksum over the number.""" fold = lambda x: x - 9 if x > 9 else x - return sum(fold((2 - (i % 2)) * int(n)) + return sum(fold((2, 1)[i % 2] * int(n)) for i, n in enumerate(number)) % 10 diff --git a/stdnum/isin.py b/stdnum/isin.py index 135326ae..47c4560c 100644 --- a/stdnum/isin.py +++ b/stdnum/isin.py @@ -1,6 +1,6 @@ # isin.py - functions for handling ISIN numbers # -# Copyright (C) 2015 Arthur de Jong +# Copyright (C) 2015-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -91,7 +91,7 @@ def calc_check_digit(number): # convert to numeric first, then double some, then sum individual digits number = ''.join(str(_alphabet.index(n)) for n in number) number = ''.join( - str(int(n) * (2 - i % 2)) for i, n in enumerate(reversed(number))) + str((2, 1)[i % 2] * int(n)) for i, n in enumerate(reversed(number))) return str((10 - sum(int(n) for n in number)) % 10) diff --git a/stdnum/tr/tckimlik.py b/stdnum/tr/tckimlik.py index 4083229f..03ff92c4 100644 --- a/stdnum/tr/tckimlik.py +++ b/stdnum/tr/tckimlik.py @@ -1,7 +1,7 @@ # tckimlik.py - functions for handling T.C. Kimlik No. # coding: utf-8 # -# Copyright (C) 2016 Arthur de Jong +# Copyright (C) 2016-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -66,7 +66,7 @@ def compact(number): def calc_check_digits(number): """Calculate the check digits for the specified number. The number passed should not have the check digit included.""" - check1 = (10 - sum((3 - 2 * (i % 2)) * int(n) + check1 = (10 - sum((3, 1)[i % 2] * int(n) for i, n in enumerate(number[:9]))) % 10 check2 = (check1 + sum(int(n) for n in number[:9])) % 10 return '%d%d' % (check1, check2) From 800205c6f2ff1dd585b02bb9ca070b043b05cdf4 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 10 Apr 2017 13:17:26 +0200 Subject: [PATCH 149/654] Print warnings during tox run --- tox.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tox.ini b/tox.ini index ec926c41..282c9ee8 100644 --- a/tox.ini +++ b/tox.ini @@ -5,3 +5,5 @@ envlist = {py26,py27,py34,py35,py36,pypy} deps = nose coverage commands = nosetests +setenv= + PYTHONWARNINGS=all From 72f5c6cec264a05e19b46c8038118958b3f9ade2 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 10 Apr 2017 14:32:02 +0200 Subject: [PATCH 150/654] Add Serbian Poreski Identifikacioni Broj --- stdnum/rs/__init__.py | 24 +++++++ stdnum/rs/pib.py | 63 ++++++++++++++++++ tests/test_rs_pib.doctest | 134 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 221 insertions(+) create mode 100644 stdnum/rs/__init__.py create mode 100644 stdnum/rs/pib.py create mode 100644 tests/test_rs_pib.doctest diff --git a/stdnum/rs/__init__.py b/stdnum/rs/__init__.py new file mode 100644 index 00000000..c23d2358 --- /dev/null +++ b/stdnum/rs/__init__.py @@ -0,0 +1,24 @@ +# __init__.py - collection of Serbian numbers +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""Collection of Serbian numbers.""" + +# provide vat as an alias +from stdnum.rs import pib as vat diff --git a/stdnum/rs/pib.py b/stdnum/rs/pib.py new file mode 100644 index 00000000..cf530c5d --- /dev/null +++ b/stdnum/rs/pib.py @@ -0,0 +1,63 @@ +# pib.py - functions for handling Serbian VAT numbers +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""PIB (Poreski Identifikacioni Broj, Serbian tax identification number). + +The Serbian tax identification number consists of 9 digits where the last +digit is a check digit. + +>>> validate('101134702') +'101134702' +>>> validate('101134703') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.util import clean +from stdnum.iso7064 import mod_11_10 + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding whitespace.""" + return clean(number, ' -.').strip() + + +def validate(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length, formatting and check digit.""" + number = compact(number) + if not number.isdigit(): + raise InvalidFormat() + if len(number) != 9: + raise InvalidLength() + mod_11_10.validate(number) + return number + + +def is_valid(number): + """Checks to see if the number provided is a valid VAT number. This + checks the length, formatting and check digit.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_rs_pib.doctest b/tests/test_rs_pib.doctest new file mode 100644 index 00000000..80135c4c --- /dev/null +++ b/tests/test_rs_pib.doctest @@ -0,0 +1,134 @@ +test_rs_pib.doctest - more detailed doctests for the stdnum.rs.pib module + +Copyright (C) 2017 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.rs.pib module. + +>>> from stdnum.rs import pib +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 100000303 +... 100081000 +... 100081235 +... 100081260 +... 100081341 +... 100081649 +... 100081882 +... 100081903 +... 100082658 +... 100084073 +... 100084354 +... 100085087 +... 100085118 +... 100085175 +... 100085386 +... 100086047 +... 100086549 +... 100086688 +... 100088399 +... 100088487 +... 100088518 +... 100089182 +... 100089199 +... 100089480 +... 100089990 +... 100090168 +... 100090301 +... 100090545 +... 100109782 +... 100109959 +... 100110287 +... 100110650 +... 100110756 +... 100110949 +... 100111525 +... 100112202 +... 100112995 +... 100113109 +... 100113117 +... 100113184 +... 100113561 +... 100125276 +... 100125305 +... 100125313 +... 100125799 +... 100126349 +... 100185801 +... 100185810 +... 100187083 +... 100187243 +... 100187392 +... 101230316 +... 101230611 +... 101230783 +... 101765372 +... 101827944 +... 101895156 +... 101895365 +... 101895638 +... 101895994 +... 101896698 +... 101896913 +... 101896972 +... 101897641 +... 101897692 +... 101897949 +... 101898689 +... 102056361 +... 102097064 +... 102194170 +... 102324017 +... 102372731 +... 102883324 +... 102890888 +... 102960137 +... 103054816 +... 103094132 +... 103180484 +... 103311203 +... 103323675 +... 103338275 +... 103421003 +... 103428256 +... 103465975 +... 103470618 +... 103521454 +... 103539751 +... 103622128 +... 103669676 +... 103728660 +... 103747316 +... 103809880 +... 103837987 +... 103853451 +... 103883410 +... 104007533 +... 104044942 +... 104064625 +... 104079900 +... 104111220 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not pib.is_valid(x)] +[] From 1b3d16ee525ae941d49be8a27acca66b0e73c44d Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 10 Apr 2017 18:48:48 +0200 Subject: [PATCH 151/654] Add missing export (__all__) --- stdnum/es/nie.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdnum/es/nie.py b/stdnum/es/nie.py index 9e510e6d..01d218da 100644 --- a/stdnum/es/nie.py +++ b/stdnum/es/nie.py @@ -1,7 +1,7 @@ # nie.py - functions for handling Spanish foreigner identity codes # coding: utf-8 # -# Copyright (C) 2012, 2013 Arthur de Jong +# Copyright (C) 2012-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -40,7 +40,7 @@ from stdnum.exceptions import * -__all__ = ['compact', 'is_valid'] +__all__ = ['compact', 'calc_check_digit', 'validate', 'is_valid'] # use the same compact function as DNI From e844b5235a1a0599cabe6a5f1b27228b3036db05 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 10 Apr 2017 21:58:01 +0200 Subject: [PATCH 152/654] Integrate base10 conversion into Mod 97, 10 This moves the conversion of an alphanumeric string to a numeric representation for modulo 97 calculation to the mod_97_10 module because this mechanism seems to be used by multiple formats. --- stdnum/iban.py | 25 ++++--------------------- stdnum/iso7064/mod_97_10.py | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/stdnum/iban.py b/stdnum/iban.py index 18a9faa3..a9c56b3a 100644 --- a/stdnum/iban.py +++ b/stdnum/iban.py @@ -1,6 +1,6 @@ # iban.py - functions for handling International Bank Account Numbers (IBANs) # -# Copyright (C) 2011-2016 Arthur de Jong +# Copyright (C) 2011-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -55,9 +55,6 @@ # our open copy of the IBAN database _ibandb = numdb.get('iban') -# the valid characters we have -_alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - # regular expression to check IBAN structure _struct_re = re.compile(r'([1-9][0-9]*)!([nac])') @@ -71,25 +68,11 @@ def compact(number): return clean(number, ' -').strip().upper() -def _to_base10(number): - """Prepare the number to its base10 representation (also moving the - check digits to the end) so it can be checked with the ISO 7064 - Mod 97, 10 algorithm.""" - # TODO: find out whether this should be in the mod_97_10 module - try: - return ''.join( - str(_alphabet.index(x)) for x in number[4:] + number[:4]) - except Exception: - raise InvalidFormat() - - def calc_check_digits(number): """Calculate the check digits that should be put in the number to make - it valid. Check digits in the supplied number are ignored..""" + it valid. Check digits in the supplied number are ignored.""" number = compact(number) - # replace check digits with placeholders - number = ''.join((number[:2], '00', number[4:])) - return mod_97_10.calc_check_digits(_to_base10(number)[:-2]) + return mod_97_10.calc_check_digits(number[4:] + number[:2]) def _struct_to_re(structure): @@ -119,7 +102,7 @@ def validate(number, check_country=True): specific check can be disabled with the check_country argument.""" number = compact(number) # ensure that checksum is valid - mod_97_10.validate(_to_base10(number)) + mod_97_10.validate(number[4:] + number[:4]) # look up the number info = _ibandb.info(number) # check if the bban part of number has the correct structure diff --git a/stdnum/iso7064/mod_97_10.py b/stdnum/iso7064/mod_97_10.py index 618fbc7f..39f05c47 100644 --- a/stdnum/iso7064/mod_97_10.py +++ b/stdnum/iso7064/mod_97_10.py @@ -1,6 +1,6 @@ # mod_97_10.py - functions for performing the ISO 7064 Mod 97, 10 algorithm # -# Copyright (C) 2010, 2011, 2012, 2013 Arthur de Jong +# Copyright (C) 2010-2017 Arthur de Jong # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -37,9 +37,22 @@ from stdnum.exceptions import * +# the valid characters we have +_alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' + + +def _to_base10(number): + """Prepare the number to its base10 representation.""" + try: + return ''.join( + str(_alphabet.index(x)) for x in number) + except Exception: + raise InvalidFormat() + + def checksum(number): """Calculate the checksum. A valid number should have a checksum of 1.""" - return int(number) % 97 + return int(_to_base10(number)) % 97 def calc_check_digits(number): From 53982477586198b2e22ec16d30a8d4e371191d70 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 10 Apr 2017 22:21:45 +0200 Subject: [PATCH 153/654] Add Legal Entity Identifier --- stdnum/lei.py | 68 +++++++++++++++++++++ tests/test_lei.doctest | 134 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 stdnum/lei.py create mode 100644 tests/test_lei.doctest diff --git a/stdnum/lei.py b/stdnum/lei.py new file mode 100644 index 00000000..f87bbee0 --- /dev/null +++ b/stdnum/lei.py @@ -0,0 +1,68 @@ +# lei.py - functions for handling Legal Entity Identifiers (LEIs) +# coding: utf-8 +# +# Copyright (C) 2017 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +"""LEI (Legal Entity Identifier). + +The Legal Entity Identifier (LEI) is used to identify legal entities for use +in financial transactions. A LEI is a 20-character alphanumeric string that +consists of a 4-character issuing LOU (Local Operating Unit), 2 digits that +are often 0, 13 digits to identify the organisation and 2 check digits. + +More information: + +* https://en.wikipedia.org/wiki/Legal_Entity_Identifier +* http://www.lei-lookup.com/ +* https://www.gleif.org/ +* http://openleis.com/ + +>>> validate('213800KUD8LAJWSQ9D15') +'213800KUD8LAJWSQ9D15' +>>> validate('213800KUD8LXJWSQ9D15') +Traceback (most recent call last): + ... +InvalidChecksum: ... +""" + +from stdnum.exceptions import * +from stdnum.iso7064 import mod_97_10 +from stdnum.util import clean + + +def compact(number): + """Convert the number to the minimal representation. This strips the + number of any valid separators and removes surrounding white space.""" + return clean(number, ' -').strip().upper() + + +def validate(number): + """Checks to see if the number provided is valid. This checks the length, + format and check digits.""" + number = compact(number) + mod_97_10.validate(number) + return number + + +def is_valid(number): + """Checks to see if the number provided is valid. This checks the length, + format and check digits.""" + try: + return bool(validate(number)) + except ValidationError: + return False diff --git a/tests/test_lei.doctest b/tests/test_lei.doctest new file mode 100644 index 00000000..5c2900dd --- /dev/null +++ b/tests/test_lei.doctest @@ -0,0 +1,134 @@ +test_lei.doctest - more detailed doctests for the stdnum.lei module + +Copyright (C) 2017 Arthur de Jong + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA + + +This file contains more detailed doctests for the stdnum.lei module. + +>>> from stdnum import lei +>>> from stdnum.exceptions import * + + +These have been found online and should all be valid numbers. + +>>> numbers = ''' +... +... 0YPKKE5F0QW6RC51HE09 +... 1YTX3EVB2EG3PFFYOI09 +... 2138001CY61HDFJ5ZA27 +... 2138001KT6BLFA2SBA38 +... 213800699Y1P5GMARI40 +... 213800DIH9U9264UW504 +... 213800F25B5OHORTSI52 +... 213800KLHG79RR4RVR16 +... 213800KNMQ53LTJQBV92 +... 213800KUD8LAJWSQ9D15 +... 213800Q3CZMOFF9OE643 +... 213800REANX5GCW7AD17 +... 213800THICTTOSR1N623 +... 213800WWDZ5X6SRDF737 +... 213800WWNILTD76WIX72 +... 2594005N6NMJM5WSGE40 +... 2YXI7YIWYFWZG3QHF204 +... 315700EBSH5FQO0A2E52 +... 315700UUG8ME8T3NNN23 +... 337KMNHEWWWR6B7Q7W10 +... 391200J69OE1D0B3ZQ28 +... 3YO0DHNPQLJN0PYQXZ94 +... 5299007DT4PDT06SZM22 +... 5299008A9PK6IQEWE268 +... 529900TODVLNUTNSYF94 +... 529900UJX7YWK7YK5Z47 +... 529900WWBCVXKSBVKS40 +... 529900YGP0ANNLITEF34 +... 529900Z5WSAAJ3OTQU15 +... 549300001TP7X0VE9866 +... 54930000YBLXA2M5DV57 +... 54930007KCQLYRQLSU30 +... 5493000MYJ7H0E3KKG91 +... 54930017EFV0P0QWP015 +... 54930018TDVHWGLNZ954 +... 5493001BD9HCE74UH411 +... 5493004NJH3JGW7MVS62 +... 5493004QRTOY0WERIJ41 +... 54930066SVUPVIHE5U21 +... 5493006O7NV2IXKS4288 +... 5493007715JF1TY3M614 +... 5493007HHN4G8PA5MS11 +... 5493007PWOC8DW5KJM17 +... 5493008EWHY43YYP8R93 +... 5493008VZPPOQ8Y63J10 +... 549300EF33KFNMISKX67 +... 549300EUCOJ6XD50YM58 +... 549300FR4NAW0G8UFI80 +... 549300FRSHK45MQIBL14 +... 549300GF102RMNYVKB19 +... 549300H45ZBEKCVW0U40 +... 549300IDQBTGQCXJ5239 +... 549300IWFWPPXW87ZE72 +... 549300J8EHPRYOKF3869 +... 549300JMX497I8GHDT24 +... 549300LHQ6XOM0JUW406 +... 549300M3SJFSFVXG6X69 +... 549300NV50SCQMF8OC75 +... 549300O2F2PCD1D7PZ95 +... 549300O7ZFXE3YT1GH43 +... 549300OIVSR86BGJGT75 +... 549300OM88E30DLQTD78 +... 549300PATTPXQ660N070 +... 549300PFL3HXXEEOHS50 +... 549300SILMFILZ8Y4427 +... 549300SOEQOO5LPOD659 +... 549300TZLPZOAIIMJF22 +... 549300UKFZ3BD7TNKI26 +... 549300V6KHTZPJ4YVC33 +... 549300V6LZG40THFO450 +... 549300V885B988S1LJ49 +... 549300WTO22HTNIA0Z19 +... 549300X8N7DWRL7VBF44 +... 549300XBRMGPGXSSB667 +... 549300YBGK6ESSY6G874 +... 549300YPYUJBJGNGQO81 +... 5967007LIEEXZX850W58 +... 6354004RBF2LINM9VH78 +... 635400ID2ZOCFWX3LH70 +... 635400TSTDEIQBVFXR91 +... 7245005BAK6R2JQ1LU94 +... 7245006M2FC6DPMC6427 +... 724500PVWFYKZIJQAN07 +... 815600065E4EA9D08446 +... 8156004572781E3F9023 +... 815600E6B00CF4DBB722 +... 815600FC0039E657C985 +... 815600FF404253C67598 +... 959800Q824KQDPCZPV58 +... 96950091S6OFL0N15G96 +... 969500BL7YE3PXKDYT35 +... 969500YLLNN3TK3JSF66 +... 969500ZAUC3Z50DNZV77 +... FIR47I6FEYKYNJBYW622 +... GU00WJXK6DH4VHHFXQ16 +... NMMFE09VSMAF2TU16C07 +... RCJ8N5WH4YK7SVJ4BO12 +... TGXITECVNFSIBV316765 +... WT03B8BB1IX8WI9ZGV02 +... XNIO7KHWR2WD0BP1F484 +... +... ''' +>>> [x for x in numbers.splitlines() if x and not lei.is_valid(x)] +[] From bb1712d6062a14f6c68f4464cccb0f75562c4061 Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 10 Apr 2017 22:32:32 +0200 Subject: [PATCH 154/654] Add simple online check example This adds the code that is used to find formats for which a supplied number is valid. This is the code that is used on https://arthurdejong.org/python-stdnum/check/ --- online_check/README | 18 + online_check/check.js | 96 + online_check/jquery-1.7.1.js | 9266 ++++++++++++++++++++++++++++++ online_check/jquery-1.7.1.min.js | 4 + online_check/stdnum.wsgi | 87 + online_check/template.html | 23 + 6 files changed, 9494 insertions(+) create mode 100644 online_check/README create mode 100644 online_check/check.js create mode 100644 online_check/jquery-1.7.1.js create mode 100644 online_check/jquery-1.7.1.min.js create mode 100755 online_check/stdnum.wsgi create mode 100644 online_check/template.html diff --git a/online_check/README b/online_check/README new file mode 100644 index 00000000..38841e2c --- /dev/null +++ b/online_check/README @@ -0,0 +1,18 @@ +This is a sample application that uses python-stdnum to see which number +formats are valid for a supplied number as can be seen online at: + https://arthurdejong.org/python-stdnum/check/ + +Configuring the WSGI application in Apache. + +# /path/to/wsgi is the directory containing the WSGI scripts +# /path/to/html is the directory containing the static files + +WSGIDaemonProcess stdnum threads=5 maximum-requests=100 display-name=%{GROUP} + + + WSGIProcessGroup stdnum + + +Alias /check /path/to/html +WSGIScriptAlias /check/stdnum.wsgi /path/to/wsgi/stdnum.wsgi +RewriteRule ^/check/$ /check/stdnum.wsgi/$1 [QSA,PT,L] diff --git a/online_check/check.js b/online_check/check.js new file mode 100644 index 00000000..b52633f4 --- /dev/null +++ b/online_check/check.js @@ -0,0 +1,96 @@ +/* + # check.js - simple application to check numbers + # + # Copyright (C) 2017 Arthur de Jong. + # + # This library is free software; you can redistribute it and/or + # modify it under the terms of the GNU Lesser General Public + # License as published by the Free Software Foundation; either + # version 2.1 of the License, or (at your option) any later version. + # + # This library is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + # Lesser General Public License for more details. + # + # You should have received a copy of the GNU Lesser General Public + # License along with this library; if not, write to the Free Software + # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + # 02110-1301 USA + */ + +$( document ).ready(function() { + + function format(value) { + return $("
    ").text(value).html().replace( + /\n\n/g, "
    \n" + ).replace( + /^[*] (.*)$/gm, "
    • $1
    " + ).replace( + /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, + "$1" + ) + } + + function updateresults(field, results) { + // build HTML to present + var h = ["
      "]; + $.each(results, function(index, result) { + h.push( + "
    • ", + $("
      ").text(result["name"]).html(), + "
      ", + $("
      ").text(result["number"]).html(), + "

      ", + format(result["description"]), + "

    • ") + }); + h.push("
    "); + // replace the results div + $("#" + $(field).attr("id") + "_results").slideUp("quick", function() { + $(this).html(h.join("")); + $(this).slideDown("quick"); + }); + } + + function checkfield(field) { + var value = field.val(); + // only trigger update if value changed from previous validation + if (value != $(this).data("oldvalue")) { + $(this).data("oldvalue", value); + $.get('', {number: value}, function(data) { + updateresults(field, data); + }); + } + } + + // trigger a check when user stopped typing + $(".stdnum_check").on("input propertychange", function (event) { + if (window.event && event.type == "propertychange" && event.propertyName != "value") + return; + var field = $(this); + window.clearTimeout($(this).data("timeout")); + $(this).data("timeout", setTimeout(function () { + checkfield(field); + }, 2000)); + }); + + // trigger a check when losing focus + $(".stdnum_check").on("blur", function() { + window.clearTimeout($(this).data("timeout")); + checkfield($(this)); + }); + + // prevent enter from submitting the form + $(".stdnum_check").keydown(function(event) { + if(event.keyCode == 13) { + event.preventDefault(); + checkfield($(this)); + return false; + } + }); + + // hide the submit button + $(".stdnum_hide").hide(); + +}); diff --git a/online_check/jquery-1.7.1.js b/online_check/jquery-1.7.1.js new file mode 100644 index 00000000..8ccd0ea7 --- /dev/null +++ b/online_check/jquery-1.7.1.js @@ -0,0 +1,9266 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!memory; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + marginDiv, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = marginDiv = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + conMarginTop, ptlm, vb, style, html, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; + vb = "visibility:hidden;border:0;"; + style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; + html = "
    " + + "" + + "
    "; + + container = document.createElement("div"); + container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Figure out if the W3C box model works as expected + div.innerHTML = ""; + div.style.width = div.style.paddingLeft = "1px"; + jQuery.boxModel = support.boxModel = div.offsetWidth === 2; + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.style.cssText = ptlm + vb; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + body.removeChild( container ); + div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, attr, name, + data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { + attr = this[0].attributes; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + jQuery._data( this[0], "parsedAttrs", true ); + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var self = jQuery( this ), + args = [ parts[0], value ]; + + self.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + + // See #9699 for explanation of this approach (setting first, then removal) + jQuery.attr( elem, name, "" ); + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /\bhover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Determine handlers that should run if there are delegated events + // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on.call( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

    "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
    "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
    ", "
    " ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + col: [ 2, "", "
    " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and