Repository: joke2k/faker
Pull request #1811 (2023-02-28 13:19:10)

Add nl_BE company provider


Patch:
diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index b0203685..9889dd54 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 17.3.0
+current_version = 18.0.0
 files = VERSION faker/__init__.py docs/conf.py
 commit = True
 tag = True
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c604269b..a85619f8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,22 @@
 ## Changelog
 
+### [v18.0.0 - 2023-03-20](https://github.com/joke2k/faker/compare/v17.6.0...v18.0.0)
+
+* Add territory zip codes for `en_US`. Thanks @johnekent.
+
+### [v17.6.0 - 2023-03-03](https://github.com/joke2k/faker/compare/v17.5.0...v17.6.0)
+
+* Add `nl_BE` bank provider. Thanks @takis.
+* Fix North Macedonia entry in `uk_UA` provider. Thanks @PerchunPak.
+
+### [v17.5.0 - 2023-03-01](https://github.com/joke2k/faker/compare/v17.4.0...v17.5.0)
+
+* Add SBN provider. Thanks @dag2226.
+
+### [v17.4.0 - 2023-02-28](https://github.com/joke2k/faker/compare/v17.3.0...v17.4.0)
+
+* Use the official name for North Macedonia due to the name change in 2019. Thanks @takis.
+
 ### [v17.3.0 - 2023-02-24](https://github.com/joke2k/faker/compare/v17.2.0...v17.3.0)
 
 * Add `zh_TW` `date_time` provider. Thanks @ew2664.
@@ -32,6 +49,7 @@
 ### [v16.7.1 - 2023-02-09](https://github.com/joke2k/faker/compare/v16.7.0...v16.7.1)
 
 * Fix `name_female` and `name_male` mixed names for `en_GB`. @thanks @nathanael-e.
+* Add `es_AR` providers. Thanks @kity-linuxero.
 
 ### [v16.7.0 - 2023-02-07](https://github.com/joke2k/faker/compare/v16.6.1...v16.7.0)
 
diff --git a/VERSION b/VERSION
index 5aadcd3f..7eae4e2e 100644
--- a/VERSION
+++ b/VERSION
@@ -1,1 +1,1 @@
-17.3.0
+18.0.0
diff --git a/docs/conf.py b/docs/conf.py
index f2f7ae2b..47d034d6 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -51,9 +51,9 @@ copyright = "2014, Daniele Faraglia"
 # built documents.
 #
 # The short X.Y version.
-version = "17.3.0"
+version = "18.0.0"
 # The full version, including alpha/beta/rc tags.
-release = "17.3.0"
+release = "18.0.0"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/faker/__init__.py b/faker/__init__.py
index defd849c..77158ac6 100644
--- a/faker/__init__.py
+++ b/faker/__init__.py
@@ -2,6 +2,6 @@ from faker.factory import Factory
 from faker.generator import Generator
 from faker.proxy import Faker
 
-VERSION = "17.3.0"
+VERSION = "18.0.0"
 
 __all__ = ("Factory", "Generator", "Faker")
diff --git a/faker/providers/address/bn_BD/__init__.py b/faker/providers/address/bn_BD/__init__.py
index 4f47ce98..0aa51915 100644
--- a/faker/providers/address/bn_BD/__init__.py
+++ b/faker/providers/address/bn_BD/__init__.py
@@ -321,7 +321,7 @@ class Provider(AddressProvider):
         "লিথুয়ানিয়া",
         "লাক্সেমবার্গ",
         "ম্যাকাও",
-        "মেসিডোনিয়া প্রজাতন্ত্র",
+        "উত্তর মেসিডোনিয়া প্রজাতন্ত্র",
         "মাদাগাস্কার",
         "মালাউই",
         "মালয়েশিয়া",
diff --git a/faker/providers/address/cs_CZ/__init__.py b/faker/providers/address/cs_CZ/__init__.py
index b902bb81..9054e301 100644
--- a/faker/providers/address/cs_CZ/__init__.py
+++ b/faker/providers/address/cs_CZ/__init__.py
@@ -1033,7 +1033,6 @@ class Provider(AddressProvider):
         "Lotyšsko",
         "Lucembursko",
         "Madagaskar",
-        "Makedonie",
         "Malajsie",
         "Malawi",
         "Maledivy",
@@ -1083,6 +1082,7 @@ class Provider(AddressProvider):
         "Saúdská Arábie",
         "Senegal",
         "Severní Korea",
+        "Severní Makedonie",
         "Seychely",
         "Sierra Leone",
         "Singapur",
diff --git a/faker/providers/address/da_DK/__init__.py b/faker/providers/address/da_DK/__init__.py
index bc0cabb2..1aae0298 100644
--- a/faker/providers/address/da_DK/__init__.py
+++ b/faker/providers/address/da_DK/__init__.py
@@ -2392,7 +2392,6 @@ class Provider(AddressProvider):
         "Litauen",
         "Luxembourg",
         "Madagaskar",
-        "Makedonien",
         "Malawi",
         "Malaysia",
         "Maldiverne",
@@ -2420,6 +2419,7 @@ class Provider(AddressProvider):
         "Nigeria",
         "Niue",
         "Nordkorea",
+        "Nordmakedonien",
         "Norge",
         "Oman",
         "Pakistan",
diff --git a/faker/providers/address/de/__init__.py b/faker/providers/address/de/__init__.py
index b8d9734e..d9f07fe8 100644
--- a/faker/providers/address/de/__init__.py
+++ b/faker/providers/address/de/__init__.py
@@ -134,7 +134,6 @@ class Provider(AddressProvider):
         "Mauretanien",
         "Mauritius",
         "Mayotte",
-        "Mazedonien",
         "Mexiko",
         "Mikronesien",
         "Monaco",
@@ -154,6 +153,7 @@ class Provider(AddressProvider):
         "Niger",
         "Nigeria",
         "Niue",
+        "Nordmazedonien",
         "Norfolkinsel",
         "Norwegen",
         "Nördliche Marianen",
diff --git a/faker/providers/address/el_GR/__init__.py b/faker/providers/address/el_GR/__init__.py
index 110f26c0..d7874279 100644
--- a/faker/providers/address/el_GR/__init__.py
+++ b/faker/providers/address/el_GR/__init__.py
@@ -249,6 +249,7 @@ class Provider(AddressProvider):
         "Γρενάδα",
         "Γροιλανδία",
         "Δανία",
+        "Δημοκρατία της Βόρειας Μακεδονίας",
         "Δημοκρατία της Κορέας",
         "Δομινίκα",
         "Δομινικανή Δημοκρατία",
@@ -374,7 +375,6 @@ class Provider(AddressProvider):
         "Ουζμπεκιστάν",
         "Ουκρανία",
         "Ουρουγουάη",
-        "Π.Γ.Δ. Μακεδονίας",
         "Πακιστάν",
         "Παλάου",
         "Παλαιστίνη",
diff --git a/faker/providers/address/en/__init__.py b/faker/providers/address/en/__init__.py
index 86755662..7d2124d7 100644
--- a/faker/providers/address/en/__init__.py
+++ b/faker/providers/address/en/__init__.py
@@ -132,7 +132,6 @@ class Provider(AddressProvider):
         "Lithuania",
         "Luxembourg",
         "Macao",
-        "Macedonia",
         "Madagascar",
         "Malawi",
         "Malaysia",
@@ -166,6 +165,7 @@ class Provider(AddressProvider):
         "Nigeria",
         "Niue",
         "Norfolk Island",
+        "North Macedonia",
         "Northern Mariana Islands",
         "Norway",
         "Oman",
diff --git a/faker/providers/address/en_US/__init__.py b/faker/providers/address/en_US/__init__.py
index 4242e781..4bf14695 100644
--- a/faker/providers/address/en_US/__init__.py
+++ b/faker/providers/address/en_US/__init__.py
@@ -419,6 +419,15 @@ class Provider(AddressProvider):
         "WV": (24701, 26886),
         "WI": (53001, 54990),
         "WY": (82001, 83128),
+        # Territories - incomplete ranges with accurate subsets - https://www.geonames.org/postalcode-search.html
+        "AS": (96799, 96799),
+        "FM": (96941, 96944),
+        "GU": (96910, 96932),
+        "MH": (96960, 96970),
+        "MP": (96950, 96952),
+        "PW": (96940, 96940),
+        "PR": (600, 799),
+        "VI": (801, 805),
     }
 
     territories_abbr = (
@@ -511,7 +520,7 @@ class Provider(AddressProvider):
         if state_abbr is None:
             state_abbr = self.random_element(self.states_abbr)
 
-        if state_abbr in self.states_abbr:
+        if state_abbr in self.states_and_territories_abbr:
             postcode = "%d" % (
                 self.generator.random.randint(
                     self.states_postcode[state_abbr][0],
@@ -519,8 +528,12 @@ class Provider(AddressProvider):
                 )
             )
 
-            if len(postcode) == 4:
-                postcode = "0%s" % postcode
+            # zero left pad up until desired length (some have length 3 or 4)
+            target_postcode_len = 5
+            current_postcode_len = len(postcode)
+            if current_postcode_len < target_postcode_len:
+                pad = target_postcode_len - current_postcode_len
+                postcode = f"{'0'*pad}{postcode}"
 
             return postcode
 
diff --git a/faker/providers/address/es/__init__.py b/faker/providers/address/es/__init__.py
index 8588bc6c..726975c8 100644
--- a/faker/providers/address/es/__init__.py
+++ b/faker/providers/address/es/__init__.py
@@ -63,7 +63,6 @@ class Provider(AddressProvider):
         "Estados Unidos de América",
         "Estonia",
         "Etiopía",
-        "ex República Yugoslava de Macedonia",
         "Federación de Rusia",
         "Fiji",
         "Filipinas",
@@ -148,6 +147,7 @@ class Provider(AddressProvider):
         "República Centroafricana",
         "República Checa",
         "República de Corea",
+        "República de Macedonia del Norte",
         "República de Moldova",
         "República Democrática del Congo",
         "República Democrática Popular Lao",
diff --git a/faker/providers/address/fa_IR/__init__.py b/faker/providers/address/fa_IR/__init__.py
index ad79a701..c21889d3 100644
--- a/faker/providers/address/fa_IR/__init__.py
+++ b/faker/providers/address/fa_IR/__init__.py
@@ -243,7 +243,7 @@ class Provider(AddressProvider):
         "مراکش",
         "مصر",
         "مغولستان",
-        "مقدونیه",
+        "مقدونیه شمالی",
         "مکزیک",
         "موریتانی",
         "موریس",
diff --git a/faker/providers/address/fi_FI/__init__.py b/faker/providers/address/fi_FI/__init__.py
index d2aa50d4..4b05d39d 100644
--- a/faker/providers/address/fi_FI/__init__.py
+++ b/faker/providers/address/fi_FI/__init__.py
@@ -433,7 +433,6 @@ class Provider(AddressProvider):
         "Liettua",
         "Luxemburg",
         "Madagaskar",
-        "Makedonia",
         "Malawi",
         "Malediivit",
         "Malesia",
@@ -466,6 +465,7 @@ class Provider(AddressProvider):
         "Papua-Uusi-Guinea",
         "Paraguay",
         "Peru",
+        "Pohjois-Makedonia",
         "Korean demokraattinen kansantasavalta",
         "Portugali",
         "Puola",
diff --git a/faker/providers/address/fr_CH/__init__.py b/faker/providers/address/fr_CH/__init__.py
index c2f5bd33..88996048 100644
--- a/faker/providers/address/fr_CH/__init__.py
+++ b/faker/providers/address/fr_CH/__init__.py
@@ -214,7 +214,7 @@ class Provider(AddressProvider):
         "Lithuanie",
         "Luxembourg",
         "Macau",
-        "Macédoine",
+        "Macédoine du Nord",
         "Madagascar",
         "Malaisie",
         "Malawi",
diff --git a/faker/providers/address/fr_FR/__init__.py b/faker/providers/address/fr_FR/__init__.py
index 5aaff526..fa7010da 100644
--- a/faker/providers/address/fr_FR/__init__.py
+++ b/faker/providers/address/fr_FR/__init__.py
@@ -170,7 +170,7 @@ class Provider(AddressProvider):
         "Lithuanie",
         "Luxembourg",
         "Macau",
-        "Macédoine",
+        "Macédoine du Nord",
         "Madagascar",
         "Malaisie",
         "Malawi",
diff --git a/faker/providers/address/hr_HR/__init__.py b/faker/providers/address/hr_HR/__init__.py
index bd01a167..b3ae4ba3 100755
--- a/faker/providers/address/hr_HR/__init__.py
+++ b/faker/providers/address/hr_HR/__init__.py
@@ -461,7 +461,6 @@ class Provider(AddressProvider):
         "Mađarska",
         "Majote",
         "Makao",
-        "Makedonija",
         "Malavi",
         "Maldivi Maldives",
         "Malezija",
@@ -525,6 +524,7 @@ class Provider(AddressProvider):
         "Sint Maarten",
         "Sirija",
         "Sjedinjene Američke Države",
+        "Sjeverna Makedonija",
         "Sjeverni Marijanski Otoci",
         "Slovačka",
         "Slovenija",
diff --git a/faker/providers/address/hu_HU/__init__.py b/faker/providers/address/hu_HU/__init__.py
index 4fd17988..990f6379 100644
--- a/faker/providers/address/hu_HU/__init__.py
+++ b/faker/providers/address/hu_HU/__init__.py
@@ -257,6 +257,7 @@ class Provider(AddressProvider):
         "Eritrea",
         "Északi Mariana-szigetek",
         "Észak-Korea",
+        "Észak-Macedónia",
         "Észtország",
         "Etiópia",
         "Falkland-szigetek",
@@ -327,7 +328,6 @@ class Provider(AddressProvider):
         "Liechtenstein",
         "Litvánia",
         "Luxemburg",
-        "Macedónia",
         "Madagaszkár",
         "Magyarország",
         "Makaó",
diff --git a/faker/providers/address/hy_AM/__init__.py b/faker/providers/address/hy_AM/__init__.py
index 6b83e416..3f4c9510 100644
--- a/faker/providers/address/hy_AM/__init__.py
+++ b/faker/providers/address/hy_AM/__init__.py
@@ -204,7 +204,7 @@ class Provider(AddressProvider):
         "Լիտվա",
         "Լյուքսեմբուրգ",
         "Մակաո",
-        "Մակեդոնիա",
+        "Հյուսիսային Մակեդոնիա",
         "Մադագասկար",
         "Մալավի",
         "Մալազիա",
diff --git a/faker/providers/address/id_ID/__init__.py b/faker/providers/address/id_ID/__init__.py
index c3eeb727..35781ad3 100644
--- a/faker/providers/address/id_ID/__init__.py
+++ b/faker/providers/address/id_ID/__init__.py
@@ -405,6 +405,7 @@ class Provider(AddressProvider):
         "Lituania",
         "Luksemburg",
         "Madagaskar",
+        "Makedonia Utara",
         "Maladewa",
         "Malawi",
         "Malaysia",
@@ -444,7 +445,6 @@ class Provider(AddressProvider):
         "Republik Dominika",
         "Republik Irlandia",
         "Republik Kongo",
-        "Republik Makedonia",
         "Republik Rakyat Tiongkok",
         "Rumania",
         "Rusia",
diff --git a/faker/providers/address/it_IT/__init__.py b/faker/providers/address/it_IT/__init__.py
index 0ea6d455..6ba2a908 100644
--- a/faker/providers/address/it_IT/__init__.py
+++ b/faker/providers/address/it_IT/__init__.py
@@ -17489,7 +17489,7 @@ class Provider(AddressProvider):
         "Lituania",
         "Lussemburgo",
         "Macao",
-        "Macedonia",
+        "Macedonia del Nord",
         "Madagascar",
         "Malawi",
         "Malesia",
diff --git a/faker/providers/address/ja_JP/__init__.py b/faker/providers/address/ja_JP/__init__.py
index efad2387..4811eb90 100644
--- a/faker/providers/address/ja_JP/__init__.py
+++ b/faker/providers/address/ja_JP/__init__.py
@@ -139,7 +139,7 @@ class Provider(AddressProvider):
         "リトアニア",
         "ルクセンブルク",
         "マカオ",
-        "マケドニア共和国",
+        "北マケドニア共和国",
         "マダガスカル",
         "マラウィ",
         "マレーシア",
diff --git a/faker/providers/address/ko_KR/__init__.py b/faker/providers/address/ko_KR/__init__.py
index 126d9721..33af0b86 100644
--- a/faker/providers/address/ko_KR/__init__.py
+++ b/faker/providers/address/ko_KR/__init__.py
@@ -266,7 +266,7 @@ class Provider(AddressProvider):
         "리히텐슈타인",
         "마다가스카르",
         "마셜 제도",
-        "마케도니아 공화국",
+        "북마케도니아 공화국",
         "말라위",
         "말레이시아",
         "말리",
diff --git a/faker/providers/address/ne_NP/__init__.py b/faker/providers/address/ne_NP/__init__.py
index 3d6afc1c..206b40c6 100644
--- a/faker/providers/address/ne_NP/__init__.py
+++ b/faker/providers/address/ne_NP/__init__.py
@@ -230,7 +230,7 @@ class Provider(AddressProvider):
         "मौरिसनिया",
         "मौरिसस",
         "म्यानमार",
-        "म्यासेडोनिया",
+        "उत्तरी म्यासेडोनिया",
         "यमन",
         "युक्रेन",
         "युगान्डा",
diff --git a/faker/providers/address/nl_BE/__init__.py b/faker/providers/address/nl_BE/__init__.py
index d37219f9..1568d206 100644
--- a/faker/providers/address/nl_BE/__init__.py
+++ b/faker/providers/address/nl_BE/__init__.py
@@ -154,7 +154,6 @@ class Provider(AddressProvider):
         "Litouwen",
         "Luxemburg",
         "Macau",
-        "Macedonië",
         "Madagaskar",
         "Malawi",
         "Maldiven",
@@ -188,6 +187,7 @@ class Provider(AddressProvider):
         "Nigeria",
         "Niue",
         "Noord-Korea",
+        "Noord-Macedonië",
         "Noordelijke Marianen",
         "Noorwegen",
         "Norfolk",
diff --git a/faker/providers/address/nl_NL/__init__.py b/faker/providers/address/nl_NL/__init__.py
index a69463c3..d7ff67ab 100644
--- a/faker/providers/address/nl_NL/__init__.py
+++ b/faker/providers/address/nl_NL/__init__.py
@@ -153,7 +153,6 @@ class Provider(AddressProvider):
         "Litouwen",
         "Luxemburg",
         "Macau",
-        "Macedonië",
         "Madagaskar",
         "Malawi",
         "Maldiven",
@@ -187,6 +186,7 @@ class Provider(AddressProvider):
         "Nigeria",
         "Niue",
         "Noord-Korea",
+        "Noord-Macedonië",
         "Noordelijke Marianen",
         "Noorwegen",
         "Norfolk",
diff --git a/faker/providers/address/pt_BR/__init__.py b/faker/providers/address/pt_BR/__init__.py
index 2b5f239b..91ba030c 100644
--- a/faker/providers/address/pt_BR/__init__.py
+++ b/faker/providers/address/pt_BR/__init__.py
@@ -736,7 +736,7 @@ class Provider(AddressProvider):
         "Lituânia",
         "Luxemburgo",
         "Macau",
-        "Macedônia",
+        "Macedónia do Norte",
         "Madagáscar",
         "Malásia",
         "Malávi",
diff --git a/faker/providers/address/pt_PT/__init__.py b/faker/providers/address/pt_PT/__init__.py
index 71e754c7..8e559b33 100644
--- a/faker/providers/address/pt_PT/__init__.py
+++ b/faker/providers/address/pt_PT/__init__.py
@@ -325,7 +325,7 @@ class Provider(AddressProvider):
         "Lituânia",
         "Luxemburgo",
         "Macau",
-        "Macedónia",
+        "Macedónia do Norte",
         "Madagáscar",
         "Malásia",
         "Malávi",
diff --git a/faker/providers/address/sk_SK/__init__.py b/faker/providers/address/sk_SK/__init__.py
index 814575f7..e5f72d75 100644
--- a/faker/providers/address/sk_SK/__init__.py
+++ b/faker/providers/address/sk_SK/__init__.py
@@ -5009,8 +5009,6 @@ class Provider(AddressProvider):
         "Luxemburské veľkovojvodstvo",
         "Macao",
         "Osobitná administratívna oblasť Číny Macao",
-        "Macedónska republika",
-        "Bývalá juhoslovanská republika Macedónsko",
         "Madagaskar",
         "Madagaskarská republika",
         "Malawi",
@@ -5065,7 +5063,9 @@ class Provider(AddressProvider):
         "Nigérijská federatívna republika",
         "Niue",
         "Norfolk",
+        "Severné Macedónsko",
         "Severné Mariány",
+        "Severomacedónska republika",
         "Spoločenstvo Severných Marián",
         "Nórsko",
         "Nórske kráľovstvo",
diff --git a/faker/providers/address/sl_SI/__init__.py b/faker/providers/address/sl_SI/__init__.py
index efc18286..254b2fbd 100755
--- a/faker/providers/address/sl_SI/__init__.py
+++ b/faker/providers/address/sl_SI/__init__.py
@@ -1454,8 +1454,7 @@ class Provider(AddressProvider):
         "Madagaskar",
         "Republika Madagaskar",
         "Republika Madžarska",
-        "Makedonija",
-        "Republika Makedonija",
+        "Republika Severna Makedonija",
         "Malavi",
         "Maldivi",
         "Republika Maldivi",
@@ -1525,6 +1524,7 @@ class Provider(AddressProvider):
         "Republika Sejšeli",
         "Republika Senegal",
         "Severna Koreja",
+        "Severna Makedonija",
         "Sierra Leone",
         "Republika Sierra Leone",
         "Singapur",
diff --git a/faker/providers/address/sv_SE/__init__.py b/faker/providers/address/sv_SE/__init__.py
index 04ec070f..b7dbc9d4 100644
--- a/faker/providers/address/sv_SE/__init__.py
+++ b/faker/providers/address/sv_SE/__init__.py
@@ -221,7 +221,6 @@ class Provider(AddressProvider):
         "Luxemburg",
         "Macao",
         "Madagaskar",
-        "Makedonien",
         "Malawi",
         "Malaysia",
         "Maldiverna",
@@ -253,6 +252,7 @@ class Provider(AddressProvider):
         "Nigeria",
         "Niue",
         "Nordkorea",
+        "Nordmakedonien",
         "Nordmarianerna",
         "Norfolkön",
         "Norge",
diff --git a/faker/providers/address/th/__init__.py b/faker/providers/address/th/__init__.py
index e3ce41a5..7832b9cb 100644
--- a/faker/providers/address/th/__init__.py
+++ b/faker/providers/address/th/__init__.py
@@ -148,7 +148,7 @@ class Provider(AddressProvider):
         "มอลตา",
         "มัลดีฟส์",
         "มาเก๊า",
-        "มาซิโดเนีย",
+        "ประเทศมาซิโดเนียเหนือ",
         "มาดากัสการ์",
         "มายอต",
         "มาร์ตีนิก",
diff --git a/faker/providers/address/uk_UA/__init__.py b/faker/providers/address/uk_UA/__init__.py
index de4ceea6..1ec0c999 100644
--- a/faker/providers/address/uk_UA/__init__.py
+++ b/faker/providers/address/uk_UA/__init__.py
@@ -613,7 +613,6 @@ class Provider(AddressProvider):
         "Маврикій",
         "Мавританія",
         "Мадагаскар",
-        "Республіка Македонія",
         "Малаві",
         "Малайзія",
         "Малі",
@@ -651,6 +650,7 @@ class Provider(AddressProvider):
         "Південний Судан",
         "Польща",
         "Португалія",
+        "Північна Республіка Македонія",
         "Росія",
         "Руанда",
         "Румунія",
diff --git a/faker/providers/address/zh_CN/__init__.py b/faker/providers/address/zh_CN/__init__.py
index 74de54fd..726aeea2 100644
--- a/faker/providers/address/zh_CN/__init__.py
+++ b/faker/providers/address/zh_CN/__init__.py
@@ -318,7 +318,7 @@ class Provider(AddressProvider):
         "列支敦士登",
         "立陶宛",
         "卢森堡",
-        "马其顿",
+        "北马其顿",
         "马达加斯加",
         "马拉维",
         "马来西亚",
diff --git a/faker/providers/address/zh_TW/__init__.py b/faker/providers/address/zh_TW/__init__.py
index 6ba61293..7f2decb3 100644
--- a/faker/providers/address/zh_TW/__init__.py
+++ b/faker/providers/address/zh_TW/__init__.py
@@ -291,7 +291,7 @@ class Provider(AddressProvider):
         "聖露西亞",
         "澳門",
         "聖文森及格瑞那丁",
-        "馬其頓",
+        "北馬其頓",
         "聖多美及普林西比",
         "馬達加斯加",
         "沙烏地阿拉伯",
diff --git a/faker/providers/automotive/nl_BE/__init__.py b/faker/providers/automotive/nl_BE/__init__.py
new file mode 100644
index 00000000..19f24cac
--- /dev/null
+++ b/faker/providers/automotive/nl_BE/__init__.py
@@ -0,0 +1,16 @@
+from .. import Provider as AutomotiveProvider
+
+
+class Provider(AutomotiveProvider):
+    """Implement automotive provider for `nl_BE` locale.
+
+    https://nl.wikipedia.org/wiki/Belgisch_kenteken
+    """
+
+    license_formats = (
+        "???-###",  # 1973-2008
+        "###-???",  # 2008-2010
+        # New formats after 2010
+        "1-???-###",
+        "2-???-###",
+    )
diff --git a/faker/providers/bank/nl_BE/__init__.py b/faker/providers/bank/nl_BE/__init__.py
new file mode 100644
index 00000000..92455b90
--- /dev/null
+++ b/faker/providers/bank/nl_BE/__init__.py
@@ -0,0 +1,68 @@
+from .. import Provider as BankProvider
+
+
+class Provider(BankProvider):
+    """Implement bank provider for ``nl_BE`` locale.
+
+    Information about the Belgian banks can be found on the website
+    of the National Bank of Belgium:
+    https://www.nbb.be/nl/betalingen-en-effecten/betalingsstandaarden/bankidentificatiecodes
+    """
+
+    bban_format = "############"
+    country_code = "BE"
+
+    banks = (
+        "Argenta Spaarbank",
+        "AXA Bank",
+        "Belfius Bank",
+        "BNP Paribas Fortis",
+        "Bpost Bank",
+        "Crelan",
+        "Deutsche Bank AG",
+        "ING België",
+        "KBC Bank",
+    )
+    swift_bank_codes = (
+        "ARSP",
+        "AXAB",
+        "BBRU",
+        "BPOT",
+        "DEUT",
+        "GEBA",
+        "GKCC",
+        "KRED",
+        "NICA",
+    )
+    swift_location_codes = (
+        "BE",
+        "B2",
+        "99",
+        "21",
+        "91",
+        "23",
+        "3X",
+        "75",
+        "2X",
+        "22",
+        "88",
+        "B1",
+        "BX",
+        "BB",
+    )
+    swift_branch_codes = [
+        "203",
+        "BTB",
+        "CIC",
+        "HCC",
+        "IDJ",
+        "IPC",
+        "MDC",
+        "RET",
+        "VOD",
+        "XXX",
+    ]
+
+    def bank(self) -> str:
+        """Generate a bank name."""
+        return self.random_element(self.banks)
diff --git a/faker/providers/company/nl_BE/__init__.py b/faker/providers/company/nl_BE/__init__.py
new file mode 100644
index 00000000..30ac7f52
--- /dev/null
+++ b/faker/providers/company/nl_BE/__init__.py
@@ -0,0 +1,10 @@
+from .. import Provider as CompanyProvider
+
+
+class Provider(CompanyProvider):
+    formats = (
+        "{{last_name}} {{company_suffix}}",
+        "{{last_name}}-{{last_name}} {{company_suffix}}",
+        "{{last_name}}, {{last_name}} en {{last_name}} {{company_suffix}}",
+    )
+    company_suffixes = ("NV", "BV", "CV", "VOF", "CommV")
diff --git a/faker/providers/date_time/__init__.py b/faker/providers/date_time/__init__.py
index 6172ad41..329a2840 100644
--- a/faker/providers/date_time/__init__.py
+++ b/faker/providers/date_time/__init__.py
@@ -908,7 +908,7 @@ class Provider(BaseProvider):
             alpha_2_code="MK",
             alpha_3_code="MKD",
             continent="Europe",
-            name="Macedonia",
+            name="North Macedonia",
             capital="Skopje",
         ),
         Country(
diff --git a/faker/providers/lorem/nl_BE/__init__.py b/faker/providers/lorem/nl_BE/__init__.py
new file mode 100644
index 00000000..efc33ef9
--- /dev/null
+++ b/faker/providers/lorem/nl_BE/__init__.py
@@ -0,0 +1,1015 @@
+from typing import Dict
+
+from .. import Provider as LoremProvider
+
+
+class Provider(LoremProvider):
+    """Implement lorem provider for ``nl_BE`` locale.
+
+    Source: https://nl.wiktionary.org/wiki/WikiWoordenboek:Lijst_met_1000_basiswoorden
+    """
+
+    word_list = (
+        "aan",
+        "aanbod",
+        "aanraken",
+        "aanval",
+        "aap",
+        "aardappel",
+        "aarde",
+        "aardig",
+        "acht",
+        "achter",
+        "actief",
+        "activiteit",
+        "ademen",
+        "af",
+        "afgelopen",
+        "afhangen",
+        "afmaken",
+        "afname",
+        "afspraak",
+        "afval",
+        "al",
+        "algemeen",
+        "alleen",
+        "alles",
+        "als",
+        "alsjeblieft",
+        "altijd",
+        "ander",
+        "andere",
+        "anders",
+        "angst",
+        "antwoord",
+        "antwoorden",
+        "appel",
+        "arm",
+        "auto",
+        "avond",
+        "avondeten",
+        "baan",
+        "baby",
+        "bad",
+        "bal",
+        "bang",
+        "bank",
+        "basis",
+        "bed",
+        "bedekken",
+        "bedreiging",
+        "bedreven",
+        "been",
+        "beer",
+        "beest",
+        "beetje",
+        "begin",
+        "begrijpen",
+        "begrip",
+        "behalve",
+        "beide",
+        "beker",
+        "bel",
+        "belangrijk",
+        "bellen",
+        "belofte",
+        "beneden",
+        "benzine",
+        "berg",
+        "beroemd",
+        "beroep",
+        "bescherm",
+        "beslissen",
+        "best",
+        "betalen",
+        "beter",
+        "bevatten",
+        "bewegen",
+        "bewolkt",
+        "bezoek",
+        "bibliotheek",
+        "bieden",
+        "bij",
+        "bijna",
+        "bijten",
+        "bijvoorbeeld",
+        "bijzonder",
+        "binnen",
+        "binnenkort",
+        "blad",
+        "blauw",
+        "blazen",
+        "blij",
+        "blijven",
+        "bloed",
+        "bloem",
+        "bodem",
+        "boek",
+        "boerderij",
+        "boete",
+        "boom",
+        "boon",
+        "boord",
+        "boos",
+        "bord",
+        "borstelen",
+        "bos",
+        "bot",
+        "bouwen",
+        "boven",
+        "branden",
+        "brandstof",
+        "breed",
+        "breken",
+        "brengen",
+        "brief",
+        "broer",
+        "broek",
+        "brood",
+        "brug",
+        "bruikbaar",
+        "bruiloft",
+        "bruin",
+        "bui",
+        "buiten",
+        "bureau",
+        "buren",
+        "bus",
+        "buurman",
+        "buurvrouw",
+        "cadeau",
+        "chocolade",
+        "cirkel",
+        "comfortabel",
+        "compleet",
+        "computer",
+        "conditie",
+        "controle",
+        "cool",
+        "correct",
+        "daar",
+        "daarom",
+        "dag",
+        "dak",
+        "dan",
+        "dansen",
+        "dapper",
+        "dat",
+        "de",
+        "deel",
+        "deken",
+        "deksel",
+        "delen",
+        "derde",
+        "deze",
+        "dichtbij",
+        "dienen",
+        "diep",
+        "dier",
+        "dik",
+        "ding",
+        "dit",
+        "dochter",
+        "doen",
+        "dom",
+        "donker",
+        "dood",
+        "door",
+        "doorzichtig",
+        "doos",
+        "dorp",
+        "draad",
+        "draaien",
+        "dragen",
+        "drie",
+        "drijven",
+        "drinken",
+        "drogen",
+        "dromen",
+        "droog",
+        "druk",
+        "dubbel",
+        "dun",
+        "dus",
+        "duur",
+        "duwen",
+        "echt",
+        "een",
+        "één",
+        "eend",
+        "eenheid",
+        "eenzaam",
+        "eerste",
+        "eeuw",
+        "effect",
+        "ei",
+        "eigen",
+        "eiland",
+        "einde",
+        "eis",
+        "elektrisch",
+        "elk",
+        "en",
+        "enkele",
+        "enthousiast",
+        "erg",
+        "eten",
+        "even",
+        "examen",
+        "extreem",
+        "falen",
+        "familie",
+        "feest",
+        "feit",
+        "fel",
+        "fijn",
+        "film",
+        "fit",
+        "fles",
+        "foto",
+        "fout",
+        "fris",
+        "fruit",
+        "gaan",
+        "gat",
+        "gebeuren",
+        "gebeurtenis",
+        "gebied",
+        "geboorte",
+        "geboren",
+        "gebruik",
+        "gebruikelijk",
+        "gebruiken",
+        "gedrag",
+        "gedragen",
+        "geel",
+        "geen",
+        "gehoorzamen",
+        "geit",
+        "geld",
+        "geliefde",
+        "gelijk",
+        "geloof",
+        "geluid",
+        "geluk",
+        "gemak",
+        "gemakkelijk",
+        "gemeen",
+        "genieten",
+        "genoeg",
+        "genot",
+        "gerecht",
+        "gereedschap",
+        "geschikt",
+        "gespannen",
+        "geur",
+        "gevaar",
+        "gevaarlijk",
+        "gevangenis",
+        "geven",
+        "gevolg",
+        "gewicht",
+        "gewoon",
+        "gezicht",
+        "gezond",
+        "gif",
+        "gisteren",
+        "glad",
+        "glas",
+        "glimlach",
+        "god",
+        "goed",
+        "goedkoop",
+        "goud",
+        "graf",
+        "grap",
+        "grappig",
+        "gras",
+        "grens",
+        "grijs",
+        "groeien",
+        "groen",
+        "groente",
+        "groep",
+        "grof",
+        "grond",
+        "groot",
+        "grootmoeder",
+        "grootvader",
+        "haan",
+        "haar",
+        "haast",
+        "hal",
+        "halen",
+        "half",
+        "hallo",
+        "hamer",
+        "hand",
+        "hard",
+        "hart",
+        "haten",
+        "hebben",
+        "heel",
+        "heet",
+        "helder",
+        "helft",
+        "help",
+        "hem",
+        "hemel",
+        "hen",
+        "herfst",
+        "herinneren",
+        "hert",
+        "het",
+        "heuvel",
+        "hier",
+        "hij",
+        "hobby",
+        "hoe",
+        "hoed",
+        "hoek",
+        "hoeveel",
+        "hoeveelheid",
+        "hoewel",
+        "hond",
+        "honderd",
+        "honger",
+        "hoofd",
+        "hoog",
+        "hoogte",
+        "hoop",
+        "horen",
+        "hotel",
+        "houden",
+        "huilen",
+        "huis",
+        "hun",
+        "huren",
+        "hut",
+        "huur",
+        "idee",
+        "ieder",
+        "iedereen",
+        "iemand",
+        "iets",
+        "ijs",
+        "ijzer",
+        "ik",
+        "in",
+        "instrument",
+        "ja",
+        "jaar",
+        "jagen",
+        "jas",
+        "jij",
+        "jong",
+        "jongen",
+        "jouw",
+        "jullie",
+        "kaars",
+        "kaart",
+        "kaas",
+        "kamer",
+        "kans",
+        "kant",
+        "kantoor",
+        "kap",
+        "kast",
+        "kasteel",
+        "kat",
+        "kennen",
+        "kennis",
+        "keuken",
+        "keus",
+        "kiezen",
+        "kijken",
+        "kind",
+        "kip",
+        "kist",
+        "klaar",
+        "klas",
+        "klasse",
+        "kleden",
+        "klein",
+        "kleren",
+        "kleur",
+        "klimmen",
+        "klok",
+        "kloppen",
+        "klopt",
+        "knie",
+        "knippen",
+        "koers",
+        "koffer",
+        "koffie",
+        "kok",
+        "koken",
+        "kom",
+        "komen",
+        "koning",
+        "koningin",
+        "koorts",
+        "kop",
+        "kopen",
+        "kort",
+        "kost",
+        "kosten",
+        "koud",
+        "kraam",
+        "kracht",
+        "krant",
+        "krijgen",
+        "kruis",
+        "kuil",
+        "kunnen",
+        "kunst",
+        "laag",
+        "laat",
+        "laatst",
+        "lach",
+        "lachen",
+        "ladder",
+        "laken",
+        "lamp",
+        "land",
+        "lang",
+        "langs",
+        "langzaam",
+        "laten",
+        "leeftijd",
+        "leeg",
+        "leerling",
+        "leeuw",
+        "leger",
+        "leiden",
+        "lenen",
+        "lengte",
+        "lepel",
+        "leren",
+        "les",
+        "leuk",
+        "leven",
+        "lezen",
+        "lichaam",
+        "licht",
+        "liefde",
+        "liegen",
+        "liggen",
+        "lijk",
+        "lijken",
+        "liniaal",
+        "links",
+        "lip",
+        "list",
+        "lomp",
+        "lood",
+        "lopen",
+        "los",
+        "lot",
+        "lucht",
+        "lui",
+        "luisteren",
+        "lunch",
+        "maag",
+        "maal",
+        "maaltijd",
+        "maan",
+        "maand",
+        "maar",
+        "maat",
+        "machine",
+        "maken",
+        "makkelijk",
+        "mama",
+        "man",
+        "mand",
+        "manier",
+        "map",
+        "markeren",
+        "markt",
+        "me",
+        "medicijn",
+        "meel",
+        "meer",
+        "meerdere",
+        "meest",
+        "meisje",
+        "melk",
+        "meneer",
+        "mengsel",
+        "mensen",
+        "mes",
+        "met",
+        "meubel",
+        "mevrouw",
+        "middel",
+        "midden",
+        "mij",
+        "mijn",
+        "miljoen",
+        "min",
+        "minder",
+        "minuut",
+        "mis",
+        "missen",
+        "mits",
+        "model",
+        "modern",
+        "moeder",
+        "moeilijk",
+        "moeten",
+        "mogelijk",
+        "mogen",
+        "moment",
+        "mond",
+        "mooi",
+        "moord",
+        "moorden",
+        "morgen",
+        "munt",
+        "muziek",
+        "na",
+        "naald",
+        "naam",
+        "naar",
+        "naast",
+        "nacht",
+        "nat",
+        "natuur",
+        "natuurlijk",
+        "nee",
+        "neer",
+        "negen",
+        "nek",
+        "nemen",
+        "net",
+        "netjes",
+        "neus",
+        "niet",
+        "niets",
+        "nieuw",
+        "nieuws",
+        "nobel",
+        "noch",
+        "nodig",
+        "noemen",
+        "nog",
+        "nood",
+        "nooit",
+        "noord",
+        "noot",
+        "normaal",
+        "nu",
+        "nul",
+        "nummer",
+        "object",
+        "oceaan",
+        "ochtend",
+        "oefening",
+        "of",
+        "offer",
+        "olie",
+        "olifant",
+        "om",
+        "oma",
+        "onder",
+        "onderwerp",
+        "onderzoek",
+        "oneven",
+        "ongeluk",
+        "ons",
+        "ontsnappen",
+        "ontbijt",
+        "ontdekken",
+        "ontmoeten",
+        "ontvangen",
+        "ontwikkelen",
+        "onze",
+        "oog",
+        "ooit",
+        "ook",
+        "oom",
+        "oor",
+        "oorlog",
+        "oorzaak",
+        "oost",
+        "op",
+        "opa",
+        "opeens",
+        "open",
+        "openlijk",
+        "opleiding",
+        "opnemen",
+        "oranje",
+        "orde",
+        "oud",
+        "ouder",
+        "over",
+        "overal",
+        "overeenkomen",
+        "overleden",
+        "overvallen",
+        "paar",
+        "paard",
+        "pad",
+        "pagina",
+        "pan",
+        "papa",
+        "papier",
+        "park",
+        "partner",
+        "pas",
+        "passeren",
+        "pen",
+        "peper",
+        "per",
+        "perfect",
+        "periode",
+        "persoon",
+        "piano",
+        "pijn",
+        "pistool",
+        "plaat",
+        "plaatje",
+        "plaats",
+        "plafond",
+        "plank",
+        "plant",
+        "plastic",
+        "plat",
+        "plattegrond",
+        "plein",
+        "plus",
+        "poes",
+        "politie",
+        "poort",
+        "populair",
+        "positie",
+        "postzegel",
+        "potlood",
+        "praten",
+        "presenteren",
+        "prijs",
+        "prins",
+        "prinses",
+        "privé",
+        "proberen",
+        "probleem",
+        "product",
+        "provincie",
+        "publiek",
+        "punt",
+        "raak",
+        "raam",
+        "radio",
+        "raken",
+        "rapport",
+        "recht",
+        "rechtdoor",
+        "rechts",
+        "rechtvaardig",
+        "redden",
+        "reeds",
+        "regen",
+        "reiken",
+        "reizen",
+        "rekenmachine",
+        "rennen",
+        "repareren",
+        "rest",
+        "restaurant",
+        "resultaat",
+        "richting",
+        "rijk",
+        "rijst",
+        "rijzen",
+        "ring",
+        "rok",
+        "rond",
+        "rood",
+        "rook",
+        "rots",
+        "roze",
+        "rubber",
+        "ruiken",
+        "ruimte",
+        "samen",
+        "sap",
+        "schaap",
+        "schaar",
+        "schaduw",
+        "scheiden",
+        "scherp",
+        "schetsen",
+        "schieten",
+        "schijnen",
+        "schip",
+        "school",
+        "schoon",
+        "schouder",
+        "schreeuw",
+        "schreeuwen",
+        "schrijven",
+        "schudden",
+        "seconde",
+        "sex",
+        "signaal",
+        "simpel",
+        "sinds",
+        "slaapkamer",
+        "slapen",
+        "slecht",
+        "sleutel",
+        "slim",
+        "slot",
+        "sluiten",
+        "smaak",
+        "smal",
+        "sneeuw",
+        "snel",
+        "snelheid",
+        "snijden",
+        "soep",
+        "sok",
+        "soms",
+        "soort",
+        "sorry",
+        "speciaal",
+        "spel",
+        "spelen",
+        "sport",
+        "spreken",
+        "springen",
+        "staal",
+        "stad",
+        "stap",
+        "start",
+        "station",
+        "steen",
+        "stelen",
+        "stem",
+        "stempel",
+        "ster",
+        "sterk",
+        "steun",
+        "stil",
+        "stilte",
+        "stoel",
+        "stof",
+        "stoffig",
+        "stom",
+        "stop",
+        "storm",
+        "straat",
+        "straffen",
+        "structuur",
+        "student",
+        "studie",
+        "stuk",
+        "succes",
+        "suiker",
+        "taal",
+        "taart",
+        "tafel",
+        "tak",
+        "tamelijk",
+        "tand",
+        "tante",
+        "tas",
+        "taxi",
+        "te",
+        "team",
+        "teen",
+        "tegen",
+        "teken",
+        "tekenen",
+        "telefoon",
+        "televisie",
+        "tellen",
+        "tennis",
+        "terug",
+        "terugkomst",
+        "terwijl",
+        "test",
+        "tevreden",
+        "thee",
+        "thuis",
+        "tien",
+        "tijd",
+        "titel",
+        "toekomst",
+        "toen",
+        "toename",
+        "totaal",
+        "traan",
+        "tram",
+        "trein",
+        "trekken",
+        "trouwen",
+        "trui",
+        "tuin",
+        "tussen",
+        "tweede",
+        "u",
+        "uit",
+        "uitleggen",
+        "uitnodigen",
+        "uitvinden",
+        "uitzoeken",
+        "uur",
+        "vaak",
+        "vaarwel",
+        "vader",
+        "vak",
+        "vakantie",
+        "vallen",
+        "vals",
+        "van",
+        "vandaag",
+        "vangen",
+        "vanmorgen",
+        "vannacht",
+        "varken",
+        "vast",
+        "vechten",
+        "veel",
+        "veer",
+        "veilig",
+        "ver",
+        "veranderen",
+        "verandering",
+        "verder",
+        "verdienen",
+        "verdrietig",
+        "verenigen",
+        "verf",
+        "vergelijkbaar",
+        "vergelijken",
+        "vergelijking",
+        "vergeten",
+        "vergeven",
+        "vergissen",
+        "verhaal",
+        "verhoging",
+        "verjaardag",
+        "verkeerd",
+        "verkopen",
+        "verlaten",
+        "verleden",
+        "verliezen",
+        "vernietigen",
+        "veroveren",
+        "verrassen",
+        "vers",
+        "verschil",
+        "verschrikkelijk",
+        "verspreiden",
+        "verstand",
+        "verstoppen",
+        "versturen",
+        "vertellen",
+        "vertrekken",
+        "vertrouwen",
+        "verwachten",
+        "verwijderen",
+        "verzamelen",
+        "verzameling",
+        "vet",
+        "vier",
+        "vierkant",
+        "vies",
+        "vijand",
+        "vijf",
+        "vijver",
+        "vinden",
+        "vinger",
+        "vis",
+        "vlag",
+        "vlees",
+        "vlieg",
+        "vliegtuig",
+        "vloer",
+        "voeden",
+        "voedsel",
+        "voelen",
+        "voet",
+        "voetbal",
+        "vogel",
+        "vol",
+        "volgende",
+        "volgorde",
+        "voor",
+        "voorbeeld",
+        "voorkomen",
+        "voorzichtig",
+        "voorzien",
+        "vork",
+        "vorm",
+        "vos",
+        "vouwen",
+        "vraag",
+        "vragen",
+        "vrede",
+        "vreemd",
+        "vreemde",
+        "vriend",
+        "vriendelijk",
+        "vriezen",
+        "vrij",
+        "vrijheid",
+        "vroeg",
+        "vroeger",
+        "vrouw",
+        "vullen",
+        "vuur",
+        "waar",
+        "waarom",
+        "waarschijnlijk",
+        "wachten",
+        "wakker",
+        "wanneer",
+        "want",
+        "wapen",
+        "warm",
+        "wassen",
+        "wat",
+        "water",
+        "we",
+        "week",
+        "weer",
+        "weg",
+        "welke",
+        "welkom",
+        "wens",
+        "wereld",
+        "werelddeel",
+        "werk",
+        "west",
+        "wetenschap",
+        "wie",
+        "wiel",
+        "wij",
+        "wijn",
+        "wijs",
+        "wild",
+        "willen",
+        "wind",
+        "winkel",
+        "winnen",
+        "winter",
+        "wissen",
+        "wit",
+        "wolf",
+        "wolk",
+        "wonder",
+        "woord",
+        "woud",
+        "wreed",
+        "zaak",
+        "zacht",
+        "zak",
+        "zand",
+        "zee",
+        "zeep",
+        "zeer",
+        "zeggen",
+        "zeil",
+        "zeker",
+        "zelfde",
+        "zes",
+        "zetten",
+        "zeven",
+        "ziek",
+        "ziekenhuis",
+        "ziel",
+        "zien",
+        "zij",
+        "zijn",
+        "zilver",
+        "zingen",
+        "zinken",
+        "zitten",
+        "zo",
+        "zoals",
+        "zoeken",
+        "zoet",
+        "zomer",
+        "zon",
+        "zonder",
+        "zonnig",
+        "zoon",
+        "zorg",
+        "zorgen",
+        "zou",
+        "zout",
+        "zuid",
+        "zulke",
+        "zullen",
+        "zus",
+        "zwaar",
+        "zwak",
+        "zwembad",
+        "zwemmen",
+    )
+
+    parts_of_speech: Dict[str, tuple] = {}
diff --git a/faker/providers/lorem/nl_NL/__init__.py b/faker/providers/lorem/nl_NL/__init__.py
new file mode 100644
index 00000000..0c8e88e9
--- /dev/null
+++ b/faker/providers/lorem/nl_NL/__init__.py
@@ -0,0 +1,14 @@
+from typing import Dict
+
+from .. import Provider as LoremProvider
+from ..nl_BE import Provider as LoremProviderNL_BE
+
+
+class Provider(LoremProvider):
+    """Implement lorem provider for ``nl_NL`` locale.
+
+    Source: https://nl.wiktionary.org/wiki/WikiWoordenboek:Lijst_met_1000_basiswoorden
+    """
+
+    word_list = LoremProviderNL_BE.word_list
+    parts_of_speech: Dict[str, tuple] = {}
diff --git a/faker/providers/sbn/__init__.py b/faker/providers/sbn/__init__.py
new file mode 100644
index 00000000..f09eab07
--- /dev/null
+++ b/faker/providers/sbn/__init__.py
@@ -0,0 +1,53 @@
+from typing import List, Tuple
+
+from faker.providers.sbn.rules import RegistrantRule
+
+from .. import BaseProvider
+from .rules import RULES
+from .sbn import SBN, SBN9
+
+
+class Provider(BaseProvider):
+    """Generates fake SBNs. These are the precursor to the ISBN and are
+    largely similar to ISBN-10.
+
+    See https://www.isbn-international.org/content/what-isbn for the
+    format of ISBNs. SBNs have no EAN prefix or Registration Group.
+    """
+
+    def _body(self) -> List[str]:
+        """Generate the information required to create an SBN"""
+
+        reg_pub_len: int = SBN.MAX_LENGTH - 1
+
+        # Generate a registrant/publication combination
+        reg_pub: str = self.numerify("#" * reg_pub_len)
+
+        # Use rules to separate the registrant from the publication
+        rules: List[RegistrantRule] = RULES
+        registrant, publication = self._registrant_publication(reg_pub, rules)
+        return [registrant, publication]
+
+    @staticmethod
+    def _registrant_publication(reg_pub: str, rules: List[RegistrantRule]) -> Tuple[str, str]:
+        """Separate the registration from the publication in a given
+        string.
+        :param reg_pub: A string of digits representing a registration
+            and publication.
+        :param rules: A list of RegistrantRules which designate where
+            to separate the values in the string.
+        :returns: A (registrant, publication) tuple of strings.
+        """
+        for rule in rules:
+            if rule.min <= reg_pub[:-1] <= rule.max:
+                reg_len = rule.registrant_length
+                break
+        else:
+            raise Exception("Registrant/Publication not found in registrant " "rule list.")
+        registrant, publication = reg_pub[:reg_len], reg_pub[reg_len:]
+        return registrant, publication
+
+    def sbn9(self, separator: str = "-") -> str:
+        registrant, publication = self._body()
+        sbn = SBN9(registrant, publication)
+        return sbn.format(separator)
diff --git a/faker/providers/sbn/en_US/__init__.py b/faker/providers/sbn/en_US/__init__.py
new file mode 100644
index 00000000..42616448
--- /dev/null
+++ b/faker/providers/sbn/en_US/__init__.py
@@ -0,0 +1,5 @@
+from .. import Provider as SBNProvider
+
+
+class Provider(SBNProvider):
+    pass
diff --git a/faker/providers/sbn/rules.py b/faker/providers/sbn/rules.py
new file mode 100644
index 00000000..aaf32fd9
--- /dev/null
+++ b/faker/providers/sbn/rules.py
@@ -0,0 +1,24 @@
+"""
+This module exists solely to figure how long a registrant/publication
+number may be within an SBN. It's the same as the ISBN implementation
+for ean 978, reg_group 0.
+"""
+
+from collections import namedtuple
+from typing import List
+
+RegistrantRule = namedtuple("RegistrantRule", ["min", "max", "registrant_length"])
+
+# Structure: RULES = [Rule1, Rule2, ...]
+RULES: List[RegistrantRule] = [
+    RegistrantRule("0000000", "1999999", 2),
+    RegistrantRule("2000000", "2279999", 3),
+    RegistrantRule("2280000", "2289999", 4),
+    RegistrantRule("2290000", "6479999", 3),
+    RegistrantRule("6480000", "6489999", 7),
+    RegistrantRule("6490000", "6999999", 3),
+    RegistrantRule("7000000", "8499999", 4),
+    RegistrantRule("8500000", "8999999", 5),
+    RegistrantRule("9000000", "9499999", 6),
+    RegistrantRule("9500000", "9999999", 7),
+]
diff --git a/faker/providers/sbn/sbn.py b/faker/providers/sbn/sbn.py
new file mode 100644
index 00000000..070f799b
--- /dev/null
+++ b/faker/providers/sbn/sbn.py
@@ -0,0 +1,49 @@
+"""
+This module is responsible for generating the check digit and formatting
+SBN numbers.
+"""
+from typing import Any, Optional
+
+
+class SBN:
+    MAX_LENGTH = 9
+
+    def __init__(
+        self,
+        registrant: Optional[str] = None,
+        publication: Optional[str] = None,
+    ) -> None:
+        self.registrant = registrant
+        self.publication = publication
+
+
+class SBN9(SBN):
+    def __init__(self, *args: Any, **kwargs: Any) -> None:
+        super().__init__(*args, **kwargs)
+        self.check_digit = self._check_digit()
+
+    def _check_digit(self) -> str:
+        """Calculate the check digit for SBN-9.
+        SBNs use the same check digit calculation as ISBN. See
+        https://en.wikipedia.org/wiki/International_Standard_Book_Number
+                for calculation. Only modification is weights range from 1 to 9
+                instead of 1 to 10.
+        """
+        weights = range(1, 9)
+        body = "".join([part for part in [self.registrant, self.publication] if part is not None])
+        remainder = sum(int(b) * w for b, w in zip(body, weights)) % 11
+        check_digit = "X" if remainder == 10 else str(remainder)
+        return str(check_digit)
+
+    def format(self, separator: str = "") -> str:
+        return separator.join(
+            [
+                part
+                for part in [
+                    self.registrant,
+                    self.publication,
+                    self.check_digit,
+                ]
+                if part is not None
+            ]
+        )


Test patch:
diff --git a/tests/providers/test_address.py b/tests/providers/test_address.py
index d9cf2e8b..0576484e 100644
--- a/tests/providers/test_address.py
+++ b/tests/providers/test_address.py
@@ -536,7 +536,7 @@ class TestEnUS:
 
     def test_postcode_in_state(self, faker, num_samples):
         for _ in range(num_samples):
-            for state_abbr in EnUsAddressProvider.states_abbr:
+            for state_abbr in EnUsAddressProvider.states_and_territories_abbr:
                 code = faker.postcode_in_state(state_abbr)
                 assert re.fullmatch(r"\d{5}", code)
                 assert int(code) >= EnUsAddressProvider.states_postcode[state_abbr][0]
@@ -553,7 +553,7 @@ class TestEnUS:
 
     def test_zipcode_in_state(self, faker, num_samples):
         for _ in range(num_samples):
-            for state_abbr in EnUsAddressProvider.states_abbr:
+            for state_abbr in EnUsAddressProvider.states_and_territories_abbr:
                 code = faker.zipcode_in_state(state_abbr)
                 assert re.fullmatch(r"\d{5}", code)
                 assert int(code) >= EnUsAddressProvider.states_postcode[state_abbr][0]
diff --git a/tests/providers/test_automotive.py b/tests/providers/test_automotive.py
index 6d3f27af..7768b531 100644
--- a/tests/providers/test_automotive.py
+++ b/tests/providers/test_automotive.py
@@ -310,3 +310,9 @@ class TestDeCh(_SimpleAutomotiveTestMixin):
     """Test de_CH automotive provider methods"""
 
     license_plate_pattern: Pattern = re.compile(r"[A-Z]{2}-\d{1,3}\s?\d{0,3}")
+
+
+class TestNlBe(_SimpleAutomotiveTestMixin):
+    """Test nl_BE automotive provider methods"""
+
+    license_plate_pattern: Pattern = re.compile(r"(\d{3}-[A-Z]{3})|" r"([A-Z]{3}-\d{3})|" r"([1-2]-[A-Z]{3}-\d{3})")
diff --git a/tests/providers/test_bank.py b/tests/providers/test_bank.py
index 39c7f93e..fc0ead4d 100644
--- a/tests/providers/test_bank.py
+++ b/tests/providers/test_bank.py
@@ -15,6 +15,7 @@ from faker.providers.bank.es_MX import Provider as EsMxBankProvider
 from faker.providers.bank.es_MX import is_valid_clabe
 from faker.providers.bank.fi_FI import Provider as FiFiBankProvider
 from faker.providers.bank.fr_FR import Provider as FrFrBankProvider
+from faker.providers.bank.nl_BE import Provider as NlBeBankProvider
 from faker.providers.bank.no_NO import Provider as NoNoBankProvider
 from faker.providers.bank.pl_PL import Provider as PlPlBankProvider
 from faker.providers.bank.pt_PT import Provider as PtPtBankProvider
@@ -399,3 +400,35 @@ class TestEnIn:
     def test_bank(self, faker, num_samples):
         for _ in range(num_samples):
             assert re.match(r"\D{7,25}", faker.bank())
+
+
+class TestNlBe:
+    """Test nl_BE bank provider"""
+
+    def test_bban(self, faker, num_samples):
+        for _ in range(num_samples):
+            assert re.fullmatch(r"\d{12}", faker.bban())
+
+    def test_iban(self, faker, num_samples):
+        for _ in range(num_samples):
+            iban = faker.iban()
+            assert is_valid_iban(iban)
+            assert iban[:2] == NlBeBankProvider.country_code
+            assert re.fullmatch(r"\d{2}\d{12}", iban[2:])
+
+    def test_swift8_use_dataset(self, faker, num_samples):
+        for _ in range(num_samples):
+            code = faker.swift8(use_dataset=True)
+            assert len(code) == 8
+            assert code[:4] in NlBeBankProvider.swift_bank_codes
+            assert code[4:6] == NlBeBankProvider.country_code
+            assert code[6:8] in NlBeBankProvider.swift_location_codes
+
+    def test_swift11_use_dataset(self, faker, num_samples):
+        for _ in range(num_samples):
+            code = faker.swift11(use_dataset=True)
+            assert len(code) == 11
+            assert code[:4] in NlBeBankProvider.swift_bank_codes
+            assert code[4:6] == NlBeBankProvider.country_code
+            assert code[6:8] in NlBeBankProvider.swift_location_codes
+            assert code[8:11] in NlBeBankProvider.swift_branch_codes
diff --git a/tests/providers/test_company.py b/tests/providers/test_company.py
index 85dd1ec3..13be6705 100644
--- a/tests/providers/test_company.py
+++ b/tests/providers/test_company.py
@@ -14,6 +14,7 @@ from faker.providers.company.hu_HU import Provider as HuHuCompanyProvider
 from faker.providers.company.hy_AM import Provider as HyAmCompanyProvider
 from faker.providers.company.it_IT import Provider as ItItCompanyProvider
 from faker.providers.company.ja_JP import Provider as JaJpCompanyProvider
+from faker.providers.company.nl_BE import Provider as NlBeCompanyProvider
 from faker.providers.company.nl_NL import Provider as NlNlCompanyProvider
 from faker.providers.company.pl_PL import Provider as PlPlCompanyProvider
 from faker.providers.company.pl_PL import company_vat_checksum, local_regon_checksum, regon_checksum
@@ -465,3 +466,13 @@ class TestElGr:
             suffix = faker.company_suffix()
             assert isinstance(suffix, str)
             assert suffix in ElGrCompanyProvider.company_suffixes
+
+
+class TestNlBe:
+    """Test nl_BE company provider methods"""
+
+    def test_company_suffix(self, faker, num_samples):
+        for _ in range(num_samples):
+            suffix = faker.company_suffix()
+            assert isinstance(suffix, str)
+            assert suffix in NlBeCompanyProvider.company_suffixes
diff --git a/tests/providers/test_lorem.py b/tests/providers/test_lorem.py
index 0ea37933..40761a27 100644
--- a/tests/providers/test_lorem.py
+++ b/tests/providers/test_lorem.py
@@ -9,6 +9,7 @@ from faker.providers.lorem.de_AT import Provider as DeAtLoremProvider
 from faker.providers.lorem.de_DE import Provider as DeDeLoremProvider
 from faker.providers.lorem.en_US import Provider as EnUsLoremProvider
 from faker.providers.lorem.fa_IR import Provider as FaIrLoremProvider
+from faker.providers.lorem.nl_BE import Provider as NlBeLoremProvider
 
 
 class TestLoremProvider:
@@ -572,3 +573,75 @@ class TestDeAt:
         for _ in range(num_samples):
             words = faker.words(num_words)
             assert all(isinstance(word, str) and word in DeAtLoremProvider.word_list for word in words)
+
+
+class TestNlBe:
+    """Test ```nl_BE``` lorem provider
+
+    Copied from the TestDeDe class, but with the word_list from the NlBeLoremProvider.
+    """
+
+    word_list = [word.lower() for word in NlBeLoremProvider.word_list]
+
+    def test_paragraph(self, faker, num_samples):
+        num_sentences = 10
+        for _ in range(num_samples):
+            paragraph = faker.paragraph(nb_sentences=num_sentences)
+            assert isinstance(paragraph, str)
+            words = paragraph.replace(".", "").split()
+            assert all(word.lower() in self.word_list for word in words)
+
+    def test_paragraphs(self, faker, num_samples):
+        num_paragraphs = 5
+        for _ in range(num_samples):
+            paragraphs = faker.paragraphs(nb=num_paragraphs)
+            for paragraph in paragraphs:
+                assert isinstance(paragraph, str)
+                words = paragraph.replace(".", "").split()
+                assert all(word.lower() in self.word_list for word in words)
+
+    def test_sentence(self, faker, num_samples):
+        num_words = 10
+        for _ in range(num_samples):
+            sentence = faker.sentence(nb_words=num_words)
+            assert isinstance(sentence, str)
+            words = sentence.replace(".", "").split()
+            assert all(word.lower() in self.word_list for word in words)
+
+    def test_sentences(self, faker, num_samples):
+        num_sentences = 5
+        for _ in range(num_samples):
+            sentences = faker.sentences(nb=num_sentences)
+            for sentence in sentences:
+                assert isinstance(sentence, str)
+                words = sentence.replace(".", "").split()
+                assert all(word.lower() in self.word_list for word in words)
+
+    def test_text(self, faker, num_samples):
+        num_chars = 25
+        for _ in range(num_samples):
+            text = faker.text(max_nb_chars=num_chars)
+            assert isinstance(text, str)
+            words = re.sub(r"[.\n]+", " ", text).split()
+            assert all(word.lower() in self.word_list for word in words)
+
+    def test_texts(self, faker, num_samples):
+        num_texts = 5
+        num_chars = 25
+        for _ in range(num_samples):
+            texts = faker.texts(max_nb_chars=num_chars, nb_texts=num_texts)
+            for text in texts:
+                assert isinstance(text, str)
+                words = re.sub(r"[.\n]+", " ", text).split()
+                assert all(word.lower() in self.word_list for word in words)
+
+    def test_word(self, faker, num_samples):
+        for _ in range(num_samples):
+            word = faker.word()
+            assert isinstance(word, str) and word in NlBeLoremProvider.word_list
+
+    def test_words(self, faker, num_samples):
+        num_words = 5
+        for _ in range(num_samples):
+            words = faker.words(num_words)
+            assert all(isinstance(word, str) and word in NlBeLoremProvider.word_list for word in words)
diff --git a/tests/providers/test_sbn.py b/tests/providers/test_sbn.py
new file mode 100644
index 00000000..9048b649
--- /dev/null
+++ b/tests/providers/test_sbn.py
@@ -0,0 +1,62 @@
+import pytest
+
+from faker.providers.sbn import SBN9
+from faker.providers.sbn.en_US import Provider as SBNProvider
+from faker.providers.sbn.rules import RegistrantRule
+
+
+class TestISBN9:
+    def test_check_digit_is_correct(self):
+        sbn = SBN9(registrant="340", publication="01381")
+        assert sbn.check_digit == "X"
+        sbn = SBN9(registrant="06", publication="230125")
+        assert sbn.check_digit == "2"
+        sbn = SBN9(registrant="10103", publication="202")
+        assert sbn.check_digit == "3"
+
+    def test_format_length(self):
+        sbn = SBN9(registrant="4516", publication="7331")
+        assert len(sbn.format()) == 9
+        sbn = SBN9(registrant="451", publication="10036")
+        assert len(sbn.format()) == 9
+
+
+class TestProvider:
+    prov = SBNProvider(None)
+
+    def test_reg_pub_separation(self):
+        r1 = RegistrantRule("0000000", "0000001", 1)
+        r2 = RegistrantRule("0000002", "0000003", 2)
+        assert self.prov._registrant_publication("00000000", [r1, r2]) == (
+            "0",
+            "0000000",
+        )
+        assert self.prov._registrant_publication("00000010", [r1, r2]) == (
+            "0",
+            "0000010",
+        )
+        assert self.prov._registrant_publication("00000019", [r1, r2]) == (
+            "0",
+            "0000019",
+        )
+        assert self.prov._registrant_publication("00000020", [r1, r2]) == (
+            "00",
+            "000020",
+        )
+        assert self.prov._registrant_publication("00000030", [r1, r2]) == (
+            "00",
+            "000030",
+        )
+        assert self.prov._registrant_publication("00000031", [r1, r2]) == (
+            "00",
+            "000031",
+        )
+        assert self.prov._registrant_publication("00000039", [r1, r2]) == (
+            "00",
+            "000039",
+        )
+
+    def test_rule_not_found(self):
+        with pytest.raises(Exception):
+            r = RegistrantRule("0000000", "0000001", 1)
+            self.prov._registrant_publication("0000002", [r])
diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py
index cd3613d9..c07b9081 100644
--- a/tests/utils/test_utils.py
+++ b/tests/utils/test_utils.py
@@ -91,6 +91,7 @@ class UtilsTestCase(unittest.TestCase):
                     "faker.providers.phone_number",
                     "faker.providers.profile",
                     "faker.providers.python",
+                    "faker.providers.sbn",
                     "faker.providers.ssn",
                     "faker.providers.user_agent",
                 ],