From cc97ce5c16214bbd97885a3860d9b581f08a7c99 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:15:33 +0200 Subject: [PATCH 001/135] Improve Check of new value for fallbackRegionCode --- .../phonenumbernormalizer/PhoneNumberNormalizerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java b/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java index 3748e14..4cafef0 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java @@ -45,7 +45,7 @@ public class PhoneNumberNormalizerImpl implements PhoneNumberNormalizer { @Override public void setFallbackRegionCode(String fallBackRegionCode) { - if (PhoneLibWrapper.getCountryCodeForRegion(fallBackRegionCode) > 0) { + if (fallBackRegionCode != null && !fallBackRegionCode.isEmpty() && PhoneLibWrapper.getCountryCodeForRegion(fallBackRegionCode) > 0) { this.fallbackRegionCode = fallBackRegionCode; } else { this.fallbackRegionCode = null; //invalid region code! From 8a1c813eafb77dc1fdee347ab01fa70e5c816f28 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:05 +0200 Subject: [PATCH 002/135] Split Up Test and check isPossibleNumberWithReason against invalid German NDC - currently up to 03423. --- .../PhoneNumberNormalizerImplTest.groovy | 7 + .../IsPossibleNumberWithReasonTest.groovy | 1045 +++++++++++++++++ .../NormalizationTest.groovy} | 18 +- 3 files changed, 1065 insertions(+), 5 deletions(-) create mode 100644 src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy rename src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/{PhoneNumberUtilTest.groovy => PhoneNumberUtil/NormalizationTest.groovy} (86%) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy index 67514d3..7fdf84b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy @@ -19,6 +19,8 @@ import de.telekom.phonenumbernormalizer.dto.DeviceContext import de.telekom.phonenumbernormalizer.dto.DeviceContextDto import de.telekom.phonenumbernormalizer.dto.DeviceContextLineType import de.telekom.phonenumbernormalizer.numberplans.PhoneLibWrapper +import org.slf4j.Logger +import org.slf4j.LoggerFactory import spock.lang.Specification @@ -87,6 +89,10 @@ class PhoneNumberNormalizerImplTest extends Specification { "0176 3 0 6 9 6544" | "DE" | "+4917630696544" "0203556677" | "DE" | "+49203556677" "203556677" | "DE" | "203556677" + "55" | "DE" | "55" + "556" | "DE" | "556" + "5566" | "DE" | "5566" + "55667" | "DE" | "55667" "556677" | "DE" | "556677" "5566778" | "DE" | "5566778" "55667789" | "DE" | "55667789" @@ -201,6 +207,7 @@ class PhoneNumberNormalizerImplTest extends Specification { "116000" | "49" | "203" | "116000" "1160001" | "49" | "203" | "+492031160001" //New Logic, inside german fixed-line non short numbers + "55" | "49" | "203" | "+4920355" "556" | "49" | "203" | "+49203556" "5566" | "49" | "203" | "+492035566" "55667" | "49" | "203" | "+4920355667" diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy new file mode 100644 index 0000000..76f15d2 --- /dev/null +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -0,0 +1,1045 @@ +/* + * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil + +import com.google.i18n.phonenumbers.PhoneNumberUtil +import spock.lang.Specification + +import java.util.logging.Logger + + +// Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 +// NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf +// Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html + +class IsPossibleNumberWithReasonTest extends Specification { + + PhoneNumberUtil phoneUtil + + Logger logger = Logger.getLogger("") + + boolean LOGONLYUNEXPECTED = true + + def "setup"() { + this.phoneUtil = PhoneNumberUtil.getInstance() + System.setProperty("java.util.logging.SimpleFormatter.format", + "%4\$-7s: %5\$s %n") + } + + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("isPossibleNumberWithReason is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("isPossibleNumberWithReason is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed isPossibleNumberWithReason for Emergency short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short code for Police (110) is not dial-able internationally nor does it has additional numbers + "110" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 110 + // short code for emergency (112) is not dial-able internationally nor does it has additional numbers + "112" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 112 + } + + def "check if original lib fixed isPossibleNumberWithReason for German Government short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 155 is Public Service Number for German administration, it is internationally reachable only from foreign countries + "115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0115" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition from within Germany + "+49115" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable, if used on +49110 & +49112 + see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/115/115_Nummernplan_konsolidiert.pdf?__blob=publicationFile&v=1 at chapter 2.3 + "+49115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | true // see https://www.115.de/SharedDocs/Nachrichten/DE/2018/115_aus_dem_ausland_erreichbar.html + // 155 is supporting NDC to reach specific local government hotline: https://www.geoportal.de/Info/tk_05-erreichbarkeit-der-115 + "0203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // TODO: Need to be checked what is correct here + "+49203115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + // 155 does not have additional digits + "115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0115 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49115 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49115 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 115555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 115 + } + + + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 137 is masstraffic 10 digits + "0137 000 0000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 00000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0137/0137_Nummernplan.pdf?__blob=publicationFile&v=4 + // within each zone, there are only a few ranges assigned: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/belegteRNB/0137MABEZBelegteRNB_Basepage.html?nn=326370 + // Zone 1 is valid, but only with exactly 10 digits + "0137 100 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 100 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 100 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 2 is valid, but only with exactly 10 digits + "0137 200 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 200 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 200 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 3 is valid, but only with exactly 10 digits + "0137 300 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 300 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 300 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 4 is valid, but only with exactly 10 digits + "0137 400 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 400 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 400 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 5 is valid, but only with exactly 10 digits + "0137 500 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 500 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 500 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 6 is valid, but only with exactly 10 digits + "0137 600 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 600 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 600 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 7 is valid, but only with exactly 10 digits + "0137 700 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 700 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 700 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 8 is valid, but only with exactly 10 digits + "0137 800 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 800 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 800 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 9 is valid, but only with exactly 10 digits + "0137 900 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 900 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 900 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + + } + + + def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 + // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // end of 116 + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short numbers which are reached internationally are also registered as NDC + // TODO: 010 is operator selection see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/010/010xy_node.html ... will be canceled 31.12.2024 + "010 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0110 is checked in Emergency short codes see above + // --- + "0111 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0112 is checked in Emergency short codes see above + // --- + "0113 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0114 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0115 is checked in German Government short codes see above + // --- + // --- + // 0116 is checked in EU social short codes see above + // --- + "0117 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO: 118 is cal assistance service see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/118xy/start.html + "0118 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + "0119 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "012 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0123 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0131 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0132 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0137 is checked in Mass Traffic see above + // --- + "0138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "014 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0142 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0144 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0146 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO: 015, 016, 017 are mobile see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // TODO: 016x is "Funkruf": see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Funkruf/start.html + // TODO: 018 is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // TODO: 0181 is international VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html + // TODO: 019xyz Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // TODO: 019x is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + + // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html + // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html + // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html + // TODO: 09009 - Dialer: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html + // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html + + + // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 + + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. + "0200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0201 is Essen + // 0202 is Wuppertal + // 0203 is Duisburg + "02040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02041 is Bottrop + "02042 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02043 is Gladbeck + "02044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02051 till 02054 are in use + "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02056 is Heiligenhausen + "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02058 is Wülfrath + "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02064 till 02066 is in use + "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0208 & 0209 is in use + "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02102 till 02104 is in use + "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02131 till 02133 is in use + "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02137 is Neuss-Norf + "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02156 till 02159 is in use + "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02161 till 02166 is in use + "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02171 is Leverkusen-Opladen + "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02173 till 02175 is in use + "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02181 till 02183 is in use + "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02191 till 02193 is in use + "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02195 till 02196 is in use + "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02202 till 02208 is in use + "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0221 is Köln + "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02222 till 02228 is in use + "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02232 till 02238 is in use + "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02241 till 02248 is in use + "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02251 till 02257 is in use + "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02261 till 02269 is in use + "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02271 till 02275 is in use + "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0228 is Bonn + "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02291 till 02297 is in use + "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02323 till 02325 is in use + "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02327 is Bochum-Wattenscheid + "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02330 till 02339 is in use + // 0234 is Bochum + "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02351 till 02355 is in use + "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02371 till 02375 is in use + "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02377 till 02379 is in use + "02380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02381 till 02385 is in use + "02386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02387 till 02389 is in use + "02390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02391 till 02395 is in use + "02396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02401 till 02409 is in use + // 0241 is Aachen + "02420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02421 till 02429 is in use + "02430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02431 till 02436 is in use + "02437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02440 till 02441 is in use + "02442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02443 till 02449 is in use + "02450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02451 till 02456 is in use + "02457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02461 till 02465 is in use + "02466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02471 till 02474 is in use + "02475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02482 is Hellenthal + "02483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02484 till 02486 is in use + "02487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02501 till 02502 is in use + "02503 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02504 till 02509 is in use + // 0251 is Münster + // 02520 till 02529 is in use + "02530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02532 till 02536 is in use + "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02538 is Drensteinfurt-Rinkerode + "02539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02541 till 02543 is in use + "02544 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02545 till 02548 is in use + "02549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02551 till 02558 is in use + "02559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02561 till 02568 is in use + "02569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02571 till 02575 is in use + "02576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02581 till 02588 is in use + "02589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02590 till 02599 is in use + "02600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02601 till 02608 is in use + "02609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0261 is Koblenz am Rhein + // 02620 till 02628 is in use + "02629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02630 till 02639 is in use + "02640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02641 till 02647 is in use + "02648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02651 till 02657 is in use + "02658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02661 till 02664 is in use + "02665 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02666 till 02667 is in use + "02668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02671 till 02678 is in use + "02679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02680 till 02689 is in use + "02690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02691 till 02697 is in use + "02698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0271 is Siegen + "02720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02721 till 02725 is in use + "02726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02731 till 02739 is in use + "02740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02741 till 02745 is in use + "02746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02747 is Molzhain + "02748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02750 till 02755 is in use + "02756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02758 till 02759 is in use + "02760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02761 till 02764 is in use + "02765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02770 till 02779 is in use + "02780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02781 till 02784 is in use + "02785 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02793 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02796 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02797 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02801 till 02804 is in use + "02805 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0281 is Wesel + "02820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02821 till 02828 is in use + "02829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02831 till 02839 is in use + "02840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02841 till 02845 is in use + "02846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02850 till 02853 is in use + "02854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02855 till 02859 is in use + "02860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02861 till 02867 is in use + "02868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02871 till 02874 is in use + "02875 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02902 till 02905 is in use + "02906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0291 is Meschede + "02920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02921 till 02925 is in use + "02926 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02927 till 02928 is in use + "02929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02931 till 02935 is in use + "02936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02937 till 02938 is in use + "02939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02941 till 02945 is in use + "02946 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02947 till 02948 is in use + "02949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02951 till 02955 is in use + "02956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02957 till 02958 is in use + "02959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02961 till 02964 is in use + "02965 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02966 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02971 till 02975 is in use + "02976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02977 is Schmallenberg-Bödefeld + "02978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02981 till 02985 is in use + "02986 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02991 till 02994 is in use + "02995 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02996 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02997 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 030 is Berlin + // 0310 is National Test for length 3 -> TODO: OWN Test + // 0311 is National Test for length 3 -> TODO: OWN Test + "0312 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0313 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0314 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0315 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0316 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0317 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0318 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0319 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 032 is non geographical 11 till 13 length -> TODO: OWN Test + "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03301 till 03304 is in use + "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033051 till 033056 is in use + "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03306 till 03307 is in use + // 033080 is Marienthal Kreis Oberhavel + "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033082 till 033089 is in use + "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033093 till 033094 is in use + "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0331 is Potsdam + // 033200 till 033209 is in use + // 03321 is Nauen Brandenburg + // 03322 is Falkensee + // 033230 till 033235 is in use + "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033237 till 033239 is in use + "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03327 till 03329 is in use + "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03331 till 03332 is in use + "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033331 till 033338 is in use + "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03334 till 03335 is in use + "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033361 till 033369 is in use + // 03337 till 03338 is in use + "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033393 till 033398 is in use + "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03341 till 03342 is in use + "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033432 till 033439 is in use + // 03344 is Bad Freienwalde + "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033451 till 033452 is in use + "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033454 is Wölsickendorf/Wollenberg + "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033456 till 033458 is in use + "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03346 is Seelow + // 033470 is Lietzen + "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033472 till 033479 is in use + // 0335 is Frankfurt (Oder) + "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033601 till 033609 is in use + // 03361 till 03362 is in use + "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033631 till 033638 is in use + "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03364 is Eisenhüttenstadt + "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033652 till 033657 is in use + "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03366 is Beeskow + "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033671 till 033679 is in use + "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033701 till 033704 is in use + "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033708 is Rangsdorf + "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03371 till 03372 is in use + "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033731 till 033734 is in use + "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033741 till 033748 is in use + "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03375 is Königs Wusterhausen + // 33760 is Münchehofe Kreis Dahme-Spreewald + "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033762 till 033769 is in use + // 03377 till 03379 is in use + "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03381 till 03382 is in use + // 033830 till 033839 is in use + "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033841 is Belzig + "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033843 till 033849 is in use + // 03385 till 03386 is in use + // 033870 is Zollchow bei Rathenow + "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033872 till 033878 is in use + "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03391 is Neuruppin + // 033920 till 033929 is in use + "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033931 till 033933 is in use + "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03394 till 03395 is in use + "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033962 till 033969 is in use + // 033970 till 033979 is in use + "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033981 till 033984 is in use + "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033986 is Falkenhagen Kreis Prignitz + "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033989 is Sadenbeck + "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0340 till 0341 is in use + "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034202 till 034208 is in use + "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03421 is Torgau + "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034221 till 034224 is in use + "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03423 is Eilenburg + + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValidNumber: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + if (result != expectedResult) { + if (expectingFail) { + logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } else { + logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("!!! isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + + where: + + number | regionCode | expectedResult | expectingFail + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just + "02040 556677" | "DE" | false | true + // 02041 is Bottrop + "02042 556677" | "DE" | false | true + // 02043 is Gladbeck + "02044 556677" | "DE" | false | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | false | true + /* + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02051 till 02054 are in use + "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02056 is Heiligenhausen + "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02058 is Wülfrath + "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02064 till 02066 is in use + "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0208 & 0209 is in use + "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02102 till 02104 is in use + "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02131 till 02133 is in use + "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02137 is Neuss-Norf + "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02156 till 02159 is in use + "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02161 till 02166 is in use + "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02171 is Leverkusen-Opladen + "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02173 till 02175 is in use + "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02181 till 02183 is in use + "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02191 till 02193 is in use + "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02195 till 02196 is in use + "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02202 till 02208 is in use + "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0221 is Köln + "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02222 till 02228 is in use + "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02232 till 02238 is in use + "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02241 till 02248 is in use + "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02251 till 02257 is in use + "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02261 till 02269 is in use + "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02271 till 02275 is in use + "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0228 is Bonn + "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02291 till 02297 is in use + "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02323 till 02325 is in use + "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02327 is Bochum-Wattenscheid + "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02330 till 02339 is in use + // 0234 is Bochum + "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02351 till 02355 is in use + "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02371 till 02375 is in use + "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02377 till 02379 is in use + */ + } + + +} \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy similarity index 86% rename from src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy rename to src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index a92ea97..d8aa600 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.telekom.phonenumbernormalizer.extern.libphonenumber +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification import java.util.logging.Logger -class PhoneNumberUtilTest extends Specification { +class NormalizationTest extends Specification { PhoneNumberUtil phoneUtil @@ -65,6 +65,10 @@ class PhoneNumberUtilTest extends Specification { "0176 3 0 6 9 6544" | "DE" | "+4917630696544" | false "0203556677" | "DE" | "+49203556677" | false "203556677" | "DE" | "203556677" | true + "55" | "DE" | "55" | true + "556" | "DE" | "556" | true + "5566" | "DE" | "5566" | true + "55667" | "DE" | "55667" | true "556677" | "DE" | "556677" | true "5566778" | "DE" | "5566778" | true "55667789" | "DE" | "55667789" | true @@ -83,10 +87,10 @@ class PhoneNumberUtilTest extends Specification { when: "get number isPossibleNumberWithReason: $number" - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + def result1 = phoneUtil.isPossibleNumberWithReason(phoneNumber) then: "is number expected: $expectedResult" - if (result != expectedResult) { + if (result1 != expectedResult) { if (expectingFail) { logger.info("PhoneLib is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } else { @@ -111,6 +115,10 @@ class PhoneNumberUtilTest extends Specification { "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true @@ -122,5 +130,5 @@ class PhoneNumberUtilTest extends Specification { "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false } -} +} \ No newline at end of file From fdeca7c9d0a64207aac5ae780c742bc030acaa68 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:58 +0200 Subject: [PATCH 003/135] Prepare new ValidationResult Enum for upcomming wrapper method. --- .../PhoneNumberValidationResult.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java new file mode 100644 index 0000000..a72ece6 --- /dev/null +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -0,0 +1,68 @@ +package de.telekom.phonenumbernormalizer.numberplans; + +import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult; + +/** + * Wrapper around the PhoneLib enum {@link ValidationResult} from Google + *

+ * When the PhoneLib is validating a phone number it returns a value of the enum {@link ValidationResult}. + *

+ * It differentiate two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} for any negative case, which is not explicitly covered by any of the other four values. + * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focus on a specific number part - the Country Code. + *

+ * Validation of other parts of the number are not covered by an own value. So this enum wrapper is introducing {@link PhoneNumberValidationResult#INVALID_NATIONAL_ACCESS_CODE} for number plans with a national access code. + *

+ * @see ValidationResult + */ + + +// TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 + +public enum PhoneNumberValidationResult { + + /** The number length matches that of valid numbers for this region. */ + IS_POSSIBLE(ValidationResult.IS_POSSIBLE), + /** + * The number length matches that of local numbers for this region only (i.e. numbers that may + * be able to be dialled within an area, but do not have all the information to be dialled from + * anywhere inside or outside the country). + */ + IS_POSSIBLE_LOCAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** The number has an invalid country calling code. */ + INVALID_COUNTRY_CODE(ValidationResult.INVALID_COUNTRY_CODE), + /** The number has an invalid national access code. */ + INVALID_NATIONAL_ACCESS_CODE(ValidationResult.INVALID_LENGTH), + /** The number is shorter than all valid numbers for this region. */ + TOO_SHORT(ValidationResult.TOO_SHORT), + /** + * The number is longer than the shortest valid numbers for this region, shorter than the + * longest valid numbers for this region, and does not itself have a number length that matches + * valid numbers for this region. This can also be returned in the case where + * isPossibleNumberForTypeWithReason was called, and there are no numbers of this type at all + * for this region. + */ + INVALID_LENGTH(ValidationResult.INVALID_LENGTH), + /** The number is longer than all valid numbers for this region. */ + TOO_LONG(ValidationResult.TOO_LONG); + /** + * storing the corresponding enum value of {@link ValidationResult} + */ + private final ValidationResult phoneLibResult; + + /** + * Initializing a PhoneNumberValidationResult enum value with a corresponding {@link ValidationResult} enum value + * @param phoneLibResult corresponding {@link ValidationResult} enum value + */ + PhoneNumberValidationResult(ValidationResult phoneLibResult) { + this.phoneLibResult = phoneLibResult; + } + + /** + * Returns best matching corresponding {@link ValidationResult} enum value for an instance of a {@link PhoneNumberValidationResult} enum value + * @return corresponding {@link ValidationResult} enum value + */ + public ValidationResult getPhoneLibValidationResult() { + return phoneLibResult; + } + +} From 3ec370ede6283d3caf9c095c22d0a08a258728b4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:15:33 +0200 Subject: [PATCH 004/135] Improve Check of new value for fallbackRegionCode --- .../phonenumbernormalizer/PhoneNumberNormalizerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java b/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java index 3748e14..4cafef0 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java @@ -45,7 +45,7 @@ public class PhoneNumberNormalizerImpl implements PhoneNumberNormalizer { @Override public void setFallbackRegionCode(String fallBackRegionCode) { - if (PhoneLibWrapper.getCountryCodeForRegion(fallBackRegionCode) > 0) { + if (fallBackRegionCode != null && !fallBackRegionCode.isEmpty() && PhoneLibWrapper.getCountryCodeForRegion(fallBackRegionCode) > 0) { this.fallbackRegionCode = fallBackRegionCode; } else { this.fallbackRegionCode = null; //invalid region code! From a933999eb341367c9f9923c7bf372f5af0224b08 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:05 +0200 Subject: [PATCH 005/135] Split Up Test and check isPossibleNumberWithReason against invalid German NDC - currently up to 03423. --- .../PhoneNumberNormalizerImplTest.groovy | 7 + .../IsPossibleNumberWithReasonTest.groovy | 1045 +++++++++++++++++ .../NormalizationTest.groovy} | 18 +- 3 files changed, 1065 insertions(+), 5 deletions(-) create mode 100644 src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy rename src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/{PhoneNumberUtilTest.groovy => PhoneNumberUtil/NormalizationTest.groovy} (86%) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy index 67514d3..7fdf84b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy @@ -19,6 +19,8 @@ import de.telekom.phonenumbernormalizer.dto.DeviceContext import de.telekom.phonenumbernormalizer.dto.DeviceContextDto import de.telekom.phonenumbernormalizer.dto.DeviceContextLineType import de.telekom.phonenumbernormalizer.numberplans.PhoneLibWrapper +import org.slf4j.Logger +import org.slf4j.LoggerFactory import spock.lang.Specification @@ -87,6 +89,10 @@ class PhoneNumberNormalizerImplTest extends Specification { "0176 3 0 6 9 6544" | "DE" | "+4917630696544" "0203556677" | "DE" | "+49203556677" "203556677" | "DE" | "203556677" + "55" | "DE" | "55" + "556" | "DE" | "556" + "5566" | "DE" | "5566" + "55667" | "DE" | "55667" "556677" | "DE" | "556677" "5566778" | "DE" | "5566778" "55667789" | "DE" | "55667789" @@ -201,6 +207,7 @@ class PhoneNumberNormalizerImplTest extends Specification { "116000" | "49" | "203" | "116000" "1160001" | "49" | "203" | "+492031160001" //New Logic, inside german fixed-line non short numbers + "55" | "49" | "203" | "+4920355" "556" | "49" | "203" | "+49203556" "5566" | "49" | "203" | "+492035566" "55667" | "49" | "203" | "+4920355667" diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy new file mode 100644 index 0000000..76f15d2 --- /dev/null +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -0,0 +1,1045 @@ +/* + * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil + +import com.google.i18n.phonenumbers.PhoneNumberUtil +import spock.lang.Specification + +import java.util.logging.Logger + + +// Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 +// NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf +// Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html + +class IsPossibleNumberWithReasonTest extends Specification { + + PhoneNumberUtil phoneUtil + + Logger logger = Logger.getLogger("") + + boolean LOGONLYUNEXPECTED = true + + def "setup"() { + this.phoneUtil = PhoneNumberUtil.getInstance() + System.setProperty("java.util.logging.SimpleFormatter.format", + "%4\$-7s: %5\$s %n") + } + + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("isPossibleNumberWithReason is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("isPossibleNumberWithReason is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed isPossibleNumberWithReason for Emergency short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short code for Police (110) is not dial-able internationally nor does it has additional numbers + "110" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 110 + // short code for emergency (112) is not dial-able internationally nor does it has additional numbers + "112" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 112 + } + + def "check if original lib fixed isPossibleNumberWithReason for German Government short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 155 is Public Service Number for German administration, it is internationally reachable only from foreign countries + "115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0115" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition from within Germany + "+49115" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable, if used on +49110 & +49112 + see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/115/115_Nummernplan_konsolidiert.pdf?__blob=publicationFile&v=1 at chapter 2.3 + "+49115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | true // see https://www.115.de/SharedDocs/Nachrichten/DE/2018/115_aus_dem_ausland_erreichbar.html + // 155 is supporting NDC to reach specific local government hotline: https://www.geoportal.de/Info/tk_05-erreichbarkeit-der-115 + "0203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // TODO: Need to be checked what is correct here + "+49203115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + // 155 does not have additional digits + "115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0115 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49115 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49115 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 115555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 115 + } + + + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 137 is masstraffic 10 digits + "0137 000 0000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 00000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0137/0137_Nummernplan.pdf?__blob=publicationFile&v=4 + // within each zone, there are only a few ranges assigned: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/belegteRNB/0137MABEZBelegteRNB_Basepage.html?nn=326370 + // Zone 1 is valid, but only with exactly 10 digits + "0137 100 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 100 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 100 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 2 is valid, but only with exactly 10 digits + "0137 200 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 200 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 200 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 3 is valid, but only with exactly 10 digits + "0137 300 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 300 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 300 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 4 is valid, but only with exactly 10 digits + "0137 400 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 400 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 400 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 5 is valid, but only with exactly 10 digits + "0137 500 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 500 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 500 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 6 is valid, but only with exactly 10 digits + "0137 600 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 600 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 600 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 7 is valid, but only with exactly 10 digits + "0137 700 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 700 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 700 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 8 is valid, but only with exactly 10 digits + "0137 800 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 800 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 800 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 9 is valid, but only with exactly 10 digits + "0137 900 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 900 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 900 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + + } + + + def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 + // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // end of 116 + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short numbers which are reached internationally are also registered as NDC + // TODO: 010 is operator selection see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/010/010xy_node.html ... will be canceled 31.12.2024 + "010 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0110 is checked in Emergency short codes see above + // --- + "0111 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0112 is checked in Emergency short codes see above + // --- + "0113 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0114 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0115 is checked in German Government short codes see above + // --- + // --- + // 0116 is checked in EU social short codes see above + // --- + "0117 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO: 118 is cal assistance service see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/118xy/start.html + "0118 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + "0119 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "012 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0123 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0131 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0132 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0137 is checked in Mass Traffic see above + // --- + "0138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "014 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0142 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0144 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0146 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO: 015, 016, 017 are mobile see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // TODO: 016x is "Funkruf": see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Funkruf/start.html + // TODO: 018 is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // TODO: 0181 is international VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html + // TODO: 019xyz Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // TODO: 019x is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + + // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html + // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html + // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html + // TODO: 09009 - Dialer: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html + // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html + + + // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 + + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. + "0200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0201 is Essen + // 0202 is Wuppertal + // 0203 is Duisburg + "02040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02041 is Bottrop + "02042 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02043 is Gladbeck + "02044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02051 till 02054 are in use + "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02056 is Heiligenhausen + "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02058 is Wülfrath + "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02064 till 02066 is in use + "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0208 & 0209 is in use + "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02102 till 02104 is in use + "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02131 till 02133 is in use + "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02137 is Neuss-Norf + "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02156 till 02159 is in use + "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02161 till 02166 is in use + "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02171 is Leverkusen-Opladen + "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02173 till 02175 is in use + "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02181 till 02183 is in use + "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02191 till 02193 is in use + "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02195 till 02196 is in use + "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02202 till 02208 is in use + "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0221 is Köln + "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02222 till 02228 is in use + "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02232 till 02238 is in use + "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02241 till 02248 is in use + "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02251 till 02257 is in use + "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02261 till 02269 is in use + "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02271 till 02275 is in use + "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0228 is Bonn + "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02291 till 02297 is in use + "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02323 till 02325 is in use + "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02327 is Bochum-Wattenscheid + "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02330 till 02339 is in use + // 0234 is Bochum + "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02351 till 02355 is in use + "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02371 till 02375 is in use + "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02377 till 02379 is in use + "02380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02381 till 02385 is in use + "02386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02387 till 02389 is in use + "02390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02391 till 02395 is in use + "02396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02401 till 02409 is in use + // 0241 is Aachen + "02420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02421 till 02429 is in use + "02430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02431 till 02436 is in use + "02437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02440 till 02441 is in use + "02442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02443 till 02449 is in use + "02450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02451 till 02456 is in use + "02457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02461 till 02465 is in use + "02466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02471 till 02474 is in use + "02475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02482 is Hellenthal + "02483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02484 till 02486 is in use + "02487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02501 till 02502 is in use + "02503 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02504 till 02509 is in use + // 0251 is Münster + // 02520 till 02529 is in use + "02530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02532 till 02536 is in use + "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02538 is Drensteinfurt-Rinkerode + "02539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02541 till 02543 is in use + "02544 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02545 till 02548 is in use + "02549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02551 till 02558 is in use + "02559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02561 till 02568 is in use + "02569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02571 till 02575 is in use + "02576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02581 till 02588 is in use + "02589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02590 till 02599 is in use + "02600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02601 till 02608 is in use + "02609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0261 is Koblenz am Rhein + // 02620 till 02628 is in use + "02629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02630 till 02639 is in use + "02640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02641 till 02647 is in use + "02648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02651 till 02657 is in use + "02658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02661 till 02664 is in use + "02665 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02666 till 02667 is in use + "02668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02671 till 02678 is in use + "02679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02680 till 02689 is in use + "02690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02691 till 02697 is in use + "02698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0271 is Siegen + "02720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02721 till 02725 is in use + "02726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02731 till 02739 is in use + "02740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02741 till 02745 is in use + "02746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02747 is Molzhain + "02748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02750 till 02755 is in use + "02756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02758 till 02759 is in use + "02760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02761 till 02764 is in use + "02765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02770 till 02779 is in use + "02780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02781 till 02784 is in use + "02785 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02793 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02796 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02797 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02801 till 02804 is in use + "02805 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0281 is Wesel + "02820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02821 till 02828 is in use + "02829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02831 till 02839 is in use + "02840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02841 till 02845 is in use + "02846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02850 till 02853 is in use + "02854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02855 till 02859 is in use + "02860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02861 till 02867 is in use + "02868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02871 till 02874 is in use + "02875 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02902 till 02905 is in use + "02906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0291 is Meschede + "02920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02921 till 02925 is in use + "02926 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02927 till 02928 is in use + "02929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02931 till 02935 is in use + "02936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02937 till 02938 is in use + "02939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02941 till 02945 is in use + "02946 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02947 till 02948 is in use + "02949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02951 till 02955 is in use + "02956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02957 till 02958 is in use + "02959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02961 till 02964 is in use + "02965 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02966 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02971 till 02975 is in use + "02976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02977 is Schmallenberg-Bödefeld + "02978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02981 till 02985 is in use + "02986 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02991 till 02994 is in use + "02995 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02996 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02997 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 030 is Berlin + // 0310 is National Test for length 3 -> TODO: OWN Test + // 0311 is National Test for length 3 -> TODO: OWN Test + "0312 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0313 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0314 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0315 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0316 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0317 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0318 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0319 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 032 is non geographical 11 till 13 length -> TODO: OWN Test + "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03301 till 03304 is in use + "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033051 till 033056 is in use + "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03306 till 03307 is in use + // 033080 is Marienthal Kreis Oberhavel + "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033082 till 033089 is in use + "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033093 till 033094 is in use + "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0331 is Potsdam + // 033200 till 033209 is in use + // 03321 is Nauen Brandenburg + // 03322 is Falkensee + // 033230 till 033235 is in use + "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033237 till 033239 is in use + "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03327 till 03329 is in use + "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03331 till 03332 is in use + "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033331 till 033338 is in use + "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03334 till 03335 is in use + "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033361 till 033369 is in use + // 03337 till 03338 is in use + "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033393 till 033398 is in use + "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03341 till 03342 is in use + "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033432 till 033439 is in use + // 03344 is Bad Freienwalde + "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033451 till 033452 is in use + "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033454 is Wölsickendorf/Wollenberg + "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033456 till 033458 is in use + "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03346 is Seelow + // 033470 is Lietzen + "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033472 till 033479 is in use + // 0335 is Frankfurt (Oder) + "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033601 till 033609 is in use + // 03361 till 03362 is in use + "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033631 till 033638 is in use + "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03364 is Eisenhüttenstadt + "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033652 till 033657 is in use + "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03366 is Beeskow + "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033671 till 033679 is in use + "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033701 till 033704 is in use + "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033708 is Rangsdorf + "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03371 till 03372 is in use + "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033731 till 033734 is in use + "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033741 till 033748 is in use + "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03375 is Königs Wusterhausen + // 33760 is Münchehofe Kreis Dahme-Spreewald + "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033762 till 033769 is in use + // 03377 till 03379 is in use + "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03381 till 03382 is in use + // 033830 till 033839 is in use + "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033841 is Belzig + "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033843 till 033849 is in use + // 03385 till 03386 is in use + // 033870 is Zollchow bei Rathenow + "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033872 till 033878 is in use + "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03391 is Neuruppin + // 033920 till 033929 is in use + "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033931 till 033933 is in use + "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03394 till 03395 is in use + "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033962 till 033969 is in use + // 033970 till 033979 is in use + "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033981 till 033984 is in use + "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033986 is Falkenhagen Kreis Prignitz + "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033989 is Sadenbeck + "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0340 till 0341 is in use + "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034202 till 034208 is in use + "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03421 is Torgau + "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034221 till 034224 is in use + "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03423 is Eilenburg + + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValidNumber: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + if (result != expectedResult) { + if (expectingFail) { + logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } else { + logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("!!! isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + + where: + + number | regionCode | expectedResult | expectingFail + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just + "02040 556677" | "DE" | false | true + // 02041 is Bottrop + "02042 556677" | "DE" | false | true + // 02043 is Gladbeck + "02044 556677" | "DE" | false | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | false | true + /* + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02051 till 02054 are in use + "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02056 is Heiligenhausen + "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02058 is Wülfrath + "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02064 till 02066 is in use + "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0208 & 0209 is in use + "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02102 till 02104 is in use + "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02131 till 02133 is in use + "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02137 is Neuss-Norf + "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02156 till 02159 is in use + "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02161 till 02166 is in use + "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02171 is Leverkusen-Opladen + "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02173 till 02175 is in use + "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02181 till 02183 is in use + "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02191 till 02193 is in use + "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02195 till 02196 is in use + "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02202 till 02208 is in use + "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0221 is Köln + "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02222 till 02228 is in use + "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02232 till 02238 is in use + "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02241 till 02248 is in use + "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02251 till 02257 is in use + "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02261 till 02269 is in use + "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02271 till 02275 is in use + "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0228 is Bonn + "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02291 till 02297 is in use + "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02323 till 02325 is in use + "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02327 is Bochum-Wattenscheid + "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02330 till 02339 is in use + // 0234 is Bochum + "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02351 till 02355 is in use + "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02371 till 02375 is in use + "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02377 till 02379 is in use + */ + } + + +} \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy similarity index 86% rename from src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy rename to src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index a92ea97..d8aa600 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.telekom.phonenumbernormalizer.extern.libphonenumber +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification import java.util.logging.Logger -class PhoneNumberUtilTest extends Specification { +class NormalizationTest extends Specification { PhoneNumberUtil phoneUtil @@ -65,6 +65,10 @@ class PhoneNumberUtilTest extends Specification { "0176 3 0 6 9 6544" | "DE" | "+4917630696544" | false "0203556677" | "DE" | "+49203556677" | false "203556677" | "DE" | "203556677" | true + "55" | "DE" | "55" | true + "556" | "DE" | "556" | true + "5566" | "DE" | "5566" | true + "55667" | "DE" | "55667" | true "556677" | "DE" | "556677" | true "5566778" | "DE" | "5566778" | true "55667789" | "DE" | "55667789" | true @@ -83,10 +87,10 @@ class PhoneNumberUtilTest extends Specification { when: "get number isPossibleNumberWithReason: $number" - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + def result1 = phoneUtil.isPossibleNumberWithReason(phoneNumber) then: "is number expected: $expectedResult" - if (result != expectedResult) { + if (result1 != expectedResult) { if (expectingFail) { logger.info("PhoneLib is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } else { @@ -111,6 +115,10 @@ class PhoneNumberUtilTest extends Specification { "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true @@ -122,5 +130,5 @@ class PhoneNumberUtilTest extends Specification { "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false } -} +} \ No newline at end of file From 71523985363447c59772937af2a517f75a713c59 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:58 +0200 Subject: [PATCH 006/135] Prepare new ValidationResult Enum for upcomming wrapper method. --- .../PhoneNumberValidationResult.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java new file mode 100644 index 0000000..a72ece6 --- /dev/null +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -0,0 +1,68 @@ +package de.telekom.phonenumbernormalizer.numberplans; + +import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult; + +/** + * Wrapper around the PhoneLib enum {@link ValidationResult} from Google + *

+ * When the PhoneLib is validating a phone number it returns a value of the enum {@link ValidationResult}. + *

+ * It differentiate two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} for any negative case, which is not explicitly covered by any of the other four values. + * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focus on a specific number part - the Country Code. + *

+ * Validation of other parts of the number are not covered by an own value. So this enum wrapper is introducing {@link PhoneNumberValidationResult#INVALID_NATIONAL_ACCESS_CODE} for number plans with a national access code. + *

+ * @see ValidationResult + */ + + +// TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 + +public enum PhoneNumberValidationResult { + + /** The number length matches that of valid numbers for this region. */ + IS_POSSIBLE(ValidationResult.IS_POSSIBLE), + /** + * The number length matches that of local numbers for this region only (i.e. numbers that may + * be able to be dialled within an area, but do not have all the information to be dialled from + * anywhere inside or outside the country). + */ + IS_POSSIBLE_LOCAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** The number has an invalid country calling code. */ + INVALID_COUNTRY_CODE(ValidationResult.INVALID_COUNTRY_CODE), + /** The number has an invalid national access code. */ + INVALID_NATIONAL_ACCESS_CODE(ValidationResult.INVALID_LENGTH), + /** The number is shorter than all valid numbers for this region. */ + TOO_SHORT(ValidationResult.TOO_SHORT), + /** + * The number is longer than the shortest valid numbers for this region, shorter than the + * longest valid numbers for this region, and does not itself have a number length that matches + * valid numbers for this region. This can also be returned in the case where + * isPossibleNumberForTypeWithReason was called, and there are no numbers of this type at all + * for this region. + */ + INVALID_LENGTH(ValidationResult.INVALID_LENGTH), + /** The number is longer than all valid numbers for this region. */ + TOO_LONG(ValidationResult.TOO_LONG); + /** + * storing the corresponding enum value of {@link ValidationResult} + */ + private final ValidationResult phoneLibResult; + + /** + * Initializing a PhoneNumberValidationResult enum value with a corresponding {@link ValidationResult} enum value + * @param phoneLibResult corresponding {@link ValidationResult} enum value + */ + PhoneNumberValidationResult(ValidationResult phoneLibResult) { + this.phoneLibResult = phoneLibResult; + } + + /** + * Returns best matching corresponding {@link ValidationResult} enum value for an instance of a {@link PhoneNumberValidationResult} enum value + * @return corresponding {@link ValidationResult} enum value + */ + public ValidationResult getPhoneLibValidationResult() { + return phoneLibResult; + } + +} From 5650ab77b06ad75dc86eec1d10f407a26797da11 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 13 Oct 2023 13:08:25 +0200 Subject: [PATCH 007/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 03501 --- .../IsPossibleNumberWithReasonTest.groovy | 164 +++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 76f15d2..e4091ad 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -876,7 +876,169 @@ class IsPossibleNumberWithReasonTest extends Specification { "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03423 is Eilenburg - + "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034241 till 034244 is in use + "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03425 is Wurzen + "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034261 till 034263 is in use + "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034291 till 034293 is in use + "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03431 is Döbeln + "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034321 till 034322 is in use + "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034324 till 034325 is in use + "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034327 till 034328 is in use + "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03433 is Borna Stadt + "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034341 till 034348 is in use + "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03435 is Oschatz + "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034361 till 034364 is in use + "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03437 is Grimma + "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034381 till 034386 is in use + "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03441 is Zeitz + "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034422 till 034426 is in use + "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03443 is Weissenfels Sachsen-Anhalt + "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034441 is Hohenmölsen + "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034443 till 034446 is in use + "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03445 is Naumburg Saale + "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034461 till 034467 is in use + "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03447 till 03448 is in use + "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034491 till 034498 is in use + "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0345 is Halle Saale + // 034600 toll 034607 is in use + "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034609 is Salzmünde + // 03461 till 03462 is in use + "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034632 till 034633 is in use + "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034635 till 034639 is in use + // 03464 is Sangerhausen + "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034651 till 034654 is in use + "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034656 is Wallhausen Sachsen-Anhalt + "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034658 till 034659 is in use + // 03466 is Artern Unstrut + "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034671 till 034673 is in use + "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034691 till 034692 is in use + "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03471 is Bernburg Saale + "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034721 till 034722 is in use + "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 3473 is Aschersleben Sachsen-Anhalt + "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034741 till 034743 is in use + "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034745 till 034746 is in use + "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03475 till 03476 is in use + "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034771 till 034776 is in use + "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034779 is Abberode + "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034781 till 034783 is in use + "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034785 is Sandersleben + "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034901 is Roßlau Elbe + "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034903 till 034907 + "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034909 is Aken Elbe + // 03491 till 03494 (yes full 03492x is used, too) is in use + "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034953 till 034956 + "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03496 is Köthen Anhalt + "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034973 is Osternienburg + "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034975 till 034979 is in use + "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03501 is Pirna } From c8ce23d9b86c3733638535775fb5dbb55ea9b61b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 15 Oct 2023 15:42:30 +0200 Subject: [PATCH 008/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 03601 --- .../IsPossibleNumberWithReasonTest.groovy | 170 +++++++++++++++++- 1 file changed, 167 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index e4091ad..5c92fac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1035,10 +1035,174 @@ class IsPossibleNumberWithReasonTest extends Specification { // 034973 is Osternienburg "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034975 till 034979 is in use - "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03501 is Pirna + "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035032 till 035033 is in use + "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03504 is Dippoldiswalde + "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035052 till 035058 + "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0351 is Dresden + // 03520x till 03525 is in use (inclusive complete 03524x) + "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035263 till 035268 + "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03529 till 03529 is in use + "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03531 is Finsterwalde + "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035322 till 035327 + "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035329 is Dollenchen + // 03533 is Elsterwerda + "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035341 till 035343 + "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03535 is Herzberg Elster + "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035361 till 035365 is in use + "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03537 is Jessen Elster + "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035383 till 035389 is in use + "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03541 till 03542 is in use + "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035433 till 035436 is in use + "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035439 is Zinnitz + // 03544 is Luckau Brandenburg + "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035451 till 035456 is in use + "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03546 is Lübben Spreewald + "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035471 till 035478 is in use + "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0355 is Cottbus + // 03560x till 03564 is in use + "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035691 till 035698 is in use + "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03571 is Hoyerswerda + "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035722 till 035728 is in use + "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03573 till 03574 is in use + "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035751 till 035756 is in use + "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03576 is Weisswasser + "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035771 till 035775 is in use + "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03578 is Kamenz + "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035792 till 035793 is in use + "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035795 till 035797 is in use + "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03581 is Görlitz + // 035820 is Zodel + "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035822 till 035823 is in use + "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035825 till 035829 is in use + // 03583 is Zittau + "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035841 till 035844 is in use + "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03585 till 03586 is in use + "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035872 till 035877 is in use + "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03588 is Niesky + "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035891 till 0358595 is in use + "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03591 till 03594 (including total 03593x) is in use + "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035951 till 035955 is in use + "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03596 is Neustadt in Sachsen + "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035971 till 035975 is in use + "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03601 till 03603 (including total 03602x) is in use + "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + } From 31c99f6e25171663862b65b0e54cad69e4957f55 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 15 Oct 2023 16:37:36 +0200 Subject: [PATCH 009/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 037201 --- .../IsPossibleNumberWithReasonTest.groovy | 769 +++++++++++------- 1 file changed, 460 insertions(+), 309 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 5c92fac..a42a7ca 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -721,486 +721,637 @@ class IsPossibleNumberWithReasonTest extends Specification { "0318 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0319 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 032 is non geographical 11 till 13 length -> TODO: OWN Test - "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03301 till 03304 is in use - "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033051 till 033056 is in use - "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03306 till 03307 is in use // 033080 is Marienthal Kreis Oberhavel - "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033082 till 033089 is in use - "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033093 till 033094 is in use - "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0331 is Potsdam // 033200 till 033209 is in use // 03321 is Nauen Brandenburg // 03322 is Falkensee // 033230 till 033235 is in use - "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033237 till 033239 is in use - "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03327 till 03329 is in use - "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03331 till 03332 is in use - "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033331 till 033338 is in use - "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03334 till 03335 is in use - "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033361 till 033369 is in use // 03337 till 03338 is in use - "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033393 till 033398 is in use - "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03341 till 03342 is in use - "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033432 till 033439 is in use // 03344 is Bad Freienwalde - "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033451 till 033452 is in use - "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033454 is Wölsickendorf/Wollenberg - "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033456 till 033458 is in use - "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03346 is Seelow // 033470 is Lietzen - "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033472 till 033479 is in use // 0335 is Frankfurt (Oder) - "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033601 till 033609 is in use // 03361 till 03362 is in use - "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033631 till 033638 is in use - "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03364 is Eisenhüttenstadt - "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033652 till 033657 is in use - "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03366 is Beeskow - "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033671 till 033679 is in use - "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033701 till 033704 is in use - "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033708 is Rangsdorf - "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03371 till 03372 is in use - "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033731 till 033734 is in use - "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033741 till 033748 is in use - "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03375 is Königs Wusterhausen // 33760 is Münchehofe Kreis Dahme-Spreewald - "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033762 till 033769 is in use // 03377 till 03379 is in use - "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03381 till 03382 is in use // 033830 till 033839 is in use - "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033841 is Belzig - "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033843 till 033849 is in use // 03385 till 03386 is in use // 033870 is Zollchow bei Rathenow - "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033872 till 033878 is in use - "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03391 is Neuruppin // 033920 till 033929 is in use - "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033931 till 033933 is in use - "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03394 till 03395 is in use - "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033962 till 033969 is in use // 033970 till 033979 is in use - "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033981 till 033984 is in use - "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033986 is Falkenhagen Kreis Prignitz - "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033989 is Sadenbeck - "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0340 till 0341 is in use - "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034202 till 034208 is in use - "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03421 is Torgau - "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034221 till 034224 is in use - "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03423 is Eilenburg - "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034241 till 034244 is in use - "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03425 is Wurzen - "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034261 till 034263 is in use - "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034291 till 034293 is in use - "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03431 is Döbeln - "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034321 till 034322 is in use - "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034324 till 034325 is in use - "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034327 till 034328 is in use - "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03433 is Borna Stadt - "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034341 till 034348 is in use - "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03435 is Oschatz - "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034361 till 034364 is in use - "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03437 is Grimma - "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034381 till 034386 is in use - "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03441 is Zeitz - "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034422 till 034426 is in use - "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03443 is Weissenfels Sachsen-Anhalt - "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034441 is Hohenmölsen - "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034443 till 034446 is in use - "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03445 is Naumburg Saale - "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034461 till 034467 is in use - "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03447 till 03448 is in use - "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034491 till 034498 is in use - "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0345 is Halle Saale // 034600 toll 034607 is in use - "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034609 is Salzmünde // 03461 till 03462 is in use - "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034632 till 034633 is in use - "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034635 till 034639 is in use // 03464 is Sangerhausen - "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034651 till 034654 is in use - "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034656 is Wallhausen Sachsen-Anhalt - "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034658 till 034659 is in use // 03466 is Artern Unstrut - "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034671 till 034673 is in use - "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034691 till 034692 is in use - "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03471 is Bernburg Saale - "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034721 till 034722 is in use - "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 3473 is Aschersleben Sachsen-Anhalt - "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034741 till 034743 is in use - "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034745 till 034746 is in use - "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03475 till 03476 is in use - "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034771 till 034776 is in use - "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034779 is Abberode - "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034781 till 034783 is in use - "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034785 is Sandersleben - "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034901 is Roßlau Elbe - "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034903 till 034907 - "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034909 is Aken Elbe // 03491 till 03494 (yes full 03492x is used, too) is in use - "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034953 till 034956 - "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03496 is Köthen Anhalt - "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034973 is Osternienburg - "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034975 till 034979 is in use - "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03501 is Pirna - "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035032 till 035033 is in use - "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03504 is Dippoldiswalde - "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035052 till 035058 - "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0351 is Dresden // 03520x till 03525 is in use (inclusive complete 03524x) - "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035263 till 035268 - "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03529 till 03529 is in use - "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03531 is Finsterwalde - "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035322 till 035327 - "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035329 is Dollenchen // 03533 is Elsterwerda - "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035341 till 035343 - "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03535 is Herzberg Elster - "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035361 till 035365 is in use - "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03537 is Jessen Elster - "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035383 till 035389 is in use - "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03541 till 03542 is in use - "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035433 till 035436 is in use - "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035439 is Zinnitz // 03544 is Luckau Brandenburg - "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035451 till 035456 is in use - "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03546 is Lübben Spreewald - "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035471 till 035478 is in use - "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0355 is Cottbus // 03560x till 03564 is in use - "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035691 till 035698 is in use - "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03571 is Hoyerswerda - "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035722 till 035728 is in use - "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03573 till 03574 is in use - "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035751 till 035756 is in use - "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03576 is Weisswasser - "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035771 till 035775 is in use - "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03578 is Kamenz - "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035792 till 035793 is in use - "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035795 till 035797 is in use - "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03581 is Görlitz // 035820 is Zodel - "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035822 till 035823 is in use - "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035825 till 035829 is in use // 03583 is Zittau - "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035841 till 035844 is in use - "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03585 till 03586 is in use - "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035872 till 035877 is in use - "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03588 is Niesky - "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035891 till 0358595 is in use - "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03591 till 03594 (including total 03593x) is in use - "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035951 till 035955 is in use - "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03596 is Neustadt in Sachsen - "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035971 till 035975 is in use - "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03601 till 03603 (including total 03602x) is in use - "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036041 till 036043 is in use + "036044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036045 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03605 till 03606 is in use + "036070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036071 till 036072 is in use + "036073 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036074 till 036077 is in use + "036078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036081 till 036085 is in use + "036086 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036087 is Wüstheuterode + "036088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0361 is Erfurt + // 03620x till 03624 is in use + "036250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036251 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036252 till 036259 is in use + "03626 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03628 till 03629 is in use + "03630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03631 till 03632 is in use + // 036330 till 036338 is in use + "036339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03634 till 03637x is in use + "03638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03641 is Jena + "036420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036421 till 036428 is in use + "036429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03643 till 03644 is in use + // 036450 till 036454 is in use + "036455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036456 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036458 till 036459 is in use + "036460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036461 till 036465 is in use + "036466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03647 is Pößneck + "036480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036481 till 036484 is in use + "036485 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0365 is Gera + "036600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036601 till 036608 is in use + "036609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03661 is Greiz + "036620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036621 till 036626 is in use + "036627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036628 is Zeulenroda + "036629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03663 is Schleiz + // 036640 is Remptendorf + "036641 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036642 till 036649 is in use + "036650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036651 till 036653 is in use + "036654 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036656 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03666 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036691 till 036695 is in use + "036696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036701 till 036705 is in use + "036706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036708 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03671 till 03673x is in use + "036740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036741 till 03644 is in use + "036745 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03675 is Heubisch + "036760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036761 till 036762 is in use + "036763 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036764 is Neuhaus-Schierschnitz + "036765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036766 is SChalkau + "036767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03677 is Ilmenau Thüringen + "036780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036781 till 036785 is in use + "036786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03679 is Suhl + "03680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03681 till 03686 (inlcuding total 03684x) is in use + // 036870 till 036871 is in use + "036872 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036873 till 036875 is in use + "036876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036878 is Oberland + "036879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036891 till 03693 (including total 036892x) is in use + // 0368940 till 0368941 is in use + "036942 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0368943 till 0368949 is in use + // 03695 is Bad Salzungen + "036960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036961 till 036969 is in use + "03697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0371 is Chemnitz Sachsen + // 037200 is Wittgensdorf bei Chemnitz + "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 698e72e53415e7ee0c6fe643ef77401f2f868587 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 15 Oct 2023 17:01:30 +0200 Subject: [PATCH 010/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 038239 --- .../IsPossibleNumberWithReasonTest.groovy | 79 ++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index a42a7ca..eebb457 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1351,8 +1351,83 @@ class IsPossibleNumberWithReasonTest extends Specification { "0370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0371 is Chemnitz Sachsen // 037200 is Wittgensdorf bei Chemnitz - "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037202 till 03724 is in use + "037205 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037206 till 037209 is in use + // 03721 till 03727 is in use + "03728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037291 till 037298 is in use + "037299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03731 till 03733 (including total 03732x) is in use + "037340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037341 till 037344 is in use + "037345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037346 till 037349 is in use + // 03735 till 03737 (including total 03736x) is in use + "037380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037381 till 037384 is in use + "037385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03741 is Plauen + "037420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037421 till 037423 is in use + "037424 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037426 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03473x till 03745 is in use + "037460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037461 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037462 till 037465 is in use + "037466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037467 till 037468 is in use + "037469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0375 is Zwickau + // 03760x till 03765 is in use + "03766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03771 till 03774 is in use + "037750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037751 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037752 is Eibenstock + "037753 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037754 till 037757 + "037758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0381 is Rostock + "038200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038201 till 038209 + // 03821 till 03822x + "038230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038231 till 038234 + "038235 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 0a155598f775ad1f6d7b9fc7c64829244e736bb3 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Mon, 16 Oct 2023 17:58:25 +0200 Subject: [PATCH 011/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 039220 --- .../IsPossibleNumberWithReasonTest.groovy | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index eebb457..5df34fb 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1428,6 +1428,123 @@ class IsPossibleNumberWithReasonTest extends Specification { "038237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "038238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "038239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03825 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03826 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038292 till 038297 is in use + "038298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03830x till 03831 is in use + // 038320 till 038328 is in use + "038329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08331 till 038334 is in use + "038335 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038336 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038337 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03834 is Greifswald + "038350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038351 till 038356 is in use + "038357 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038358 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03836 till 03838 (including total 03837x) is in use + "038390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038391 till 038393 is in use + "038394 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038395 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03841 id Neukloster + "038420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038422 till 038429 + // 03843 till 03845x is in use + "038460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038461 till 038462 is in use + "038463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038464 is Bernitt + "038465 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038466 is Jürgenshagen + "038467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03847 is Sternberg + "038480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038481 till 038486 is in use + "038487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038488 is Demen + "038489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0385 is Schwerin + // 03860 till 03861 is in use + "03862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03863 is Crivitz + "03864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03865 till 03869 is in use + "03870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03871 till 03872x is in use + "038730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038731 till 038733 is in use + "038734 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038735 till 038738 is in use + "038739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03874 till 03877 (including total 03875x) is in use + // 038780 till 038785 is in use + "038786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038787 till 038789 is in use + "038790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038791 till 038794 + "038795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038796 till 038797 + "038798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03881 is Grevesmühlen + "038820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038821 till 038828 is in use + "038829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03883 is Hagenow + "038840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038841 till 038845 is in use + "038846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038847 till 038848 is in use + "038849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038850 till 038856 is in use + "038857 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038858 till 038859 is in use + // 03886 is Gadebusch + "038870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038871 till 038876 is in use + "038877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03900x till 03905x (including total 03903x) is in use + "039060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039061 till 039062 is in use + "039063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039066 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03907 till 03909 (including total 03908x) is in use + // 0391 is Magdeburg + // 03920x till 03921 is in use + "039220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 486d9ba7e749b6089b11169193c2f964f08b6406 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 18 Oct 2023 07:36:16 +0200 Subject: [PATCH 012/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 04190 --- .../IsPossibleNumberWithReasonTest.groovy | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 5df34fb..44e7d6f 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1545,6 +1545,154 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0391 is Magdeburg // 03920x till 03921 is in use "039220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039221 till 039226 is in use + "039227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03923 is Zerbst + "039240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039241 till 039248 is in use + "0392498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 032925 is Stassfurt + "039260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039262 till 039268 is in use + "039269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03927 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03928 is Schönebeck Elbe + "039290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039291 till 039298 is in use + "039299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03931 is Stendal + // 039320 till 039325 is in use + "039326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039327 till 039329 is in use + // 03933 is Genthin + "039340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039341 till 039349 is in use + // 03935 is Tangerhütte + "039360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039361 till 039366 is in use + "039367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03937 is Osterburg Altmark + "039380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039382 till 039384 is in use + "039385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039386 till 039389 is in use + // total 03939x is in use + // 03940x till 03941 is in use + "039420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039421 till 039428 is in use + "039429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03943 till 03944 is in use + "039450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039451 till 039459 is in use + // 03946 till 03947 is in use + "039480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039481 till 039485 is in use + "039486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039487 till 039489 is in use + // 03949 is Oschersleben Bode + // 0395 is Zwiedorf + // 039600 till 039608 is in use + "039609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03961 till 03969 is in use + "03970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03971 is Anklam + "039720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039721 till 039724 is in use + "039725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039726 till 039728 is in use + "039729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03973 till 03974x is in use + "039750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039751 till 039754 is in use + "039755 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03976 is Torgelow bei Uckermünde + "039770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039771 till 039779 is in use + "03980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03981 to 03982x is in use + "039830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039831 till 039833 is in use + "039834 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039835 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039836 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039837 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039838 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03984 is Prenzlau + "039850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039851 till 039859 is in use + "039860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039861 till 039863 is in use + "039863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039865 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03987 is Templin + "039880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039881 till 039889 is in use + "03989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03991 is Waren Müritz + "039920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039921 till 039929 is in use + "039930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039931 till 039934 is in use + "039935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03994 is Malchin + "039950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039951 till 039957 is in use + "039958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039959 is Dargun + // 03996 is Teterow + "039970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039971 till 039973 is in use + "039974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039975 till 039978 + "039979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03998 is Demmin + "039990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039991 till 039999 is in use + // 040 is Hamburg + "04100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04101 till 04109 is in use + "0411 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0412x is in use + "04130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04131 till 04139 is in use + // 04140 till 04144 is in use + "04145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04146 is Stade-Bützfleth + "04147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04148 till 04149 is in use + "04150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04151 till 04156 is in use + "04157 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04158 till 04159 is in use + "04160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04161 till 04169 is in use + "04170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04171 till 04179 is in use + // total 0418x is in sue + "04190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } From 1c57e4c93e4c68abccb2b17aec6ff824d9975927 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Thu, 19 Oct 2023 18:04:17 +0200 Subject: [PATCH 013/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 04601 --- .../IsPossibleNumberWithReasonTest.groovy | 131 +++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 44e7d6f..193d3ac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1692,7 +1692,136 @@ class IsPossibleNumberWithReasonTest extends Specification { // 04171 till 04179 is in use // total 0418x is in sue "04190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + // 04191 till 04195 is in use + "04196 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04202 till 04209 is in use + // 0421 is Bremen + "04220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04221 till 04224 is in use + "04225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0423x till 0424x is in use + "04250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04251 till 04258 is in use + "04259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0426x is in use + "04270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04271 till 04277 is in use + "04278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04281 till 04289 is in use + "04290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04292 till 04298 is in use + "04299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04302 till 04303 is in use + "04304 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04305 is Westensee + "04306 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04307 till 04308 is in use + "04309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0431 till 0433x (including total 0432x) is in use + // 04340 is Achterwehr + "04341 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04342 till 04346 is in use + "04350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04351 till 04358 is in use + "04359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04361 till 04367 is in use + "04368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04371 till 04372 is in use + "04373 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04374 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04375 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04381 till 04385 is in use + "04386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04392 till 04394 is in use + "04395 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04401 till 04409 is in use + // 0441 is Oldenburg (Oldb) + "04420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04421 till 04423 is in use + "04424 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04425 till 04426 is in use + "04427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04431 till 04435 is in use + "04436 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04441 till 04447 is in use + "04448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04451 till 04456 is in use + "04457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04458 is Wiefeldstede-Spohle + "04459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04461 till 04469 is in use + "04470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04471 till 04475 is in use + "04476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04477 till 04479 is in use + // total 0448x is in use + "04490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04491 till 1199 is in use + "04500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04501 till 04506 is in use + "04507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04508 till 0459 is in use + // 0451 is Lübeck + "04520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04521 till 04529 is in use + "04530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04531 till 04537 is in use + "04538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04539 is Westerau + "04540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04541 till 04547 is in use + "04548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0455x is in use + "04560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04561 till 04564 is in use + "0457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 2cc0f5aa71c670cd13e4125c16850516a08e9504 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Thu, 19 Oct 2023 20:46:14 +0200 Subject: [PATCH 014/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 05029 --- .../IsPossibleNumberWithReasonTest.groovy | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 193d3ac..22e873c 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1822,6 +1822,146 @@ class IsPossibleNumberWithReasonTest extends Specification { "0459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "04600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "04601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04602 till 04609 is in use + // 0461 is Flensburg + "04620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04621 till 04627 is in use + "04628 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0463x is in use + "04640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04641 till 04644 is in use + "04645 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04646 is Morkirch + "04647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04651 is Sylt + "04652 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04653 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04654 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04656 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04661 till 04668 is in use + "04669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04671 till 04674 is in use + "04675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04681 till 04684 is in use + "04685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04702 till 04708 is in use + "04709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0471 is Bremerhaven + "04720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04721 till 04725 is in use + "04726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04731 till 04737 is in use + "04738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0474x is in use + "04750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04751 till 04758 is in use + "04759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04761 till 04769 is in use + // total 0477x is in use + "0478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04791 till 04796 is in use + "04800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04802 till 04806 is in use + "04807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0481 is Heide Holstein + "04820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04821 till 04829 is in use + // 04830 is Süderhastedt + "04831 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04832 till 04839 is in use + "04840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04841 till 04849 os in use + "04850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04851 till 04859 is in use + "04860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04861 till 04865 is in use + "04866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04871 till 04877 is in use + "04878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04881 till 04885 is in use + "04886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04891 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04892 till 04893 is in use + "04894 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04895 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04902 till 04903 is in use + "04904 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04905 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0491 is Leer Ostfriesland + // total 0492x is in use + "04930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04931 till 04936 is in use + "04937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04938 till 04939 is in use + "04940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04941 till 04948 is in use + "04949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0495x is in use + "04960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04961 till 04968 is in use + "04969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04971 till 04977 is in use + "04978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05021 till 05028 is in use + "05029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 4e84073796a3ffb2b49ce743e466efa46fd43b33 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 21 Oct 2023 21:15:34 +0200 Subject: [PATCH 015/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 05620 --- .../IsPossibleNumberWithReasonTest.groovy | 225 ++++++++++++++++++ 1 file changed, 225 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 22e873c..ec1bf79 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1962,6 +1962,231 @@ class IsPossibleNumberWithReasonTest extends Specification { "05020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05021 till 05028 is in use "05029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05031 till 05037 is in use + "05038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05041 till 05045 is in use + "05046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05051 till 05056 is in use + "05057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05060 is Bodenburg + "05061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05062 till 05069 is in use + "05070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05071 till 05074 is in use + "05075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05082 till 05086 is in use + "05087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05101 till 05103 is in use + "05104 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05105 is Barsinghausen + "05106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05108 till 05109 is in use + // 0511 is Hannover + "05120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05121 is Hildesheim + "05122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05123 is Schellerten + "05124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05126 till 05129 is in use + // 05130 till 05132 is in use + "05133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05135 till 05139 is in use + "05140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05141 till 05149 is in use + "05150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05151 till 05159 is in use + "05160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05161 till 05168 is in use + "05169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05171 till 05177 is in use + "05178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05181 till 05187 is in use + "05188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0519x is in use + "05200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05201 till 05209 is in use + // 0521 is Bielefeld + "05220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05221 till 05226 is in use + "05227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05228 is Vlotho-Exter + "05229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05231 till 05238 is in use + "05239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05241 till 0522 is in use + "05243 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05244 till 05248 is in use + "05249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05250 till 05255 is in use + "05256 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05257 till 05259 is in use + "05260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05261 till 05266 is in use + "05267 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05268 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05271 till 05278 is in use + "05279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05281 till 05286 is in use + "05287 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05292 till 05295 is in use + "05296 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0530x is in use + // 0531 is Braunschweig + // total 0532x is in use + "05330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05331 till 05337 is in use + "05338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05339 is Gielde + "05340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05341 is Salzgitter + "05342 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05343 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05344 till 05347 is in use + "05348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05351 till 05358 is in use + "05359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05361 till 05368 is in use + "05369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05371 till 05379 is in use + "05380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05381 till 05384 is in use + "05385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05401 till 05407 is in use + "05408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05409 is Hilter am Teutoburger Wald + // 0541 Osnabrück + "05420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05421 till 05429 is in use + "05430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05431 till 05439 is in use + "05440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05441 till 05448 is in use + "05449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05451 till 05459 is in use + "05460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05461 till 05462 is in use + "05463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05464 till 05468 is in use + "05469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05471 till 05476 is in use + "05477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05481 till 05485 is in use + "05486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05491 till 05495 is in use + "05496 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05497 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05502 till 05509 is in use + // 0551 is Göttingen + // 05520 till 05525 is in use + "05526 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05527 till 05529 is in use + "05530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05531 till 05536 is in use + "05537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05541 till 05546 is in use + "05547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05551 till 05556 is in use + "05557 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05558 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05561 till 05565 is in use + "05566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05571 till 05574 is in use + "05575 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05581 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05582 till 05586 is in use + "05587 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05591 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05592 till 05594 is in use + "05595 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05596 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05597 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05601 till 05609 is in use + // 0561 is Kassel + "05620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 90e803aa2ff292063f511e444a5f7dd1f1f9e0c5 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 22 Oct 2023 21:09:48 +0200 Subject: [PATCH 016/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 06109 --- .../IsPossibleNumberWithReasonTest.groovy | 191 +++++++++++++++++- 1 file changed, 190 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index ec1bf79..f5377b7 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2187,7 +2187,196 @@ class IsPossibleNumberWithReasonTest extends Specification { // 05601 till 05609 is in use // 0561 is Kassel "05620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + // 05621 till 05626 is in use + "05627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05628 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05631 till 05636 is in use + "05637 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05641 till 05648 is in use + "05649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0565x is in use + "05660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05661 till 05665 is in use + "05666 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05671 till 05677 is in use + "05678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05681 till 05686 + "05687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05691 till 05696 is in use + "05697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05702 till 05707 is in use + "05708 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0571 is Minden Westfalen + "05720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05721 till 05726 is in use + "05727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05731 till 05734 is in use + "05735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05741 till 05746 is in use + "05747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05751 till 05755 is in use + "05756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05761 is Stolzenau + "05762 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05763 till 05769 is in use + "05770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05771 till 05777 is in use + "05778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05802 till 05808 is in use + "05809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0581 is Uelzen + // total 0582x is in use + "05830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05831 till 05839 is in use + // 05840 till 05846 is in use + "05847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05848 till 05849 is in use + // 05850 till 05855 is in use + "05856 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05857 till 05859 is in use + "05860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05861 till 05865 is in use + "05866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 5872 till 5875 is in use + "05876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05881 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05882 till 05883 is in use + "05884 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05885 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05901 till 05909 is in use + // 0591 is Lingen (ems) + "05920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05921 till 05926 is in use + "05927 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05928 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05931 till 05937 is in use + "05938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05939 is Sustrum + "05940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05941 till 05948 is in use + "05949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05951 till 05957 is in use + "05958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05961 till 05966 is in use + "05967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05971 is Rheine + "05972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05973 is Neuenkirchen Kreis Steinfurt + "05974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05975 till 05978 is in use + "05979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06000 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06001 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06002 till 06004 is in use + "06005 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06006 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06007 till 06008 is in use + "06009 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06020 till 06024 is in use + "06025 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06026 till 06029 is in use + "06030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06031 till 06036 is in use + "06037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06039 is Karben + "06040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06041 till 06049 is in use + // total 0605x is in use + "06060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06061 till 06063 is in use + "06064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06066 is Michelstadt-Vielbrunn + "06067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06068 is Beerfelden + "06070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06071 is Dieburg + "06072 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06073 till 06074 is in use + "06075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06078 is Gross-Umstadt + "06079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06081 till 06087 is in use + "06088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06092 till 06096 is in use + "06097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06101 till 06109 is in use } From f6de5092649d30846aecf41785541af9e165795c Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Mon, 23 Oct 2023 21:49:14 +0200 Subject: [PATCH 017/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 06530 --- .../IsPossibleNumberWithReasonTest.groovy | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index f5377b7..fce3954 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2377,6 +2377,145 @@ class IsPossibleNumberWithReasonTest extends Specification { "06099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "06100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06101 till 06109 is in use + // 0611 is Wiesbaden + // 06120 is Aarbergen + "06121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06122 till 06124 is in use + "06125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06126 till 06129 is in use + // 06130 till 06136 is in use + "06137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06138 till 06139 is in use + "06140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06142 is Rüsselsheim + "06143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06144 till 06147 is in use + "06148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06150 till 06152 is in use + "06153 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06154 till 06155 is in use + "06156 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06157 till 06159 is in use + "06160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06161 till 06167 is in use + "06168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06171 till 06175 is in use + "06176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06181 till 06188 is in use + "06189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06190 is Hattersheim am Main + "06191 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06192 is Hofheim am Taunus + "06193 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06195 till 06196 is in use + "06197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06198 is Eppstein + "06199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06201 till 06207 is in use + "06208 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06209 is Mörlenbach + // 0621 is Mannheim + // 06220 till 06224 is in use + "06225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06226 till 06229 is in use + "06230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06231 till 06239 is in use + "06240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06241 till 06247 is in use + "06248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06249 is Guntersblum + "06250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06251 till 06258 is in use + "06259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06261 till 06269 is in use + "06270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06271 till 06272 is in use + "06273 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06274 till 06276 is in use + "06277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06281 till 06287 is in use + "06288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06291 till 06298 is in use + "06299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06301 till 06308 is in use + "06309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0631 is Kauserslautern + "06320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06321 till 06329 is in use + "06330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06331 till 06339 is in use + // total 0634x is in use + "06350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06351 till 06353 is in use + "06354 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06355 till 06359 is in use + "06360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06361 till 06364 is in use + "06365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06371 till 06375 is in use + "06376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06381 till 06837 is in use + "06388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06391 till 06398 is in use + "06399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0640x till 0642x is in use + // 06431 till 06436 is in use + "06437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06438 till 06439 is in use + // total 0644x is in use + "06450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06451 till 06458 is in use + "06459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06461 till 06462 is in use + "06463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06464 till 06468 is in use + "06469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06471 till 06479 is in use + "06480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06482 till 06486 is in use + "06487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0650x till 0651 is in use + "06520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06521 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06522 till 06527 is in use + "06528 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06529 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } From 19d66fa754866bfe0ceff01d7b2148aeed704353 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Thu, 26 Oct 2023 20:58:28 +0200 Subject: [PATCH 018/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 0711 Plus additions for 116xxx --- .../IsPossibleNumberWithReasonTest.groovy | 331 +++++++++++------- 1 file changed, 203 insertions(+), 128 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index fce3954..62fa6ae 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -219,21 +219,29 @@ class IsPossibleNumberWithReasonTest extends Specification { number | regionCode | expectedResult | expectingFail // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true // end of 116 } @@ -2515,6 +2523,195 @@ class IsPossibleNumberWithReasonTest extends Specification { "06528 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "06529 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "06530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06531 till 06536 is in use + "06537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06541 till 06545 is in use + "06546 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0655x is in use + "06560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06561 till 06569 is in use + "06570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06571 till 06575 is in use + "06576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06578 is Salmtal + "06579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0658x is in use + "06590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06591 till 06597 is in use + "06598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06599 is Wiedenbach bei Gerolstein + "0660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0661 till 0662x is in use + // 06630 till 06631 is in use + "06632 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06633 till 06639 is in use + "06640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06641 till 06648 is in use + "06649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0665x is in use + // 06660 till 06661 is in use + "06662 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06663 till 06669 is in use + // 06670 is Ludwigsau Hessen + "06671 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06672 till 06678 is in use + "06679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06681 till 06684 is in use + "06685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06691 till 06698 is in use + "06699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06701 is Sprendlingen Rheinhessen + "06702 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06703 till 06704 is in use + "06705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06706 till 06709 is in use + // 0671 is Bad Kreuznach + "06720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06721 till 06728 is in use + "06729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06731 till 06737 is in use + "06738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06741 till 06747 is in use + "06748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06751 till 06758 is in use + "06759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06761 till 06766 is in use + "06767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06771 till 06776 is in use + "06777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06781 to 06789 is in use + "0679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06802 till 06806 is in use + "06807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06809 is Grossrosseln + // 0681 is Saarbrücken + "06820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06821 is Neunkirchen Saar + "06822 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06823 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06824 till 06827 is in use + "06828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06831 till 06838 is in use + "06839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06841 till 06844 is in use + "06845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06848 till 06849 is in use + "06850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06851 till 06858 is in use + "06859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06861 is Merzig + "06862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06864 till 06869 is in use + "06870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06871 till 06876 is in use + "06877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06881 is Lebach + "06882 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06883 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06884 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06885 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06887 rill 06888 is in use + "06889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06891 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06892 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06893 till 06894 is in use + "06895 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06897 till 06898 is in use + "06899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 069 is Frankfurt am Mai + // 0700 is special number code see: TODO will becoded + "0701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 7021 till 7026 is in use + "07027 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07028 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07031 till 07034 is in use + "07035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07041 till 07046 is in use + "07047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07051 till 07056 is in use + "07057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07062 till 07063 is in use + "07064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07066 is Bad Rappenau-Bonfeld + "07067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07071 till 07073 is in use + "07074 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07081 till 07085 is in use + "07086 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0710 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0711 is Stuttgart + } @@ -2544,7 +2741,7 @@ class IsPossibleNumberWithReasonTest extends Specification { where: number | regionCode | expectedResult | expectingFail - // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just + // invalid area code for germany - need to be false "02040 556677" | "DE" | false | true // 02041 is Bottrop "02042 556677" | "DE" | false | true @@ -2554,129 +2751,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "02046 556677" | "DE" | false | true /* "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02051 till 02054 are in use - "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02056 is Heiligenhausen - "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02058 is Wülfrath - "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02064 till 02066 is in use - "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0208 & 0209 is in use - "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02102 till 02104 is in use - "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 - "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02131 till 02133 is in use - "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02137 is Neuss-Norf - "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0214 is Leverkusen - // 02150 till 02154 is in use - "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02156 till 02159 is in use - "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02161 till 02166 is in use - "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02171 is Leverkusen-Opladen - "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02173 till 02175 is in use - "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02181 till 02183 is in use - "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02191 till 02193 is in use - "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02195 till 02196 is in use - "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02202 till 02208 is in use - "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0221 is Köln - "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02222 till 02228 is in use - "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02232 till 02238 is in use - "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02241 till 02248 is in use - "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02251 till 02257 is in use - "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02261 till 02269 is in use - "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02271 till 02275 is in use - "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0228 is Bonn - "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02291 till 02297 is in use - "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02301 till 02309 is in use - // 0231 is Dortmund - "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02323 till 02325 is in use - "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02327 is Bochum-Wattenscheid - "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02330 till 02339 is in use - // 0234 is Bochum - "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02351 till 02355 is in use - "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02357 till 02358 is in use - // 02360 till 02369 is in use - "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02371 till 02375 is in use - "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02377 till 02379 is in use + .... */ } From 79df95e66db8788bfdbebe9d12162c69292c6052 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 27 Oct 2023 21:12:31 +0200 Subject: [PATCH 019/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 08037 --- .../IsPossibleNumberWithReasonTest.groovy | 301 +++++++++++++++++- 1 file changed, 298 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 62fa6ae..56069ac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -25,6 +25,9 @@ import java.util.logging.Logger // NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf // Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html +// Version 5.V.2020 of BenetzA number plan + + class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil phoneUtil @@ -1561,7 +1564,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "039240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039241 till 039248 is in use "0392498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 032925 is Stassfurt + // 03925 is Stassfurt "039260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "039261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039262 till 039268 is in use @@ -2661,7 +2664,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // 06897 till 06898 is in use "06899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 069 is Frankfurt am Mai - // 0700 is special number code see: TODO will becoded + // 0700 is special number code see: TODO will be coded - see above "0701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "07020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 7021 till 7026 is in use @@ -2711,7 +2714,299 @@ class IsPossibleNumberWithReasonTest extends Specification { "0709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0710 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0711 is Stuttgart - + "07120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07121 till 07129 is in use + // 07130 till 07136 is in use + "07137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07138 till 07139 is in use + "07140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07141 till 07148 is in use + "07149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07150 till 07154 is in use + "07155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07156 till 07159 is in use + "07160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07161 till 07166 is in use + "07167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07171 till 07176 is in use + "07177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07181 till 07184 is in use + "07185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07191 till 07195 + "07196 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07202 till 07204 is in use + "07205 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07206 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07208 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0721 is Karlsbad + // total 0722x is in use + "07230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07231 till 07237 is in use + "07238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07240 is Pfinztal + "07241 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07242 till 07249 is in use + // 0725x till 0726x is in use + "07270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07271 till 07277 is in use + "07278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07300 is Roggenburg + "07301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0732 till 0739 is in use + // 0731 is Ulm Donau + "07320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07321 till 07329 is in use + "07330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07331 till 07337 is in use + "07338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07340 is Neenstetten + "07341 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07342 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07343 till 07348 is in use + "07349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07351 till 07358 is in use + "07359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07361 till 07367 is in use + "07368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07371 is Riedlingen Württemberg + "07372 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07373 till 07376 is in use + "07377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07381 till 07389 is in use + "07390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07391 till 07395 is in use + "07396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07401 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07402 till 07404 is in use + "07405 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07406 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07407 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07409 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0741 is Deisslingen + // 07420 is Schramberg + // 07421 till 07429 is in use + "07430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07431 till 07436 is in use + "07437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0744x is in use + "07450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07451 till 07459 is in use + "07460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07461 till 07467 is in use + "07468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07471 till 07478 is in use + "07479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07482 till 07486 is in use + "07487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07502 till 07506 is in use + "07507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0751 Ravensburg + // 07520 is Bodnegg + "07521 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07522 is Wangen im Allgäu + "07523 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07524 till 07525 is in use + "07526 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07527 till 07529 is in use + "07530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07531 till 07534 is in use + "07535 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07536 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07541 till 07546 is in use + "07547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07551 till 07558 is in use + "07559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07561 till 07569 is in use + // total 0757x is in use + "07580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07581 till 07587 is in use + "07588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07602 is Oberried Breisgau + "07603 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07604 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07605 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07606 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07607 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0761 Freiburg im Breisgau + // total 0762x is in use + "07630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07631 till 07636 is in use + "07637 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07641 till 07646 + "07647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07651 till 07657 is in use + "07658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0766x is in use + "07670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07671 till 07676 is in use + "07677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 076781 till 07685 is in use + "07686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07702 till 07709 is in use + // 0771 is Donaueschingen + // total 0772x is in use + "07730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07731 till 07736 is in use + "07737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07738 till 07339 is in use + "07740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07741 till 07748 is in use + "07749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07751 is Waldshut + "07752 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07753 till 07755 is in use + "07756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07771 is Stockach + "07772 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07773 till 07775 is in use + "07776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07777 is Sauldorf + "07778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07802 till 07808 is in use + "07809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0781 is Offenburg + "07820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07821 till 07826 is in use + "07827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07831 till 07839 is in use + "07840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07841 till 07844 is in use + "07845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07851 till 07854 is in use + "07855 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07856 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07857 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07858 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07903 till 07907 is in use + "07908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0791 is Schwäbisch Hall + "0792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0793x till 0794x is in use + // 07950 till 07955 is in use + "07956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07957 till 07959 is in use + "07960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07961 till 07967 is in use + "07968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07971 till 07977 is in use + "07978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0800 is special number code see: TODO will be coded - see above + "0801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0802x is in use + "08030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08031 till 08036 is in use + "08037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 5dbe9e71ecfdb3929bbcabdaefe51873b1bdc54b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Tue, 31 Oct 2023 22:10:57 +0100 Subject: [PATCH 020/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 0999 - city are codes finished ... only need todo special codes --- .../IsPossibleNumberWithReasonTest.groovy | 676 ++++++++++++++++++ 1 file changed, 676 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 56069ac..d2d7ccd 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3007,6 +3007,682 @@ class IsPossibleNumberWithReasonTest extends Specification { "08030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08031 till 08036 is in use "08037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08038 till 08039 is in use + "08040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08041 till 08043 is in use + "08044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08045 till 08046 is in use + "08047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08051 till 08057 is in use + "08058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08061 till 08067 is in use + "08068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08071 till 08076 is in use + "08077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08081 till 08086 is in use + "08087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08091 till 08095 is in use + "08096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08102 is Höhenkirchen-Siegertsbrunn + "08103 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08104 till 08106 is in use + "08107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0811 is Halbergmoos + "08120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08121 till 08124 is in use + "08125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08131 is Dachau + "08132556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08133 till 08139 is in use + "08140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08141 till 08146 is in use + "08147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08151 till 08153 is in use + "08154 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08156 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08157 till 08158 is in use + "08159 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08161 is Freising + "08162 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08163 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08164 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08165 till 08168 is in use + "08169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08170 till 08171 is in use + "08172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08173 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08174 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08175 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08176 till 08179 is in use + "0818 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08191 till 08196 is in use + "08197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08202 till 08208 is in use + "08209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0821 is Augsburg + "08220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08221 till 08226 is in use + "08227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08230 till 08234 is in use + "08235 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08236 till 08239 is in use + "08240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08241 is Buchloe + "08242 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08243 is Fuchstal + "08244 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08245 till 08249 is in use + // 08250 till 08254 is in use + "08255 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08256 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08257 till 08259 is in use + "08260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08261 till 08263 is in use + "08264 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08265 till 08269 is in use + "08270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08271 till 08274 is in use + "08275 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08276 is Baar Schwaben + "08277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08281 till 08285 is in use + "08286 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08287 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08291 till 08296 is in use + "08297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08302 till 08304 is in use + "08305 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08306 is Ronsberg + "08307 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08308 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0831 is Kempten Allgäu + // 08320 till 08328 is in use + "08329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08330 till 08338 is in use + "08339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0834x is in use + "0835 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08361 till 08369 is in use + // 08370 is Obergünzburg + "08371 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08372 till 08379 is in use + // total 0838x is in use + "08390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08392 till 08395 is in use + "08396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08401 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08402 till 08407 is in use + "08408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08409 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0841 is Ingolstadt Donau + "08420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08421 till 08424 is in use + "08425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08426 till 08427 is in use + "08428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08431 till 08435 is in use + "08436 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08441 till 08446 is in use + "08447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08450 is Ingoldstadt-Zuchering + "08451 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08452 till 08454 is in use + "08455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08456 till 08459 is in use + // total 0846x is in use + "0847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08501 till 08507 is in use + "08508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08509 is Ruderting + // 0851 is Passau + "0852 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08531 till 08538 is in use + "08539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08541 till 08549 is in use + // 08550 till 08558 is in use + "08559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08561 till 08565 is in use + "08566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08571 till 08574 is in use + "08575 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08581 till 08586 is in use + "08587 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08591 till 08593 is in use + "08594 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08595 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08596 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08597 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0861 is Traunstein + "08620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08621 till 08624 is in use + "08625 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08626 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08628 till 08629 is in use + // 08630 till 08631 is in use + "08632 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08633 till 08639 is in use + // 08640 till 08642 is in use + "08643 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08644 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08645 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08646 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08649 is Schleching + // 08650 till 08652 is in use + "08653 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08654 Freilassing + "08655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08656 till 08657 is in use + "08658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08661 till 08667 is in use + "08668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08669 is Traunreut + // 08670 till 08671 is in use + "08672 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08673 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08677 till 086779 is in use + "08680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08681 till 08687 is in use + "08688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08702 till 08709 is in use + // 0871 is Landshut + "08720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08721 till 08728 is in use + "08729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08731 till 08735 is in use + "08736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08741 till 08745 is in use + "08746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08751 till 08754 is in use + "08755 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08756 is Nandlstadt + "08757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08761 till 08762 is in use + "08763 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08764 till 08766 is in use + "08767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08771 till 08774 is in use + "08775 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08781 till 08785 is in use + "08786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08801 till 08803 is in use + "08804 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08805 till 08809 is in use + // 0881 is Weilheim in Oberbayern + "08820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08821 till 08826 is in use + "08827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0883 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08841 is Murnau am Staffelsee + "08842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08843 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08844 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08845 till 08847 is in use + "08848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08851 is Kochel am See + "08852 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08853 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08855 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08856 till 08858 is in use + "08859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08860 till 08862 is in use + "08863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08865 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08867 till 08869 is in use + "0887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 089 is München + "09000 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09001 Information Service TODO:see above + "09002 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09003 Entertainment Service TODO:see above + "09004 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09005 other premium services TODO: see above + "09006 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09007 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09008 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09009 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0903 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0904 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0905 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0906 is Donauwörth + // 09070 till 09078 is in use + "09079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0908x is in use + // 09090 till 0904 is in use + "09095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09097 is Marxheim + "09098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09099 is Kaisheim + "09100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09101 till 09107 is in use + "09108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0911 is Nürnberg + // 09120 is Leinburg + "09121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09122 till 09123 is in use + "09124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09126 till 09129 is in use + "09130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09131 till 09135 is in use + "09136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09141 till 09149 is in use + "09150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09151 till 09158 is in use + "09159 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09161 till 09167 is in use + "09168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0917x till 0919x is in use + "09200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09201 till 09209 is in use + // 0921 is Bayreuth + // 09220 till 09223 is in use + "09224 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09225 is Stadtsteinach + "09226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09227 till 09229 is in use + "09230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09231 till 09236 is in use + "09237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09238 is Röslau + "09239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09241 till 09246 is in use + "09247 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09251 till 09257 is in use + "09258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0926x till 0928x is in use + "09290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09292 till 09295 is in use + "09296 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09302 till 09303 is in use + "09304 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09305 till 09307 is in use + "09308 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0931 is Würzburg + "09320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09321 is Kitzingen + "09322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09323 till 09326 is in use + "09327 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09331 till 09339 is in use + // 0934x till 0935x is in use + // 09360 is Thüngen + "09361 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09362 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09363 till 09367 is in use + "09368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09369 is Uettingen + "09370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09371 till 09378 is in use + "09379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09381 till 09386 is in use + "09387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09391 till 09398 is in use + "09399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09401 till 09409 is in use + // 0941 is Regensburg + // 09420 till 09424 is in use + "09425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09426 till 09429 is in use + "09430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09431 is Schwandorf + "09432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09433 till 09436 is in use + "09437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09438 till 09439 is in use + "09440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09441 till 09448 is in use + "09449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09451 till 09454 is in use + "09455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09456 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09461 till 09649 is in use + "09470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09471 till 09474 is in use + "09475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09480 till 09482 is in use + "09483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09484 is Brennberg + "09485 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09491 till 09493 is in use + "09494 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09495 is Breitenbrunn Oberfalz + "09496 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09497 till 09499 is in use + "09500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09502 till 09505 is in use + "09506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0951 is Bamberg + "09520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09521 till 09529 is in use + "09530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09531 till 09536 is in use + "09537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09541 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09542 till 09549 is in use + "09550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09551 till 09556 is in use + "09557 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09558 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0956x is in use + "09570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09571 till 09576 is in use + "09577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09602 till 09608 is in use + "09609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0961 is Weiden in der Oberfalz + "09620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09621 till 09622 is in use + "09623 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09624 till 09628 is in use + "09629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09631 till 09639 is in use + "09640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09641 till 09648 is in use + "09649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09651 till 09659 is in use + "09660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09661 till 09666 is in use + "09667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09671 till 09677 is in use + "09678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09681 till 09683 is in use + "09684 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09701 is Sandberg Unterfranken + "09702 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09703 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09704 is Euerdorf + "09705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09708 is Bad Bocklet + // total 0972x is in use + "09730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09732 till 09738 is in use + "09739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09741 till 09742 is in use + "09743 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09744 till 09749 is in use + "0975 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09761 till 09766 is in use + "09767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09771 till 09779 is in use + "0978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09802 till 09805 + "09806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0981 is Ansbach + // 09820 is Lehrberg + "09821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09822 till 09829 is in use + "09830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09831 till 09837 s in use + "09838 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09841 till 09848 is in use + "09849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09851 till 09857 is in use + "09858 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09861 is Rothenburg ob der Tauber + "09862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09865 is Adelshofen Mittelfranken + "09866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09867 till 09869 is in use + "09870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09871 till 09876 is in use + "09877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09901 is Hengersberg Bayern + "09902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09903 till 09908 is in use + "09909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0991 is Deggendorf + // total 0992x is in use + "09930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09931 till 09933 is in use + "09934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09935 till 09938 is in use + "09939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09941 till 09948 is in use + "09949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09951 till 09956 is in use + "09957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09961 till 09966 is in use + "09967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09971 till 09978 is in use + "09979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } From e13b650aed41c41c993d6ac43c70f2737256f69e Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 26 Nov 2023 09:05:21 +0100 Subject: [PATCH 021/135] Rearranging code order --- .../IsPossibleNumberWithReasonTest.groovy | 89 ++++++++++--------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index d2d7ccd..73e0ba7 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -143,6 +143,51 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 + // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/116xyz/116116.html + // see no. 7: national 0116116 is not a valid number, but may be replaced by 116116 by the operator - caller could reach target. ( T-Mobile is doing so currently 03.11.2023 - no guarantee for the future nor for any other operator. Best practice, assuming call will not reach target=. + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // end of 116 + } + + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -205,48 +250,6 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { - given: - - def phoneNumber = phoneUtil.parse(number, regionCode) - - when: "get number isPossibleNumberWithReason: $number" - - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) - - then: "is number expected: $expectedResult" - this.logResult(result, expectedResult, expectingFail, number, regionCode) - - where: - - number | regionCode | expectedResult | expectingFail - // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 - // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number - "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - - "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC - "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC - "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - - "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - - "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "+49116 55" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - // end of 116 - } def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3682,8 +3685,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "09979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - - } From bda741ac9f86711f8a4d2b9d713758a282d18ac5 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 17 Dec 2023 20:59:30 +0100 Subject: [PATCH 022/135] - add 19222 service number tests to IsPossibleNumberWithReasonTest - Moving "check if original lib fixed non check of NAC..." from NormalizationTest to IsPossibleNumberWithReasonTest - improve logging in NormalizationTest & PhoneNumberOfflineGeocoderTest - Moving "check if original lib fixed isValidNumber for invalid German NDC" from IsPossibleNumberWithReasonTest into new IsValidNumberTest --- .../PhoneNumberOfflineGeocoderTest.groovy | 5 +- .../IsPossibleNumberWithReasonTest.groovy | 113 +++++++++++++----- .../PhoneNumberUtil/IsValidNumberTest.groovy | 93 ++++++++++++++ .../PhoneNumberUtil/NormalizationTest.groovy | 83 ++++--------- 4 files changed, 200 insertions(+), 94 deletions(-) create mode 100644 src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy index 20b8f25..26073f1 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy @@ -28,6 +28,7 @@ class PhoneNumberOfflineGeocoderTest extends Specification { Logger logger = Logger.getLogger(PhoneNumberOfflineGeocoderTest.class.toString()) + boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() @@ -48,7 +49,9 @@ class PhoneNumberOfflineGeocoderTest extends Specification { then: "is number expected: $expectedResult" if ((result != expectedResult) && (result2 != expectedResult)){ if (expectingFail) { - logger.info("PhoneLib is still not correctly labeling $areacode to $expectedResult by giving $result") + if (!LOGONLYUNEXPECTED) { + logger.info("PhoneLib is still not correctly labeling $areacode to $expectedResult by giving $result") + } } else { logger.warning("PhoneLib is suddenly not correctly labeling $areacode to $expectedResult by giving $result") } diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 73e0ba7..fce9231 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -60,7 +60,7 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for Emergency short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + def "check if original lib fixed isPossibleNumberWithReason for police short code 110 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: def phoneNumber = phoneUtil.parse(number, regionCode) @@ -77,8 +77,7 @@ class IsPossibleNumberWithReasonTest extends Specification { number | regionCode | expectedResult | expectingFail // short code for Police (110) is not dial-able internationally nor does it has additional numbers "110" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct - "0110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // checked "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable @@ -90,9 +89,26 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49203 110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 110555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // end of 110 + } + + def "check if original lib fixed isPossibleNumberWithReason for Emergency short code 112 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail // short code for emergency (112) is not dial-able internationally nor does it has additional numbers "112" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // checked "0112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -188,6 +204,38 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for ambulance transport 19222 short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // prior to mobile, there where 19xxx short codes in fixed line - only 19222 for no emergency ambulance call is still valid + // its a national reserved number, which in contrast to 112 might also be called with NDC to reach a specific ambulance center - not all NDC have a connected 19222. + // for more information see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/ONRufnr/Vfg_25_2006_konsFassung100823.pdf?__blob=publicationFile&v=3 chapter 7 + "19222" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true // not valid on mobil + // using 19222 als NDC after NAC is checked by "online services 019xx" + "0203 19222" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0203 19222555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // must not be longer + "+4919222" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + // using 19222 from DE als NDC after CC is checked by "online services 019xx" + "+49203 19222" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203 19222555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // must not be longer + // using 19222 from FR als NDC after CC is checked by "online services 019xx" + "+49203 19222" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203 19222555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // must not be longer + // end of 19222 + } + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3688,44 +3736,43 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + def "check if original lib fixed non check of NAC"(String number, regionCode, expectedResult, expectingFail) { given: def phoneNumber = phoneUtil.parse(number, regionCode) - when: "get number isValidNumber: $number" + when: "get number isPossibleNumberWithReason: $number" - def result = phoneUtil.isValidNumber(phoneNumber) + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) then: "is number expected: $expectedResult" - if (result != expectedResult) { - if (expectingFail) { - logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } else { - logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } - } else { - if (expectingFail) { - logger.info("!!! isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") - } - } + this.logResult(result, expectedResult, expectingFail, number, regionCode) where: - number | regionCode | expectedResult | expectingFail - // invalid area code for germany - need to be false - "02040 556677" | "DE" | false | true - // 02041 is Bottrop - "02042 556677" | "DE" | false | true - // 02043 is Gladbeck - "02044 556677" | "DE" | false | true - // 02045 is Bottrop-Kirchhellen - "02046 556677" | "DE" | false | true - /* - "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - .... - */ + number | regionCode | expectedResult | expectingFail + // Romania numbers must not have 1 has first digit of NAC + // those indicate a special service, but there is no special service starting with 7 + // so normally the whole number must be invalid, but it is marked as TOO_LONG - an error not intended to check here + // "0040(0176) 3 0 6 9 6541" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + // "0040 176 3 0 6 9 6542" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + // "004017630696543" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + // "0040-0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "556677889" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "5566778899" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667788990" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "000" | "AU" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true // this is Austrian Emergency code alternative for 112 + "012345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false } - - } \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy new file mode 100644 index 0000000..02ac36f --- /dev/null +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -0,0 +1,93 @@ +/* + * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil + +import com.google.i18n.phonenumbers.PhoneNumberUtil +import spock.lang.Specification + +import java.util.logging.Logger + + +// Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 +// NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf +// Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html + +// Version 5.V.2020 of BenetzA number plan + + +class IsValidNumberTest extends Specification { + + PhoneNumberUtil phoneUtil + + Logger logger = Logger.getLogger("") + + boolean LOGONLYUNEXPECTED = true + + def "setup"() { + this.phoneUtil = PhoneNumberUtil.getInstance() + System.setProperty("java.util.logging.SimpleFormatter.format", + "%4\$-7s: %5\$s %n") + } + + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValidNumber: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // invalid area code for germany - need to be false + "02040 556677" | "DE" | false | true + // 02041 is Bottrop + "02042 556677" | "DE" | false | true + // 02043 is Gladbeck + "02044 556677" | "DE" | false | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | false | true + /* + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + .... + */ + } + + +} \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index d8aa600..22aa100 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -26,6 +26,7 @@ class NormalizationTest extends Specification { Logger logger = Logger.getLogger("") + boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() @@ -33,6 +34,25 @@ class NormalizationTest extends Specification { "%4\$-7s: %5\$s %n") } + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("phoneUtil.format is still not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("phoneUtil.format is suddenly not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("phoneUtil.format is now correctly normalizing $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed non check of NAC - E164"(String number, regionCode, expectedResult, expectingFail) { given: @@ -43,17 +63,9 @@ class NormalizationTest extends Specification { def result = phoneUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164) then: "is number expected: $expectedResult" - if (result != expectedResult) { - if (expectingFail) { - logger.info("PhoneLib is still not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") - } else { - logger.warning("PhoneLib is suddenly not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") - } - } else { - if (expectingFail) { - logger.info("!!! PhoneLib is now correctly normalizing $number to $expectedResult for region $regionCode !!!") - } - } + + this.logResult(result, expectedResult, expectingFail, number, regionCode) + where: @@ -80,55 +92,6 @@ class NormalizationTest extends Specification { "312345678" | "IT" | "+39312345678" | false } - def "check if original lib fixed non check of NAC - IS_POSSIBLE_LOCAL_ONLY"(String number, regionCode, expectedResult, expectingFail) { - given: - - def phoneNumber = phoneUtil.parse(number, regionCode) - - when: "get number isPossibleNumberWithReason: $number" - - def result1 = phoneUtil.isPossibleNumberWithReason(phoneNumber) - - then: "is number expected: $expectedResult" - if (result1 != expectedResult) { - if (expectingFail) { - logger.info("PhoneLib is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } else { - logger.warning("PhoneLib is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } - } else { - if (expectingFail) { - logger.info("!!! PhoneLib is now correctly validating $number to $expectedResult for region $regionCode !!!") - } - } - - where: - - number | regionCode | expectedResult | expectingFail - // Romania numbers must not have 1 has first digit of NAC - // those indicate a special service, but there is no special service starting with 7 - // so normally the whole number must be invalid, but it is marked as TOO_LONG - an error not intended to check here - // "0040(0176) 3 0 6 9 6541" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "0040 176 3 0 6 9 6542" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "004017630696543" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "0040-0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "556677889" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "5566778899" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55667788990" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "000" | "AU" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true // this is Austrian Emergency code alternative for 112 - "012345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - } } \ No newline at end of file From 0def45477b46c2454729a34d3ce0ebfc1616c8a2 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 23 Dec 2023 09:52:53 +0100 Subject: [PATCH 023/135] Use PhoneLib 8.13.27 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 55d030a..4720b4e 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.16-SNAPSHOT + 1.1.16 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.26 + 8.13.27 @@ -139,7 +139,7 @@ com.googlecode.libphonenumber geocoder - 2.220 + 2.221 test From cf6f495b6d3ba5a9207cfc1f0802c7c691645033 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 23 Dec 2023 10:01:25 +0100 Subject: [PATCH 024/135] Start Snapshot 1.1.17 after release 1.1.16 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4720b4e..1181dcb 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.16 + 1.1.17-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From 2d7597535412881b9f9e706864ebe7dd25a348a8 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:15:33 +0200 Subject: [PATCH 025/135] Improve Check of new value for fallbackRegionCode --- .../phonenumbernormalizer/PhoneNumberNormalizerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java b/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java index 3748e14..4cafef0 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImpl.java @@ -45,7 +45,7 @@ public class PhoneNumberNormalizerImpl implements PhoneNumberNormalizer { @Override public void setFallbackRegionCode(String fallBackRegionCode) { - if (PhoneLibWrapper.getCountryCodeForRegion(fallBackRegionCode) > 0) { + if (fallBackRegionCode != null && !fallBackRegionCode.isEmpty() && PhoneLibWrapper.getCountryCodeForRegion(fallBackRegionCode) > 0) { this.fallbackRegionCode = fallBackRegionCode; } else { this.fallbackRegionCode = null; //invalid region code! From a0a59a56144c3d649e79596deecbcbcb7bbad528 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:05 +0200 Subject: [PATCH 026/135] Split Up Test and check isPossibleNumberWithReason against invalid German NDC - currently up to 03423. --- .../PhoneNumberNormalizerImplTest.groovy | 7 + .../IsPossibleNumberWithReasonTest.groovy | 1045 +++++++++++++++++ .../NormalizationTest.groovy} | 18 +- 3 files changed, 1065 insertions(+), 5 deletions(-) create mode 100644 src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy rename src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/{PhoneNumberUtilTest.groovy => PhoneNumberUtil/NormalizationTest.groovy} (86%) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy index 67514d3..7fdf84b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/PhoneNumberNormalizerImplTest.groovy @@ -19,6 +19,8 @@ import de.telekom.phonenumbernormalizer.dto.DeviceContext import de.telekom.phonenumbernormalizer.dto.DeviceContextDto import de.telekom.phonenumbernormalizer.dto.DeviceContextLineType import de.telekom.phonenumbernormalizer.numberplans.PhoneLibWrapper +import org.slf4j.Logger +import org.slf4j.LoggerFactory import spock.lang.Specification @@ -87,6 +89,10 @@ class PhoneNumberNormalizerImplTest extends Specification { "0176 3 0 6 9 6544" | "DE" | "+4917630696544" "0203556677" | "DE" | "+49203556677" "203556677" | "DE" | "203556677" + "55" | "DE" | "55" + "556" | "DE" | "556" + "5566" | "DE" | "5566" + "55667" | "DE" | "55667" "556677" | "DE" | "556677" "5566778" | "DE" | "5566778" "55667789" | "DE" | "55667789" @@ -201,6 +207,7 @@ class PhoneNumberNormalizerImplTest extends Specification { "116000" | "49" | "203" | "116000" "1160001" | "49" | "203" | "+492031160001" //New Logic, inside german fixed-line non short numbers + "55" | "49" | "203" | "+4920355" "556" | "49" | "203" | "+49203556" "5566" | "49" | "203" | "+492035566" "55667" | "49" | "203" | "+4920355667" diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy new file mode 100644 index 0000000..76f15d2 --- /dev/null +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -0,0 +1,1045 @@ +/* + * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil + +import com.google.i18n.phonenumbers.PhoneNumberUtil +import spock.lang.Specification + +import java.util.logging.Logger + + +// Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 +// NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf +// Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html + +class IsPossibleNumberWithReasonTest extends Specification { + + PhoneNumberUtil phoneUtil + + Logger logger = Logger.getLogger("") + + boolean LOGONLYUNEXPECTED = true + + def "setup"() { + this.phoneUtil = PhoneNumberUtil.getInstance() + System.setProperty("java.util.logging.SimpleFormatter.format", + "%4\$-7s: %5\$s %n") + } + + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("isPossibleNumberWithReason is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("isPossibleNumberWithReason is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed isPossibleNumberWithReason for Emergency short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short code for Police (110) is not dial-able internationally nor does it has additional numbers + "110" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 110555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 110 + // short code for emergency (112) is not dial-able internationally nor does it has additional numbers + "112" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 112555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 112 + } + + def "check if original lib fixed isPossibleNumberWithReason for German Government short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 155 is Public Service Number for German administration, it is internationally reachable only from foreign countries + "115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "0115" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition from within Germany + "+49115" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable, if used on +49110 & +49112 + see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/115/115_Nummernplan_konsolidiert.pdf?__blob=publicationFile&v=1 at chapter 2.3 + "+49115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | true // see https://www.115.de/SharedDocs/Nachrichten/DE/2018/115_aus_dem_ausland_erreichbar.html + // 155 is supporting NDC to reach specific local government hotline: https://www.geoportal.de/Info/tk_05-erreichbarkeit-der-115 + "0203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // TODO: Need to be checked what is correct here + "+49203115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + // 155 does not have additional digits + "115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0115 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203 115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49115 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49115 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203 115555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // end of 115 + } + + + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 137 is masstraffic 10 digits + "0137 000 0000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 00000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0137/0137_Nummernplan.pdf?__blob=publicationFile&v=4 + // within each zone, there are only a few ranges assigned: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/belegteRNB/0137MABEZBelegteRNB_Basepage.html?nn=326370 + // Zone 1 is valid, but only with exactly 10 digits + "0137 100 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 100 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 100 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 2 is valid, but only with exactly 10 digits + "0137 200 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 200 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 200 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 3 is valid, but only with exactly 10 digits + "0137 300 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 300 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 300 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 4 is valid, but only with exactly 10 digits + "0137 400 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 400 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 400 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 5 is valid, but only with exactly 10 digits + "0137 500 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 500 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 500 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 6 is valid, but only with exactly 10 digits + "0137 600 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 600 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 600 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 7 is valid, but only with exactly 10 digits + "0137 700 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 700 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 700 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 8 is valid, but only with exactly 10 digits + "0137 800 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 800 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 800 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // Zone 9 is valid, but only with exactly 10 digits + "0137 900 0000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0137 900 00000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0137 900 000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + + } + + + def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 + // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // end of 116 + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short numbers which are reached internationally are also registered as NDC + // TODO: 010 is operator selection see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/010/010xy_node.html ... will be canceled 31.12.2024 + "010 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0110 is checked in Emergency short codes see above + // --- + "0111 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0112 is checked in Emergency short codes see above + // --- + "0113 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0114 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0115 is checked in German Government short codes see above + // --- + // --- + // 0116 is checked in EU social short codes see above + // --- + "0117 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO: 118 is cal assistance service see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/118xy/start.html + "0118 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + "0119 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "012 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0123 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0131 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0132 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // --- + // 0137 is checked in Mass Traffic see above + // --- + "0138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "014 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0142 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0144 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0146 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO: 015, 016, 017 are mobile see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // TODO: 016x is "Funkruf": see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Funkruf/start.html + // TODO: 018 is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // TODO: 0181 is international VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html + // TODO: 019xyz Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // TODO: 019x is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + + // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html + // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html + // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html + // TODO: 09009 - Dialer: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html + // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html + + + // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 + + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. + "0200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0201 is Essen + // 0202 is Wuppertal + // 0203 is Duisburg + "02040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02041 is Bottrop + "02042 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02043 is Gladbeck + "02044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02051 till 02054 are in use + "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02056 is Heiligenhausen + "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02058 is Wülfrath + "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02064 till 02066 is in use + "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0208 & 0209 is in use + "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02102 till 02104 is in use + "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02131 till 02133 is in use + "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02137 is Neuss-Norf + "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02156 till 02159 is in use + "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02161 till 02166 is in use + "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02171 is Leverkusen-Opladen + "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02173 till 02175 is in use + "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02181 till 02183 is in use + "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02191 till 02193 is in use + "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02195 till 02196 is in use + "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02202 till 02208 is in use + "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0221 is Köln + "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02222 till 02228 is in use + "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02232 till 02238 is in use + "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02241 till 02248 is in use + "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02251 till 02257 is in use + "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02261 till 02269 is in use + "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02271 till 02275 is in use + "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0228 is Bonn + "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02291 till 02297 is in use + "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02323 till 02325 is in use + "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02327 is Bochum-Wattenscheid + "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02330 till 02339 is in use + // 0234 is Bochum + "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02351 till 02355 is in use + "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02371 till 02375 is in use + "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02377 till 02379 is in use + "02380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02381 till 02385 is in use + "02386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02387 till 02389 is in use + "02390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02391 till 02395 is in use + "02396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02401 till 02409 is in use + // 0241 is Aachen + "02420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02421 till 02429 is in use + "02430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02431 till 02436 is in use + "02437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02440 till 02441 is in use + "02442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02443 till 02449 is in use + "02450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02451 till 02456 is in use + "02457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02461 till 02465 is in use + "02466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02471 till 02474 is in use + "02475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02482 is Hellenthal + "02483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02484 till 02486 is in use + "02487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02501 till 02502 is in use + "02503 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02504 till 02509 is in use + // 0251 is Münster + // 02520 till 02529 is in use + "02530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02532 till 02536 is in use + "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02538 is Drensteinfurt-Rinkerode + "02539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02541 till 02543 is in use + "02544 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02545 till 02548 is in use + "02549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02551 till 02558 is in use + "02559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02561 till 02568 is in use + "02569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02571 till 02575 is in use + "02576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02581 till 02588 is in use + "02589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02590 till 02599 is in use + "02600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02601 till 02608 is in use + "02609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0261 is Koblenz am Rhein + // 02620 till 02628 is in use + "02629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02630 till 02639 is in use + "02640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02641 till 02647 is in use + "02648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02651 till 02657 is in use + "02658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02661 till 02664 is in use + "02665 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02666 till 02667 is in use + "02668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02671 till 02678 is in use + "02679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02680 till 02689 is in use + "02690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02691 till 02697 is in use + "02698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0271 is Siegen + "02720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02721 till 02725 is in use + "02726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02731 till 02739 is in use + "02740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02741 till 02745 is in use + "02746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02747 is Molzhain + "02748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02750 till 02755 is in use + "02756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02758 till 02759 is in use + "02760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02761 till 02764 is in use + "02765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02770 till 02779 is in use + "02780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02781 till 02784 is in use + "02785 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02793 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02796 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02797 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02801 till 02804 is in use + "02805 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0281 is Wesel + "02820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02821 till 02828 is in use + "02829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02831 till 02839 is in use + "02840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02841 till 02845 is in use + "02846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02850 till 02853 is in use + "02854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02855 till 02859 is in use + "02860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02861 till 02867 is in use + "02868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02871 till 02874 is in use + "02875 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02902 till 02905 is in use + "02906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0291 is Meschede + "02920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02921 till 02925 is in use + "02926 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02927 till 02928 is in use + "02929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02931 till 02935 is in use + "02936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02937 till 02938 is in use + "02939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02941 till 02945 is in use + "02946 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02947 till 02948 is in use + "02949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02951 till 02955 is in use + "02956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02957 till 02958 is in use + "02959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02961 till 02964 is in use + "02965 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02966 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02971 till 02975 is in use + "02976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02977 is Schmallenberg-Bödefeld + "02978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02981 till 02985 is in use + "02986 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02991 till 02994 is in use + "02995 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02996 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02997 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 030 is Berlin + // 0310 is National Test for length 3 -> TODO: OWN Test + // 0311 is National Test for length 3 -> TODO: OWN Test + "0312 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0313 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0314 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0315 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0316 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0317 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0318 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0319 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 032 is non geographical 11 till 13 length -> TODO: OWN Test + "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03301 till 03304 is in use + "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033051 till 033056 is in use + "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03306 till 03307 is in use + // 033080 is Marienthal Kreis Oberhavel + "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033082 till 033089 is in use + "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033093 till 033094 is in use + "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0331 is Potsdam + // 033200 till 033209 is in use + // 03321 is Nauen Brandenburg + // 03322 is Falkensee + // 033230 till 033235 is in use + "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033237 till 033239 is in use + "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03327 till 03329 is in use + "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03331 till 03332 is in use + "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033331 till 033338 is in use + "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03334 till 03335 is in use + "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033361 till 033369 is in use + // 03337 till 03338 is in use + "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033393 till 033398 is in use + "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03341 till 03342 is in use + "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033432 till 033439 is in use + // 03344 is Bad Freienwalde + "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033451 till 033452 is in use + "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033454 is Wölsickendorf/Wollenberg + "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033456 till 033458 is in use + "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03346 is Seelow + // 033470 is Lietzen + "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033472 till 033479 is in use + // 0335 is Frankfurt (Oder) + "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033601 till 033609 is in use + // 03361 till 03362 is in use + "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033631 till 033638 is in use + "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03364 is Eisenhüttenstadt + "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033652 till 033657 is in use + "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03366 is Beeskow + "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033671 till 033679 is in use + "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033701 till 033704 is in use + "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033708 is Rangsdorf + "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03371 till 03372 is in use + "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033731 till 033734 is in use + "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033741 till 033748 is in use + "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03375 is Königs Wusterhausen + // 33760 is Münchehofe Kreis Dahme-Spreewald + "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033762 till 033769 is in use + // 03377 till 03379 is in use + "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03381 till 03382 is in use + // 033830 till 033839 is in use + "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033841 is Belzig + "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033843 till 033849 is in use + // 03385 till 03386 is in use + // 033870 is Zollchow bei Rathenow + "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033872 till 033878 is in use + "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03391 is Neuruppin + // 033920 till 033929 is in use + "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033931 till 033933 is in use + "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03394 till 03395 is in use + "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033962 till 033969 is in use + // 033970 till 033979 is in use + "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033981 till 033984 is in use + "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033986 is Falkenhagen Kreis Prignitz + "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 033989 is Sadenbeck + "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0340 till 0341 is in use + "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034202 till 034208 is in use + "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03421 is Torgau + "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034221 till 034224 is in use + "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03423 is Eilenburg + + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValidNumber: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + if (result != expectedResult) { + if (expectingFail) { + logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } else { + logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("!!! isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + + where: + + number | regionCode | expectedResult | expectingFail + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just + "02040 556677" | "DE" | false | true + // 02041 is Bottrop + "02042 556677" | "DE" | false | true + // 02043 is Gladbeck + "02044 556677" | "DE" | false | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | false | true + /* + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02051 till 02054 are in use + "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02056 is Heiligenhausen + "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02058 is Wülfrath + "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02064 till 02066 is in use + "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0208 & 0209 is in use + "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02102 till 02104 is in use + "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02131 till 02133 is in use + "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02137 is Neuss-Norf + "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02156 till 02159 is in use + "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02161 till 02166 is in use + "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02171 is Leverkusen-Opladen + "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02173 till 02175 is in use + "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02181 till 02183 is in use + "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02191 till 02193 is in use + "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02195 till 02196 is in use + "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02202 till 02208 is in use + "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0221 is Köln + "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02222 till 02228 is in use + "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02232 till 02238 is in use + "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02241 till 02248 is in use + "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02251 till 02257 is in use + "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02261 till 02269 is in use + "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02271 till 02275 is in use + "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0228 is Bonn + "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02291 till 02297 is in use + "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02323 till 02325 is in use + "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02327 is Bochum-Wattenscheid + "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02330 till 02339 is in use + // 0234 is Bochum + "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02351 till 02355 is in use + "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02371 till 02375 is in use + "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 02377 till 02379 is in use + */ + } + + +} \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy similarity index 86% rename from src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy rename to src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index a92ea97..d8aa600 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtilTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.telekom.phonenumbernormalizer.extern.libphonenumber +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification import java.util.logging.Logger -class PhoneNumberUtilTest extends Specification { +class NormalizationTest extends Specification { PhoneNumberUtil phoneUtil @@ -65,6 +65,10 @@ class PhoneNumberUtilTest extends Specification { "0176 3 0 6 9 6544" | "DE" | "+4917630696544" | false "0203556677" | "DE" | "+49203556677" | false "203556677" | "DE" | "203556677" | true + "55" | "DE" | "55" | true + "556" | "DE" | "556" | true + "5566" | "DE" | "5566" | true + "55667" | "DE" | "55667" | true "556677" | "DE" | "556677" | true "5566778" | "DE" | "5566778" | true "55667789" | "DE" | "55667789" | true @@ -83,10 +87,10 @@ class PhoneNumberUtilTest extends Specification { when: "get number isPossibleNumberWithReason: $number" - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + def result1 = phoneUtil.isPossibleNumberWithReason(phoneNumber) then: "is number expected: $expectedResult" - if (result != expectedResult) { + if (result1 != expectedResult) { if (expectingFail) { logger.info("PhoneLib is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } else { @@ -111,6 +115,10 @@ class PhoneNumberUtilTest extends Specification { "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true @@ -122,5 +130,5 @@ class PhoneNumberUtilTest extends Specification { "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false } -} +} \ No newline at end of file From cc032746418e5beb33114ff8018f1b6e90fb1723 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:58 +0200 Subject: [PATCH 027/135] Prepare new ValidationResult Enum for upcomming wrapper method. --- .../PhoneNumberValidationResult.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java new file mode 100644 index 0000000..a72ece6 --- /dev/null +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -0,0 +1,68 @@ +package de.telekom.phonenumbernormalizer.numberplans; + +import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult; + +/** + * Wrapper around the PhoneLib enum {@link ValidationResult} from Google + *

+ * When the PhoneLib is validating a phone number it returns a value of the enum {@link ValidationResult}. + *

+ * It differentiate two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} for any negative case, which is not explicitly covered by any of the other four values. + * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focus on a specific number part - the Country Code. + *

+ * Validation of other parts of the number are not covered by an own value. So this enum wrapper is introducing {@link PhoneNumberValidationResult#INVALID_NATIONAL_ACCESS_CODE} for number plans with a national access code. + *

+ * @see ValidationResult + */ + + +// TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 + +public enum PhoneNumberValidationResult { + + /** The number length matches that of valid numbers for this region. */ + IS_POSSIBLE(ValidationResult.IS_POSSIBLE), + /** + * The number length matches that of local numbers for this region only (i.e. numbers that may + * be able to be dialled within an area, but do not have all the information to be dialled from + * anywhere inside or outside the country). + */ + IS_POSSIBLE_LOCAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** The number has an invalid country calling code. */ + INVALID_COUNTRY_CODE(ValidationResult.INVALID_COUNTRY_CODE), + /** The number has an invalid national access code. */ + INVALID_NATIONAL_ACCESS_CODE(ValidationResult.INVALID_LENGTH), + /** The number is shorter than all valid numbers for this region. */ + TOO_SHORT(ValidationResult.TOO_SHORT), + /** + * The number is longer than the shortest valid numbers for this region, shorter than the + * longest valid numbers for this region, and does not itself have a number length that matches + * valid numbers for this region. This can also be returned in the case where + * isPossibleNumberForTypeWithReason was called, and there are no numbers of this type at all + * for this region. + */ + INVALID_LENGTH(ValidationResult.INVALID_LENGTH), + /** The number is longer than all valid numbers for this region. */ + TOO_LONG(ValidationResult.TOO_LONG); + /** + * storing the corresponding enum value of {@link ValidationResult} + */ + private final ValidationResult phoneLibResult; + + /** + * Initializing a PhoneNumberValidationResult enum value with a corresponding {@link ValidationResult} enum value + * @param phoneLibResult corresponding {@link ValidationResult} enum value + */ + PhoneNumberValidationResult(ValidationResult phoneLibResult) { + this.phoneLibResult = phoneLibResult; + } + + /** + * Returns best matching corresponding {@link ValidationResult} enum value for an instance of a {@link PhoneNumberValidationResult} enum value + * @return corresponding {@link ValidationResult} enum value + */ + public ValidationResult getPhoneLibValidationResult() { + return phoneLibResult; + } + +} From f0f57a52d16b3b1099b8c90d0cde84edfefdda56 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 13 Oct 2023 13:08:25 +0200 Subject: [PATCH 028/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 03501 --- .../IsPossibleNumberWithReasonTest.groovy | 164 +++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 76f15d2..e4091ad 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -876,7 +876,169 @@ class IsPossibleNumberWithReasonTest extends Specification { "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03423 is Eilenburg - + "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034241 till 034244 is in use + "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03425 is Wurzen + "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034261 till 034263 is in use + "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034291 till 034293 is in use + "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03431 is Döbeln + "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034321 till 034322 is in use + "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034324 till 034325 is in use + "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034327 till 034328 is in use + "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03433 is Borna Stadt + "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034341 till 034348 is in use + "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03435 is Oschatz + "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034361 till 034364 is in use + "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03437 is Grimma + "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034381 till 034386 is in use + "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03441 is Zeitz + "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034422 till 034426 is in use + "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03443 is Weissenfels Sachsen-Anhalt + "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034441 is Hohenmölsen + "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034443 till 034446 is in use + "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03445 is Naumburg Saale + "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034461 till 034467 is in use + "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03447 till 03448 is in use + "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034491 till 034498 is in use + "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0345 is Halle Saale + // 034600 toll 034607 is in use + "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034609 is Salzmünde + // 03461 till 03462 is in use + "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034632 till 034633 is in use + "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034635 till 034639 is in use + // 03464 is Sangerhausen + "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034651 till 034654 is in use + "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034656 is Wallhausen Sachsen-Anhalt + "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034658 till 034659 is in use + // 03466 is Artern Unstrut + "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034671 till 034673 is in use + "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034691 till 034692 is in use + "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03471 is Bernburg Saale + "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034721 till 034722 is in use + "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 3473 is Aschersleben Sachsen-Anhalt + "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034741 till 034743 is in use + "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034745 till 034746 is in use + "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03475 till 03476 is in use + "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034771 till 034776 is in use + "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034779 is Abberode + "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034781 till 034783 is in use + "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034785 is Sandersleben + "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034901 is Roßlau Elbe + "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034903 till 034907 + "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034909 is Aken Elbe + // 03491 till 03494 (yes full 03492x is used, too) is in use + "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034953 till 034956 + "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03496 is Köthen Anhalt + "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034973 is Osternienburg + "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 034975 till 034979 is in use + "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03501 is Pirna } From 1ee3f78f8bd9f108b2502b11c6bc3b825d124526 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 15 Oct 2023 15:42:30 +0200 Subject: [PATCH 029/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 03601 --- .../IsPossibleNumberWithReasonTest.groovy | 170 +++++++++++++++++- 1 file changed, 167 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index e4091ad..5c92fac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1035,10 +1035,174 @@ class IsPossibleNumberWithReasonTest extends Specification { // 034973 is Osternienburg "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034975 till 034979 is in use - "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03501 is Pirna + "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035032 till 035033 is in use + "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03504 is Dippoldiswalde + "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035052 till 035058 + "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0351 is Dresden + // 03520x till 03525 is in use (inclusive complete 03524x) + "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035263 till 035268 + "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03529 till 03529 is in use + "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03531 is Finsterwalde + "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035322 till 035327 + "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035329 is Dollenchen + // 03533 is Elsterwerda + "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035341 till 035343 + "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03535 is Herzberg Elster + "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035361 till 035365 is in use + "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03537 is Jessen Elster + "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035383 till 035389 is in use + "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03541 till 03542 is in use + "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035433 till 035436 is in use + "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035439 is Zinnitz + // 03544 is Luckau Brandenburg + "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035451 till 035456 is in use + "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03546 is Lübben Spreewald + "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035471 till 035478 is in use + "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0355 is Cottbus + // 03560x till 03564 is in use + "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035691 till 035698 is in use + "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03571 is Hoyerswerda + "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035722 till 035728 is in use + "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03573 till 03574 is in use + "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035751 till 035756 is in use + "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03576 is Weisswasser + "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035771 till 035775 is in use + "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03578 is Kamenz + "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035792 till 035793 is in use + "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035795 till 035797 is in use + "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03581 is Görlitz + // 035820 is Zodel + "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035822 till 035823 is in use + "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035825 till 035829 is in use + // 03583 is Zittau + "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035841 till 035844 is in use + "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03585 till 03586 is in use + "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035872 till 035877 is in use + "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03588 is Niesky + "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035891 till 0358595 is in use + "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03591 till 03594 (including total 03593x) is in use + "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035951 till 035955 is in use + "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03596 is Neustadt in Sachsen + "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 035971 till 035975 is in use + "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03601 till 03603 (including total 03602x) is in use + "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + } From f1c97299a52e61d9e29eb939a2718b9750f5bc23 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 15 Oct 2023 16:37:36 +0200 Subject: [PATCH 030/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 037201 --- .../IsPossibleNumberWithReasonTest.groovy | 769 +++++++++++------- 1 file changed, 460 insertions(+), 309 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 5c92fac..a42a7ca 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -721,486 +721,637 @@ class IsPossibleNumberWithReasonTest extends Specification { "0318 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0319 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 032 is non geographical 11 till 13 length -> TODO: OWN Test - "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03301 till 03304 is in use - "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033051 till 033056 is in use - "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03306 till 03307 is in use // 033080 is Marienthal Kreis Oberhavel - "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033082 till 033089 is in use - "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033093 till 033094 is in use - "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0331 is Potsdam // 033200 till 033209 is in use // 03321 is Nauen Brandenburg // 03322 is Falkensee // 033230 till 033235 is in use - "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033237 till 033239 is in use - "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03327 till 03329 is in use - "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03331 till 03332 is in use - "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033331 till 033338 is in use - "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03334 till 03335 is in use - "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033361 till 033369 is in use // 03337 till 03338 is in use - "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033393 till 033398 is in use - "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03341 till 03342 is in use - "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033432 till 033439 is in use // 03344 is Bad Freienwalde - "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033451 till 033452 is in use - "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033454 is Wölsickendorf/Wollenberg - "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033456 till 033458 is in use - "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03346 is Seelow // 033470 is Lietzen - "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033472 till 033479 is in use // 0335 is Frankfurt (Oder) - "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033601 till 033609 is in use // 03361 till 03362 is in use - "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033631 till 033638 is in use - "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03364 is Eisenhüttenstadt - "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033652 till 033657 is in use - "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03366 is Beeskow - "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033671 till 033679 is in use - "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033701 till 033704 is in use - "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033708 is Rangsdorf - "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03371 till 03372 is in use - "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033731 till 033734 is in use - "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033741 till 033748 is in use - "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03375 is Königs Wusterhausen // 33760 is Münchehofe Kreis Dahme-Spreewald - "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033762 till 033769 is in use // 03377 till 03379 is in use - "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03381 till 03382 is in use // 033830 till 033839 is in use - "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033841 is Belzig - "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033843 till 033849 is in use // 03385 till 03386 is in use // 033870 is Zollchow bei Rathenow - "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033872 till 033878 is in use - "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03391 is Neuruppin // 033920 till 033929 is in use - "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033931 till 033933 is in use - "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03394 till 03395 is in use - "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033962 till 033969 is in use // 033970 till 033979 is in use - "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033981 till 033984 is in use - "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033986 is Falkenhagen Kreis Prignitz - "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033989 is Sadenbeck - "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0340 till 0341 is in use - "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034202 till 034208 is in use - "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03421 is Torgau - "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034221 till 034224 is in use - "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03423 is Eilenburg - "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034241 till 034244 is in use - "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03425 is Wurzen - "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034261 till 034263 is in use - "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034291 till 034293 is in use - "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03431 is Döbeln - "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034321 till 034322 is in use - "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034324 till 034325 is in use - "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034327 till 034328 is in use - "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03433 is Borna Stadt - "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034341 till 034348 is in use - "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03435 is Oschatz - "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034361 till 034364 is in use - "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03437 is Grimma - "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034381 till 034386 is in use - "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03441 is Zeitz - "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034422 till 034426 is in use - "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03443 is Weissenfels Sachsen-Anhalt - "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034441 is Hohenmölsen - "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034443 till 034446 is in use - "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03445 is Naumburg Saale - "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034461 till 034467 is in use - "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03447 till 03448 is in use - "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034491 till 034498 is in use - "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0345 is Halle Saale // 034600 toll 034607 is in use - "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034609 is Salzmünde // 03461 till 03462 is in use - "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034632 till 034633 is in use - "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034635 till 034639 is in use // 03464 is Sangerhausen - "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034651 till 034654 is in use - "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034656 is Wallhausen Sachsen-Anhalt - "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034658 till 034659 is in use // 03466 is Artern Unstrut - "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034671 till 034673 is in use - "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034691 till 034692 is in use - "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03471 is Bernburg Saale - "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034721 till 034722 is in use - "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 3473 is Aschersleben Sachsen-Anhalt - "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034741 till 034743 is in use - "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034745 till 034746 is in use - "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03475 till 03476 is in use - "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034771 till 034776 is in use - "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034779 is Abberode - "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034781 till 034783 is in use - "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034785 is Sandersleben - "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034901 is Roßlau Elbe - "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034903 till 034907 - "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034909 is Aken Elbe // 03491 till 03494 (yes full 03492x is used, too) is in use - "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034953 till 034956 - "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03496 is Köthen Anhalt - "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034973 is Osternienburg - "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034975 till 034979 is in use - "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03501 is Pirna - "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035032 till 035033 is in use - "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03504 is Dippoldiswalde - "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035052 till 035058 - "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0351 is Dresden // 03520x till 03525 is in use (inclusive complete 03524x) - "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035263 till 035268 - "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03529 till 03529 is in use - "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03531 is Finsterwalde - "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035322 till 035327 - "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035329 is Dollenchen // 03533 is Elsterwerda - "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035341 till 035343 - "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03535 is Herzberg Elster - "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035361 till 035365 is in use - "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03537 is Jessen Elster - "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035383 till 035389 is in use - "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03541 till 03542 is in use - "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035433 till 035436 is in use - "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035439 is Zinnitz // 03544 is Luckau Brandenburg - "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035451 till 035456 is in use - "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03546 is Lübben Spreewald - "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035471 till 035478 is in use - "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0355 is Cottbus // 03560x till 03564 is in use - "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035691 till 035698 is in use - "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03571 is Hoyerswerda - "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035722 till 035728 is in use - "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03573 till 03574 is in use - "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035751 till 035756 is in use - "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03576 is Weisswasser - "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035771 till 035775 is in use - "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03578 is Kamenz - "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035792 till 035793 is in use - "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035795 till 035797 is in use - "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03581 is Görlitz // 035820 is Zodel - "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035822 till 035823 is in use - "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035825 till 035829 is in use // 03583 is Zittau - "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035841 till 035844 is in use - "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03585 till 03586 is in use - "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035872 till 035877 is in use - "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03588 is Niesky - "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035891 till 0358595 is in use - "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03591 till 03594 (including total 03593x) is in use - "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035951 till 035955 is in use - "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03596 is Neustadt in Sachsen - "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035971 till 035975 is in use - "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03601 till 03603 (including total 03602x) is in use - "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036041 till 036043 is in use + "036044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036045 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03605 till 03606 is in use + "036070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036071 till 036072 is in use + "036073 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036074 till 036077 is in use + "036078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036081 till 036085 is in use + "036086 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036087 is Wüstheuterode + "036088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0361 is Erfurt + // 03620x till 03624 is in use + "036250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036251 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036252 till 036259 is in use + "03626 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03628 till 03629 is in use + "03630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03631 till 03632 is in use + // 036330 till 036338 is in use + "036339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03634 till 03637x is in use + "03638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03641 is Jena + "036420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036421 till 036428 is in use + "036429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03643 till 03644 is in use + // 036450 till 036454 is in use + "036455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036456 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036458 till 036459 is in use + "036460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036461 till 036465 is in use + "036466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03647 is Pößneck + "036480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036481 till 036484 is in use + "036485 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0365 is Gera + "036600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036601 till 036608 is in use + "036609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03661 is Greiz + "036620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036621 till 036626 is in use + "036627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036628 is Zeulenroda + "036629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03663 is Schleiz + // 036640 is Remptendorf + "036641 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036642 till 036649 is in use + "036650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036651 till 036653 is in use + "036654 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036656 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03666 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036691 till 036695 is in use + "036696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036701 till 036705 is in use + "036706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036708 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03671 till 03673x is in use + "036740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036741 till 03644 is in use + "036745 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03675 is Heubisch + "036760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036761 till 036762 is in use + "036763 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036764 is Neuhaus-Schierschnitz + "036765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036766 is SChalkau + "036767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03677 is Ilmenau Thüringen + "036780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036781 till 036785 is in use + "036786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03679 is Suhl + "03680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03681 till 03686 (inlcuding total 03684x) is in use + // 036870 till 036871 is in use + "036872 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036873 till 036875 is in use + "036876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036878 is Oberland + "036879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036891 till 03693 (including total 036892x) is in use + // 0368940 till 0368941 is in use + "036942 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0368943 till 0368949 is in use + // 03695 is Bad Salzungen + "036960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 036961 till 036969 is in use + "03697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0371 is Chemnitz Sachsen + // 037200 is Wittgensdorf bei Chemnitz + "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From ee4cb30dbc09b28dd48fa1af204e0e2c378e0118 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 15 Oct 2023 17:01:30 +0200 Subject: [PATCH 031/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 038239 --- .../IsPossibleNumberWithReasonTest.groovy | 79 ++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index a42a7ca..eebb457 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1351,8 +1351,83 @@ class IsPossibleNumberWithReasonTest extends Specification { "0370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0371 is Chemnitz Sachsen // 037200 is Wittgensdorf bei Chemnitz - "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037202 till 03724 is in use + "037205 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037206 till 037209 is in use + // 03721 till 03727 is in use + "03728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037291 till 037298 is in use + "037299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03731 till 03733 (including total 03732x) is in use + "037340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037341 till 037344 is in use + "037345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037346 till 037349 is in use + // 03735 till 03737 (including total 03736x) is in use + "037380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037381 till 037384 is in use + "037385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03741 is Plauen + "037420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037421 till 037423 is in use + "037424 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037426 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03473x till 03745 is in use + "037460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037461 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037462 till 037465 is in use + "037466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037467 till 037468 is in use + "037469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0375 is Zwickau + // 03760x till 03765 is in use + "03766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03771 till 03774 is in use + "037750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037751 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037752 is Eibenstock + "037753 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 037754 till 037757 + "037758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0381 is Rostock + "038200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038201 till 038209 + // 03821 till 03822x + "038230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038231 till 038234 + "038235 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 1f3e72702e3754e256e3e1b85b8e8e50401eb813 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Mon, 16 Oct 2023 17:58:25 +0200 Subject: [PATCH 032/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 039220 --- .../IsPossibleNumberWithReasonTest.groovy | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index eebb457..5df34fb 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1428,6 +1428,123 @@ class IsPossibleNumberWithReasonTest extends Specification { "038237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "038238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "038239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03825 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03826 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038292 till 038297 is in use + "038298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03830x till 03831 is in use + // 038320 till 038328 is in use + "038329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08331 till 038334 is in use + "038335 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038336 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038337 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03834 is Greifswald + "038350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038351 till 038356 is in use + "038357 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038358 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03836 till 03838 (including total 03837x) is in use + "038390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038391 till 038393 is in use + "038394 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038395 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03841 id Neukloster + "038420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038422 till 038429 + // 03843 till 03845x is in use + "038460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038461 till 038462 is in use + "038463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038464 is Bernitt + "038465 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038466 is Jürgenshagen + "038467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03847 is Sternberg + "038480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038481 till 038486 is in use + "038487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038488 is Demen + "038489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0385 is Schwerin + // 03860 till 03861 is in use + "03862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03863 is Crivitz + "03864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03865 till 03869 is in use + "03870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03871 till 03872x is in use + "038730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038731 till 038733 is in use + "038734 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038735 till 038738 is in use + "038739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03874 till 03877 (including total 03875x) is in use + // 038780 till 038785 is in use + "038786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038787 till 038789 is in use + "038790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038791 till 038794 + "038795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038796 till 038797 + "038798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03881 is Grevesmühlen + "038820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038821 till 038828 is in use + "038829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03883 is Hagenow + "038840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038841 till 038845 is in use + "038846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038847 till 038848 is in use + "038849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038850 till 038856 is in use + "038857 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038858 till 038859 is in use + // 03886 is Gadebusch + "038870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 038871 till 038876 is in use + "038877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03900x till 03905x (including total 03903x) is in use + "039060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039061 till 039062 is in use + "039063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039066 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03907 till 03909 (including total 03908x) is in use + // 0391 is Magdeburg + // 03920x till 03921 is in use + "039220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 75b33abafe0a7701d69918bc0dfbbe854b7d592c Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 18 Oct 2023 07:36:16 +0200 Subject: [PATCH 033/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 04190 --- .../IsPossibleNumberWithReasonTest.groovy | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 5df34fb..44e7d6f 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1545,6 +1545,154 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0391 is Magdeburg // 03920x till 03921 is in use "039220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039221 till 039226 is in use + "039227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03923 is Zerbst + "039240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039241 till 039248 is in use + "0392498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 032925 is Stassfurt + "039260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039262 till 039268 is in use + "039269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03927 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03928 is Schönebeck Elbe + "039290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039291 till 039298 is in use + "039299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03931 is Stendal + // 039320 till 039325 is in use + "039326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039327 till 039329 is in use + // 03933 is Genthin + "039340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039341 till 039349 is in use + // 03935 is Tangerhütte + "039360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039361 till 039366 is in use + "039367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03937 is Osterburg Altmark + "039380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039382 till 039384 is in use + "039385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039386 till 039389 is in use + // total 03939x is in use + // 03940x till 03941 is in use + "039420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039421 till 039428 is in use + "039429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03943 till 03944 is in use + "039450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039451 till 039459 is in use + // 03946 till 03947 is in use + "039480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039481 till 039485 is in use + "039486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039487 till 039489 is in use + // 03949 is Oschersleben Bode + // 0395 is Zwiedorf + // 039600 till 039608 is in use + "039609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03961 till 03969 is in use + "03970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03971 is Anklam + "039720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039721 till 039724 is in use + "039725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039726 till 039728 is in use + "039729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03973 till 03974x is in use + "039750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039751 till 039754 is in use + "039755 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03976 is Torgelow bei Uckermünde + "039770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039771 till 039779 is in use + "03980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03981 to 03982x is in use + "039830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039831 till 039833 is in use + "039834 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039835 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039836 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039837 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039838 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03984 is Prenzlau + "039850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039851 till 039859 is in use + "039860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039861 till 039863 is in use + "039863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039865 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03987 is Templin + "039880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039881 till 039889 is in use + "03989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03991 is Waren Müritz + "039920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039921 till 039929 is in use + "039930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039931 till 039934 is in use + "039935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03994 is Malchin + "039950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039951 till 039957 is in use + "039958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039959 is Dargun + // 03996 is Teterow + "039970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039971 till 039973 is in use + "039974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039975 till 039978 + "039979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 03998 is Demmin + "039990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 039991 till 039999 is in use + // 040 is Hamburg + "04100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04101 till 04109 is in use + "0411 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0412x is in use + "04130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04131 till 04139 is in use + // 04140 till 04144 is in use + "04145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04146 is Stade-Bützfleth + "04147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04148 till 04149 is in use + "04150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04151 till 04156 is in use + "04157 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04158 till 04159 is in use + "04160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04161 till 04169 is in use + "04170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04171 till 04179 is in use + // total 0418x is in sue + "04190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } From 8283e7bc329ef34fdcb0fb36d801b987378b9e39 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Thu, 19 Oct 2023 18:04:17 +0200 Subject: [PATCH 034/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 04601 --- .../IsPossibleNumberWithReasonTest.groovy | 131 +++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 44e7d6f..193d3ac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1692,7 +1692,136 @@ class IsPossibleNumberWithReasonTest extends Specification { // 04171 till 04179 is in use // total 0418x is in sue "04190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + // 04191 till 04195 is in use + "04196 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04202 till 04209 is in use + // 0421 is Bremen + "04220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04221 till 04224 is in use + "04225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0423x till 0424x is in use + "04250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04251 till 04258 is in use + "04259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0426x is in use + "04270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04271 till 04277 is in use + "04278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04281 till 04289 is in use + "04290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04292 till 04298 is in use + "04299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04302 till 04303 is in use + "04304 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04305 is Westensee + "04306 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04307 till 04308 is in use + "04309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0431 till 0433x (including total 0432x) is in use + // 04340 is Achterwehr + "04341 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04342 till 04346 is in use + "04350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04351 till 04358 is in use + "04359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04361 till 04367 is in use + "04368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04371 till 04372 is in use + "04373 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04374 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04375 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04381 till 04385 is in use + "04386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04392 till 04394 is in use + "04395 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04401 till 04409 is in use + // 0441 is Oldenburg (Oldb) + "04420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04421 till 04423 is in use + "04424 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04425 till 04426 is in use + "04427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04431 till 04435 is in use + "04436 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04441 till 04447 is in use + "04448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04451 till 04456 is in use + "04457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04458 is Wiefeldstede-Spohle + "04459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04461 till 04469 is in use + "04470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04471 till 04475 is in use + "04476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04477 till 04479 is in use + // total 0448x is in use + "04490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04491 till 1199 is in use + "04500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04501 till 04506 is in use + "04507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04508 till 0459 is in use + // 0451 is Lübeck + "04520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04521 till 04529 is in use + "04530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04531 till 04537 is in use + "04538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04539 is Westerau + "04540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04541 till 04547 is in use + "04548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0455x is in use + "04560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04561 till 04564 is in use + "0457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 134f072417d14ac9830927fa8d9edda3f60a6e4d Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Thu, 19 Oct 2023 20:46:14 +0200 Subject: [PATCH 035/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 05029 --- .../IsPossibleNumberWithReasonTest.groovy | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 193d3ac..22e873c 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1822,6 +1822,146 @@ class IsPossibleNumberWithReasonTest extends Specification { "0459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "04600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "04601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04602 till 04609 is in use + // 0461 is Flensburg + "04620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04621 till 04627 is in use + "04628 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0463x is in use + "04640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04641 till 04644 is in use + "04645 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04646 is Morkirch + "04647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04651 is Sylt + "04652 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04653 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04654 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04656 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04661 till 04668 is in use + "04669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04671 till 04674 is in use + "04675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04681 till 04684 is in use + "04685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04702 till 04708 is in use + "04709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0471 is Bremerhaven + "04720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04721 till 04725 is in use + "04726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04731 till 04737 is in use + "04738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0474x is in use + "04750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04751 till 04758 is in use + "04759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04761 till 04769 is in use + // total 0477x is in use + "0478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04791 till 04796 is in use + "04800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04802 till 04806 is in use + "04807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0481 is Heide Holstein + "04820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04821 till 04829 is in use + // 04830 is Süderhastedt + "04831 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04832 till 04839 is in use + "04840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04841 till 04849 os in use + "04850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04851 till 04859 is in use + "04860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04861 till 04865 is in use + "04866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04871 till 04877 is in use + "04878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04881 till 04885 is in use + "04886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04891 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04892 till 04893 is in use + "04894 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04895 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04902 till 04903 is in use + "04904 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04905 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0491 is Leer Ostfriesland + // total 0492x is in use + "04930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04931 till 04936 is in use + "04937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04938 till 04939 is in use + "04940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04941 till 04948 is in use + "04949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0495x is in use + "04960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04961 till 04968 is in use + "04969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 04971 till 04977 is in use + "04978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05021 till 05028 is in use + "05029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 33385904b7e8f9e02db9612f261924aae435e45e Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 21 Oct 2023 21:15:34 +0200 Subject: [PATCH 036/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 05620 --- .../IsPossibleNumberWithReasonTest.groovy | 225 ++++++++++++++++++ 1 file changed, 225 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 22e873c..ec1bf79 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1962,6 +1962,231 @@ class IsPossibleNumberWithReasonTest extends Specification { "05020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05021 till 05028 is in use "05029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05031 till 05037 is in use + "05038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05041 till 05045 is in use + "05046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05051 till 05056 is in use + "05057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05060 is Bodenburg + "05061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05062 till 05069 is in use + "05070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05071 till 05074 is in use + "05075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05082 till 05086 is in use + "05087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05101 till 05103 is in use + "05104 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05105 is Barsinghausen + "05106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05108 till 05109 is in use + // 0511 is Hannover + "05120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05121 is Hildesheim + "05122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05123 is Schellerten + "05124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05126 till 05129 is in use + // 05130 till 05132 is in use + "05133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05135 till 05139 is in use + "05140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05141 till 05149 is in use + "05150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05151 till 05159 is in use + "05160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05161 till 05168 is in use + "05169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05171 till 05177 is in use + "05178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05181 till 05187 is in use + "05188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0519x is in use + "05200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05201 till 05209 is in use + // 0521 is Bielefeld + "05220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05221 till 05226 is in use + "05227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05228 is Vlotho-Exter + "05229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05231 till 05238 is in use + "05239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05241 till 0522 is in use + "05243 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05244 till 05248 is in use + "05249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05250 till 05255 is in use + "05256 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05257 till 05259 is in use + "05260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05261 till 05266 is in use + "05267 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05268 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05271 till 05278 is in use + "05279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05281 till 05286 is in use + "05287 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05292 till 05295 is in use + "05296 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0530x is in use + // 0531 is Braunschweig + // total 0532x is in use + "05330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05331 till 05337 is in use + "05338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05339 is Gielde + "05340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05341 is Salzgitter + "05342 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05343 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05344 till 05347 is in use + "05348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05351 till 05358 is in use + "05359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05361 till 05368 is in use + "05369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05371 till 05379 is in use + "05380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05381 till 05384 is in use + "05385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05401 till 05407 is in use + "05408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05409 is Hilter am Teutoburger Wald + // 0541 Osnabrück + "05420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05421 till 05429 is in use + "05430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05431 till 05439 is in use + "05440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05441 till 05448 is in use + "05449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05451 till 05459 is in use + "05460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05461 till 05462 is in use + "05463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05464 till 05468 is in use + "05469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05471 till 05476 is in use + "05477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05481 till 05485 is in use + "05486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05491 till 05495 is in use + "05496 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05497 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05502 till 05509 is in use + // 0551 is Göttingen + // 05520 till 05525 is in use + "05526 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05527 till 05529 is in use + "05530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05531 till 05536 is in use + "05537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05541 till 05546 is in use + "05547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05551 till 05556 is in use + "05557 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05558 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05561 till 05565 is in use + "05566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05571 till 05574 is in use + "05575 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05581 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05582 till 05586 is in use + "05587 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05591 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05592 till 05594 is in use + "05595 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05596 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05597 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05601 till 05609 is in use + // 0561 is Kassel + "05620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 3a528498d815ddad6718180c5758c930b0a1fc17 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 22 Oct 2023 21:09:48 +0200 Subject: [PATCH 037/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 06109 --- .../IsPossibleNumberWithReasonTest.groovy | 191 +++++++++++++++++- 1 file changed, 190 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index ec1bf79..f5377b7 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2187,7 +2187,196 @@ class IsPossibleNumberWithReasonTest extends Specification { // 05601 till 05609 is in use // 0561 is Kassel "05620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + // 05621 till 05626 is in use + "05627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05628 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05631 till 05636 is in use + "05637 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05641 till 05648 is in use + "05649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0565x is in use + "05660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05661 till 05665 is in use + "05666 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05671 till 05677 is in use + "05678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05681 till 05686 + "05687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05691 till 05696 is in use + "05697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05702 till 05707 is in use + "05708 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0571 is Minden Westfalen + "05720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05721 till 05726 is in use + "05727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05731 till 05734 is in use + "05735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05741 till 05746 is in use + "05747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05751 till 05755 is in use + "05756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05761 is Stolzenau + "05762 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05763 till 05769 is in use + "05770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05771 till 05777 is in use + "05778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05802 till 05808 is in use + "05809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0581 is Uelzen + // total 0582x is in use + "05830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05831 till 05839 is in use + // 05840 till 05846 is in use + "05847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05848 till 05849 is in use + // 05850 till 05855 is in use + "05856 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05857 till 05859 is in use + "05860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05861 till 05865 is in use + "05866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 5872 till 5875 is in use + "05876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05881 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05882 till 05883 is in use + "05884 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05885 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05901 till 05909 is in use + // 0591 is Lingen (ems) + "05920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05921 till 05926 is in use + "05927 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05928 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05931 till 05937 is in use + "05938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05939 is Sustrum + "05940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05941 till 05948 is in use + "05949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05951 till 05957 is in use + "05958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05961 till 05966 is in use + "05967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05971 is Rheine + "05972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05973 is Neuenkirchen Kreis Steinfurt + "05974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 05975 till 05978 is in use + "05979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06000 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06001 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06002 till 06004 is in use + "06005 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06006 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06007 till 06008 is in use + "06009 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06020 till 06024 is in use + "06025 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06026 till 06029 is in use + "06030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06031 till 06036 is in use + "06037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06039 is Karben + "06040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06041 till 06049 is in use + // total 0605x is in use + "06060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06061 till 06063 is in use + "06064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06066 is Michelstadt-Vielbrunn + "06067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06068 is Beerfelden + "06070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06071 is Dieburg + "06072 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06073 till 06074 is in use + "06075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06078 is Gross-Umstadt + "06079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06081 till 06087 is in use + "06088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06092 till 06096 is in use + "06097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06101 till 06109 is in use } From 722fc2738fdfbe2c813852168f705384bd0f1158 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Mon, 23 Oct 2023 21:49:14 +0200 Subject: [PATCH 038/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 06530 --- .../IsPossibleNumberWithReasonTest.groovy | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index f5377b7..fce3954 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2377,6 +2377,145 @@ class IsPossibleNumberWithReasonTest extends Specification { "06099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "06100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06101 till 06109 is in use + // 0611 is Wiesbaden + // 06120 is Aarbergen + "06121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06122 till 06124 is in use + "06125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06126 till 06129 is in use + // 06130 till 06136 is in use + "06137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06138 till 06139 is in use + "06140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06142 is Rüsselsheim + "06143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06144 till 06147 is in use + "06148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06150 till 06152 is in use + "06153 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06154 till 06155 is in use + "06156 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06157 till 06159 is in use + "06160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06161 till 06167 is in use + "06168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06171 till 06175 is in use + "06176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06181 till 06188 is in use + "06189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06190 is Hattersheim am Main + "06191 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06192 is Hofheim am Taunus + "06193 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06195 till 06196 is in use + "06197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06198 is Eppstein + "06199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06201 till 06207 is in use + "06208 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06209 is Mörlenbach + // 0621 is Mannheim + // 06220 till 06224 is in use + "06225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06226 till 06229 is in use + "06230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06231 till 06239 is in use + "06240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06241 till 06247 is in use + "06248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06249 is Guntersblum + "06250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06251 till 06258 is in use + "06259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06261 till 06269 is in use + "06270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06271 till 06272 is in use + "06273 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06274 till 06276 is in use + "06277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06281 till 06287 is in use + "06288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06291 till 06298 is in use + "06299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06301 till 06308 is in use + "06309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0631 is Kauserslautern + "06320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06321 till 06329 is in use + "06330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06331 till 06339 is in use + // total 0634x is in use + "06350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06351 till 06353 is in use + "06354 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06355 till 06359 is in use + "06360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06361 till 06364 is in use + "06365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06371 till 06375 is in use + "06376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06381 till 06837 is in use + "06388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06391 till 06398 is in use + "06399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0640x till 0642x is in use + // 06431 till 06436 is in use + "06437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06438 till 06439 is in use + // total 0644x is in use + "06450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06451 till 06458 is in use + "06459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06461 till 06462 is in use + "06463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06464 till 06468 is in use + "06469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06471 till 06479 is in use + "06480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06482 till 06486 is in use + "06487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0650x till 0651 is in use + "06520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06521 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06522 till 06527 is in use + "06528 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06529 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } From 099513eedd2a5aa3a14af5b0648ed4fa447562e4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Thu, 26 Oct 2023 20:58:28 +0200 Subject: [PATCH 039/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 0711 Plus additions for 116xxx --- .../IsPossibleNumberWithReasonTest.groovy | 331 +++++++++++------- 1 file changed, 203 insertions(+), 128 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index fce3954..62fa6ae 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -219,21 +219,29 @@ class IsPossibleNumberWithReasonTest extends Specification { number | regionCode | expectedResult | expectingFail // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true // end of 116 } @@ -2515,6 +2523,195 @@ class IsPossibleNumberWithReasonTest extends Specification { "06528 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "06529 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "06530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06531 till 06536 is in use + "06537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06541 till 06545 is in use + "06546 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0655x is in use + "06560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06561 till 06569 is in use + "06570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06571 till 06575 is in use + "06576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06578 is Salmtal + "06579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0658x is in use + "06590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06591 till 06597 is in use + "06598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06599 is Wiedenbach bei Gerolstein + "0660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0661 till 0662x is in use + // 06630 till 06631 is in use + "06632 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06633 till 06639 is in use + "06640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06641 till 06648 is in use + "06649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0665x is in use + // 06660 till 06661 is in use + "06662 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06663 till 06669 is in use + // 06670 is Ludwigsau Hessen + "06671 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06672 till 06678 is in use + "06679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06681 till 06684 is in use + "06685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06691 till 06698 is in use + "06699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06701 is Sprendlingen Rheinhessen + "06702 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06703 till 06704 is in use + "06705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06706 till 06709 is in use + // 0671 is Bad Kreuznach + "06720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06721 till 06728 is in use + "06729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06731 till 06737 is in use + "06738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06741 till 06747 is in use + "06748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06751 till 06758 is in use + "06759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06761 till 06766 is in use + "06767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06771 till 06776 is in use + "06777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06781 to 06789 is in use + "0679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06802 till 06806 is in use + "06807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06809 is Grossrosseln + // 0681 is Saarbrücken + "06820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06821 is Neunkirchen Saar + "06822 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06823 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06824 till 06827 is in use + "06828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06831 till 06838 is in use + "06839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06841 till 06844 is in use + "06845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06848 till 06849 is in use + "06850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06851 till 06858 is in use + "06859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06861 is Merzig + "06862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06864 till 06869 is in use + "06870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06871 till 06876 is in use + "06877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06881 is Lebach + "06882 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06883 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06884 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06885 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06887 rill 06888 is in use + "06889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06891 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06892 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06893 till 06894 is in use + "06895 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 06897 till 06898 is in use + "06899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 069 is Frankfurt am Mai + // 0700 is special number code see: TODO will becoded + "0701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 7021 till 7026 is in use + "07027 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07028 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07031 till 07034 is in use + "07035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07041 till 07046 is in use + "07047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07051 till 07056 is in use + "07057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07062 till 07063 is in use + "07064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07066 is Bad Rappenau-Bonfeld + "07067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07071 till 07073 is in use + "07074 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07081 till 07085 is in use + "07086 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0710 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0711 is Stuttgart + } @@ -2544,7 +2741,7 @@ class IsPossibleNumberWithReasonTest extends Specification { where: number | regionCode | expectedResult | expectingFail - // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just + // invalid area code for germany - need to be false "02040 556677" | "DE" | false | true // 02041 is Bottrop "02042 556677" | "DE" | false | true @@ -2554,129 +2751,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "02046 556677" | "DE" | false | true /* "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02051 till 02054 are in use - "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02056 is Heiligenhausen - "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02058 is Wülfrath - "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02064 till 02066 is in use - "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0208 & 0209 is in use - "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02102 till 02104 is in use - "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 - "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02131 till 02133 is in use - "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02137 is Neuss-Norf - "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0214 is Leverkusen - // 02150 till 02154 is in use - "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02156 till 02159 is in use - "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02161 till 02166 is in use - "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02171 is Leverkusen-Opladen - "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02173 till 02175 is in use - "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02181 till 02183 is in use - "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02191 till 02193 is in use - "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02195 till 02196 is in use - "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02202 till 02208 is in use - "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0221 is Köln - "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02222 till 02228 is in use - "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02232 till 02238 is in use - "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02241 till 02248 is in use - "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02251 till 02257 is in use - "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02261 till 02269 is in use - "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02271 till 02275 is in use - "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0228 is Bonn - "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02291 till 02297 is in use - "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02301 till 02309 is in use - // 0231 is Dortmund - "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02323 till 02325 is in use - "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02327 is Bochum-Wattenscheid - "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02330 till 02339 is in use - // 0234 is Bochum - "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02351 till 02355 is in use - "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02357 till 02358 is in use - // 02360 till 02369 is in use - "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02371 till 02375 is in use - "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 02377 till 02379 is in use + .... */ } From 1e61e8118e4d141ecae462c1cf6703ccf6959d06 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 27 Oct 2023 21:12:31 +0200 Subject: [PATCH 040/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 08037 --- .../IsPossibleNumberWithReasonTest.groovy | 301 +++++++++++++++++- 1 file changed, 298 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 62fa6ae..56069ac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -25,6 +25,9 @@ import java.util.logging.Logger // NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf // Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html +// Version 5.V.2020 of BenetzA number plan + + class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil phoneUtil @@ -1561,7 +1564,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "039240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039241 till 039248 is in use "0392498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 032925 is Stassfurt + // 03925 is Stassfurt "039260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "039261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039262 till 039268 is in use @@ -2661,7 +2664,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // 06897 till 06898 is in use "06899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 069 is Frankfurt am Mai - // 0700 is special number code see: TODO will becoded + // 0700 is special number code see: TODO will be coded - see above "0701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "07020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 7021 till 7026 is in use @@ -2711,7 +2714,299 @@ class IsPossibleNumberWithReasonTest extends Specification { "0709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0710 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0711 is Stuttgart - + "07120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07121 till 07129 is in use + // 07130 till 07136 is in use + "07137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07138 till 07139 is in use + "07140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07141 till 07148 is in use + "07149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07150 till 07154 is in use + "07155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07156 till 07159 is in use + "07160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07161 till 07166 is in use + "07167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07171 till 07176 is in use + "07177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07181 till 07184 is in use + "07185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07191 till 07195 + "07196 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07202 till 07204 is in use + "07205 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07206 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07208 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0721 is Karlsbad + // total 0722x is in use + "07230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07231 till 07237 is in use + "07238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07240 is Pfinztal + "07241 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07242 till 07249 is in use + // 0725x till 0726x is in use + "07270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07271 till 07277 is in use + "07278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07300 is Roggenburg + "07301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0732 till 0739 is in use + // 0731 is Ulm Donau + "07320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07321 till 07329 is in use + "07330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07331 till 07337 is in use + "07338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07340 is Neenstetten + "07341 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07342 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07343 till 07348 is in use + "07349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07351 till 07358 is in use + "07359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07361 till 07367 is in use + "07368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07371 is Riedlingen Württemberg + "07372 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07373 till 07376 is in use + "07377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07381 till 07389 is in use + "07390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07391 till 07395 is in use + "07396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07401 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07402 till 07404 is in use + "07405 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07406 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07407 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07409 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0741 is Deisslingen + // 07420 is Schramberg + // 07421 till 07429 is in use + "07430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07431 till 07436 is in use + "07437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0744x is in use + "07450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07451 till 07459 is in use + "07460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07461 till 07467 is in use + "07468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07471 till 07478 is in use + "07479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07482 till 07486 is in use + "07487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07502 till 07506 is in use + "07507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0751 Ravensburg + // 07520 is Bodnegg + "07521 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07522 is Wangen im Allgäu + "07523 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07524 till 07525 is in use + "07526 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07527 till 07529 is in use + "07530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07531 till 07534 is in use + "07535 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07536 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07541 till 07546 is in use + "07547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07551 till 07558 is in use + "07559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07561 till 07569 is in use + // total 0757x is in use + "07580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07581 till 07587 is in use + "07588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07602 is Oberried Breisgau + "07603 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07604 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07605 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07606 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07607 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0761 Freiburg im Breisgau + // total 0762x is in use + "07630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07631 till 07636 is in use + "07637 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07641 till 07646 + "07647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07651 till 07657 is in use + "07658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0766x is in use + "07670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07671 till 07676 is in use + "07677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 076781 till 07685 is in use + "07686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07702 till 07709 is in use + // 0771 is Donaueschingen + // total 0772x is in use + "07730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07731 till 07736 is in use + "07737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07738 till 07339 is in use + "07740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07741 till 07748 is in use + "07749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07751 is Waldshut + "07752 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07753 till 07755 is in use + "07756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07771 is Stockach + "07772 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07773 till 07775 is in use + "07776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07777 is Sauldorf + "07778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07802 till 07808 is in use + "07809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0781 is Offenburg + "07820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07821 till 07826 is in use + "07827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07831 till 07839 is in use + "07840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07841 till 07844 is in use + "07845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07851 till 07854 is in use + "07855 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07856 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07857 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07858 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07903 till 07907 is in use + "07908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0791 is Schwäbisch Hall + "0792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0793x till 0794x is in use + // 07950 till 07955 is in use + "07956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07957 till 07959 is in use + "07960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07961 till 07967 is in use + "07968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 07971 till 07977 is in use + "07978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0800 is special number code see: TODO will be coded - see above + "0801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0802x is in use + "08030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08031 till 08036 is in use + "08037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From 8ff9bef9ade7c0374e30546bac11cd0d7d1462c7 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Tue, 31 Oct 2023 22:10:57 +0100 Subject: [PATCH 041/135] Extends check of isPossibleNumberWithReason against invalid German NDC up to 0999 - city are codes finished ... only need todo special codes --- .../IsPossibleNumberWithReasonTest.groovy | 676 ++++++++++++++++++ 1 file changed, 676 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 56069ac..d2d7ccd 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3007,6 +3007,682 @@ class IsPossibleNumberWithReasonTest extends Specification { "08030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08031 till 08036 is in use "08037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08038 till 08039 is in use + "08040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08041 till 08043 is in use + "08044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08045 till 08046 is in use + "08047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08051 till 08057 is in use + "08058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08061 till 08067 is in use + "08068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08071 till 08076 is in use + "08077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08081 till 08086 is in use + "08087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08091 till 08095 is in use + "08096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08102 is Höhenkirchen-Siegertsbrunn + "08103 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08104 till 08106 is in use + "08107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0811 is Halbergmoos + "08120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08121 till 08124 is in use + "08125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08131 is Dachau + "08132556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08133 till 08139 is in use + "08140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08141 till 08146 is in use + "08147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08151 till 08153 is in use + "08154 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08156 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08157 till 08158 is in use + "08159 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08161 is Freising + "08162 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08163 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08164 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08165 till 08168 is in use + "08169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08170 till 08171 is in use + "08172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08173 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08174 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08175 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08176 till 08179 is in use + "0818 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08191 till 08196 is in use + "08197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08202 till 08208 is in use + "08209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0821 is Augsburg + "08220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08221 till 08226 is in use + "08227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08230 till 08234 is in use + "08235 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08236 till 08239 is in use + "08240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08241 is Buchloe + "08242 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08243 is Fuchstal + "08244 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08245 till 08249 is in use + // 08250 till 08254 is in use + "08255 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08256 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08257 till 08259 is in use + "08260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08261 till 08263 is in use + "08264 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08265 till 08269 is in use + "08270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08271 till 08274 is in use + "08275 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08276 is Baar Schwaben + "08277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08281 till 08285 is in use + "08286 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08287 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08291 till 08296 is in use + "08297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08302 till 08304 is in use + "08305 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08306 is Ronsberg + "08307 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08308 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0831 is Kempten Allgäu + // 08320 till 08328 is in use + "08329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08330 till 08338 is in use + "08339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0834x is in use + "0835 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08361 till 08369 is in use + // 08370 is Obergünzburg + "08371 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08372 till 08379 is in use + // total 0838x is in use + "08390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08392 till 08395 is in use + "08396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08401 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08402 till 08407 is in use + "08408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08409 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0841 is Ingolstadt Donau + "08420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08421 till 08424 is in use + "08425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08426 till 08427 is in use + "08428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08431 till 08435 is in use + "08436 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08441 till 08446 is in use + "08447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08450 is Ingoldstadt-Zuchering + "08451 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08452 till 08454 is in use + "08455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08456 till 08459 is in use + // total 0846x is in use + "0847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08501 till 08507 is in use + "08508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08509 is Ruderting + // 0851 is Passau + "0852 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08531 till 08538 is in use + "08539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08541 till 08549 is in use + // 08550 till 08558 is in use + "08559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08561 till 08565 is in use + "08566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08571 till 08574 is in use + "08575 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08581 till 08586 is in use + "08587 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08591 till 08593 is in use + "08594 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08595 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08596 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08597 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0861 is Traunstein + "08620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08621 till 08624 is in use + "08625 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08626 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08628 till 08629 is in use + // 08630 till 08631 is in use + "08632 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08633 till 08639 is in use + // 08640 till 08642 is in use + "08643 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08644 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08645 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08646 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08649 is Schleching + // 08650 till 08652 is in use + "08653 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08654 Freilassing + "08655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08656 till 08657 is in use + "08658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08661 till 08667 is in use + "08668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08669 is Traunreut + // 08670 till 08671 is in use + "08672 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08673 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08677 till 086779 is in use + "08680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08681 till 08687 is in use + "08688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08702 till 08709 is in use + // 0871 is Landshut + "08720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08721 till 08728 is in use + "08729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08731 till 08735 is in use + "08736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08741 till 08745 is in use + "08746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08751 till 08754 is in use + "08755 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08756 is Nandlstadt + "08757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08761 till 08762 is in use + "08763 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08764 till 08766 is in use + "08767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08771 till 08774 is in use + "08775 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08781 till 08785 is in use + "08786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08801 till 08803 is in use + "08804 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08805 till 08809 is in use + // 0881 is Weilheim in Oberbayern + "08820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08821 till 08826 is in use + "08827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0883 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08841 is Murnau am Staffelsee + "08842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08843 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08844 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08845 till 08847 is in use + "08848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08851 is Kochel am See + "08852 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08853 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08855 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08856 till 08858 is in use + "08859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08860 till 08862 is in use + "08863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08865 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 08867 till 08869 is in use + "0887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 089 is München + "09000 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09001 Information Service TODO:see above + "09002 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09003 Entertainment Service TODO:see above + "09004 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09005 other premium services TODO: see above + "09006 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09007 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09008 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09009 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0903 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0904 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0905 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0906 is Donauwörth + // 09070 till 09078 is in use + "09079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0908x is in use + // 09090 till 0904 is in use + "09095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09097 is Marxheim + "09098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09099 is Kaisheim + "09100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09101 till 09107 is in use + "09108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0911 is Nürnberg + // 09120 is Leinburg + "09121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09122 till 09123 is in use + "09124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09126 till 09129 is in use + "09130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09131 till 09135 is in use + "09136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09141 till 09149 is in use + "09150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09151 till 09158 is in use + "09159 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09161 till 09167 is in use + "09168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0917x till 0919x is in use + "09200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09201 till 09209 is in use + // 0921 is Bayreuth + // 09220 till 09223 is in use + "09224 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09225 is Stadtsteinach + "09226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09227 till 09229 is in use + "09230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09231 till 09236 is in use + "09237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09238 is Röslau + "09239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09241 till 09246 is in use + "09247 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09251 till 09257 is in use + "09258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0926x till 0928x is in use + "09290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09292 till 09295 is in use + "09296 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09302 till 09303 is in use + "09304 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09305 till 09307 is in use + "09308 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0931 is Würzburg + "09320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09321 is Kitzingen + "09322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09323 till 09326 is in use + "09327 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09331 till 09339 is in use + // 0934x till 0935x is in use + // 09360 is Thüngen + "09361 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09362 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09363 till 09367 is in use + "09368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09369 is Uettingen + "09370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09371 till 09378 is in use + "09379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09381 till 09386 is in use + "09387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09391 till 09398 is in use + "09399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09401 till 09409 is in use + // 0941 is Regensburg + // 09420 till 09424 is in use + "09425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09426 till 09429 is in use + "09430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09431 is Schwandorf + "09432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09433 till 09436 is in use + "09437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09438 till 09439 is in use + "09440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09441 till 09448 is in use + "09449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09451 till 09454 is in use + "09455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09456 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09461 till 09649 is in use + "09470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09471 till 09474 is in use + "09475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09480 till 09482 is in use + "09483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09484 is Brennberg + "09485 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09491 till 09493 is in use + "09494 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09495 is Breitenbrunn Oberfalz + "09496 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09497 till 09499 is in use + "09500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09502 till 09505 is in use + "09506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0951 is Bamberg + "09520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09521 till 09529 is in use + "09530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09531 till 09536 is in use + "09537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09541 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09542 till 09549 is in use + "09550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09551 till 09556 is in use + "09557 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09558 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // total 0956x is in use + "09570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09571 till 09576 is in use + "09577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09602 till 09608 is in use + "09609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0961 is Weiden in der Oberfalz + "09620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09621 till 09622 is in use + "09623 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09624 till 09628 is in use + "09629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09631 till 09639 is in use + "09640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09641 till 09648 is in use + "09649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09651 till 09659 is in use + "09660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09661 till 09666 is in use + "09667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09671 till 09677 is in use + "09678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09681 till 09683 is in use + "09684 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09701 is Sandberg Unterfranken + "09702 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09703 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09704 is Euerdorf + "09705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09708 is Bad Bocklet + // total 0972x is in use + "09730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09732 till 09738 is in use + "09739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09741 till 09742 is in use + "09743 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09744 till 09749 is in use + "0975 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09761 till 09766 is in use + "09767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09771 till 09779 is in use + "0978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09802 till 09805 + "09806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0981 is Ansbach + // 09820 is Lehrberg + "09821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09822 till 09829 is in use + "09830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09831 till 09837 s in use + "09838 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09841 till 09848 is in use + "09849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09851 till 09857 is in use + "09858 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09861 is Rothenburg ob der Tauber + "09862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09865 is Adelshofen Mittelfranken + "09866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09867 till 09869 is in use + "09870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09871 till 09876 is in use + "09877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09901 is Hengersberg Bayern + "09902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09903 till 09908 is in use + "09909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 0991 is Deggendorf + // total 0992x is in use + "09930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09931 till 09933 is in use + "09934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09935 till 09938 is in use + "09939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09941 till 09948 is in use + "09949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09951 till 09956 is in use + "09957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09961 till 09966 is in use + "09967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 09971 till 09978 is in use + "09979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } From fa0903e1862ff07ff322bfcf365a109d59330efe Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 26 Nov 2023 09:05:21 +0100 Subject: [PATCH 042/135] Rearranging code order --- .../IsPossibleNumberWithReasonTest.groovy | 89 ++++++++++--------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index d2d7ccd..73e0ba7 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -143,6 +143,51 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 + // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number + "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/116xyz/116116.html + // see no. 7: national 0116116 is not a valid number, but may be replaced by 116116 by the operator - caller could reach target. ( T-Mobile is doing so currently 03.11.2023 - no guarantee for the future nor for any other operator. Best practice, assuming call will not reach target=. + "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC + "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "+49116 55" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + // end of 116 + } + + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -205,48 +250,6 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { - given: - - def phoneNumber = phoneUtil.parse(number, regionCode) - - when: "get number isPossibleNumberWithReason: $number" - - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) - - then: "is number expected: $expectedResult" - this.logResult(result, expectedResult, expectingFail, number, regionCode) - - where: - - number | regionCode | expectedResult | expectingFail - // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 - // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number - "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - - "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC - "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC - "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - - "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - - "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "+49116 55" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - // end of 116 - } def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3682,8 +3685,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "09979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - - } From fd759dc25f8b2a59c32544ead2ba1f0d9ab4a2aa Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 17 Dec 2023 20:59:30 +0100 Subject: [PATCH 043/135] - add 19222 service number tests to IsPossibleNumberWithReasonTest - Moving "check if original lib fixed non check of NAC..." from NormalizationTest to IsPossibleNumberWithReasonTest - improve logging in NormalizationTest & PhoneNumberOfflineGeocoderTest - Moving "check if original lib fixed isValidNumber for invalid German NDC" from IsPossibleNumberWithReasonTest into new IsValidNumberTest --- .../PhoneNumberOfflineGeocoderTest.groovy | 5 +- .../IsPossibleNumberWithReasonTest.groovy | 113 +++++++++++++----- .../PhoneNumberUtil/IsValidNumberTest.groovy | 93 ++++++++++++++ .../PhoneNumberUtil/NormalizationTest.groovy | 83 ++++--------- 4 files changed, 200 insertions(+), 94 deletions(-) create mode 100644 src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy index 20b8f25..26073f1 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy @@ -28,6 +28,7 @@ class PhoneNumberOfflineGeocoderTest extends Specification { Logger logger = Logger.getLogger(PhoneNumberOfflineGeocoderTest.class.toString()) + boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() @@ -48,7 +49,9 @@ class PhoneNumberOfflineGeocoderTest extends Specification { then: "is number expected: $expectedResult" if ((result != expectedResult) && (result2 != expectedResult)){ if (expectingFail) { - logger.info("PhoneLib is still not correctly labeling $areacode to $expectedResult by giving $result") + if (!LOGONLYUNEXPECTED) { + logger.info("PhoneLib is still not correctly labeling $areacode to $expectedResult by giving $result") + } } else { logger.warning("PhoneLib is suddenly not correctly labeling $areacode to $expectedResult by giving $result") } diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 73e0ba7..fce9231 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -60,7 +60,7 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for Emergency short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + def "check if original lib fixed isPossibleNumberWithReason for police short code 110 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: def phoneNumber = phoneUtil.parse(number, regionCode) @@ -77,8 +77,7 @@ class IsPossibleNumberWithReasonTest extends Specification { number | regionCode | expectedResult | expectingFail // short code for Police (110) is not dial-able internationally nor does it has additional numbers "110" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct - "0110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // checked "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable @@ -90,9 +89,26 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49203 110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 110555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // end of 110 + } + + def "check if original lib fixed isPossibleNumberWithReason for Emergency short code 112 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail // short code for emergency (112) is not dial-able internationally nor does it has additional numbers "112" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Check if this is correct + "0112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // checked "0112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -188,6 +204,38 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for ambulance transport 19222 short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // prior to mobile, there where 19xxx short codes in fixed line - only 19222 for no emergency ambulance call is still valid + // its a national reserved number, which in contrast to 112 might also be called with NDC to reach a specific ambulance center - not all NDC have a connected 19222. + // for more information see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/ONRufnr/Vfg_25_2006_konsFassung100823.pdf?__blob=publicationFile&v=3 chapter 7 + "19222" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true // not valid on mobil + // using 19222 als NDC after NAC is checked by "online services 019xx" + "0203 19222" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0203 19222555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // must not be longer + "+4919222" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + // using 19222 from DE als NDC after CC is checked by "online services 019xx" + "+49203 19222" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203 19222555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // must not be longer + // using 19222 from FR als NDC after CC is checked by "online services 019xx" + "+49203 19222" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "+49203 19222555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // must not be longer + // end of 19222 + } + def "check if original lib fixed isPossibleNumberWithReason for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3688,44 +3736,43 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + def "check if original lib fixed non check of NAC"(String number, regionCode, expectedResult, expectingFail) { given: def phoneNumber = phoneUtil.parse(number, regionCode) - when: "get number isValidNumber: $number" + when: "get number isPossibleNumberWithReason: $number" - def result = phoneUtil.isValidNumber(phoneNumber) + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) then: "is number expected: $expectedResult" - if (result != expectedResult) { - if (expectingFail) { - logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } else { - logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } - } else { - if (expectingFail) { - logger.info("!!! isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") - } - } + this.logResult(result, expectedResult, expectingFail, number, regionCode) where: - number | regionCode | expectedResult | expectingFail - // invalid area code for germany - need to be false - "02040 556677" | "DE" | false | true - // 02041 is Bottrop - "02042 556677" | "DE" | false | true - // 02043 is Gladbeck - "02044 556677" | "DE" | false | true - // 02045 is Bottrop-Kirchhellen - "02046 556677" | "DE" | false | true - /* - "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - .... - */ + number | regionCode | expectedResult | expectingFail + // Romania numbers must not have 1 has first digit of NAC + // those indicate a special service, but there is no special service starting with 7 + // so normally the whole number must be invalid, but it is marked as TOO_LONG - an error not intended to check here + // "0040(0176) 3 0 6 9 6541" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + // "0040 176 3 0 6 9 6542" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + // "004017630696543" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + // "0040-0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false + "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "556677889" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "5566778899" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "55667788990" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true + "000" | "AU" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true // this is Austrian Emergency code alternative for 112 + "012345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false } - - } \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy new file mode 100644 index 0000000..02ac36f --- /dev/null +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -0,0 +1,93 @@ +/* + * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil + +import com.google.i18n.phonenumbers.PhoneNumberUtil +import spock.lang.Specification + +import java.util.logging.Logger + + +// Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 +// NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf +// Overview of special number ranges: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/start.html + +// Version 5.V.2020 of BenetzA number plan + + +class IsValidNumberTest extends Specification { + + PhoneNumberUtil phoneUtil + + Logger logger = Logger.getLogger("") + + boolean LOGONLYUNEXPECTED = true + + def "setup"() { + this.phoneUtil = PhoneNumberUtil.getInstance() + System.setProperty("java.util.logging.SimpleFormatter.format", + "%4\$-7s: %5\$s %n") + } + + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("isValidNumber is now correctly validating $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValidNumber: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // invalid area code for germany - need to be false + "02040 556677" | "DE" | false | true + // 02041 is Bottrop + "02042 556677" | "DE" | false | true + // 02043 is Gladbeck + "02044 556677" | "DE" | false | true + // 02045 is Bottrop-Kirchhellen + "02046 556677" | "DE" | false | true + /* + "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + .... + */ + } + + +} \ No newline at end of file diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index d8aa600..22aa100 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -26,6 +26,7 @@ class NormalizationTest extends Specification { Logger logger = Logger.getLogger("") + boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() @@ -33,6 +34,25 @@ class NormalizationTest extends Specification { "%4\$-7s: %5\$s %n") } + def logResult(result, expectedResult, expectingFail, number, regionCode) { + if (result != expectedResult) { + if (expectingFail) { + if (!LOGONLYUNEXPECTED) { + logger.info("phoneUtil.format is still not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + logger.warning("phoneUtil.format is suddenly not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") + } + } else { + if (expectingFail) { + logger.info("phoneUtil.format is now correctly normalizing $number to $expectedResult for region $regionCode !!!") + } + } + return true + } + + + def "check if original lib fixed non check of NAC - E164"(String number, regionCode, expectedResult, expectingFail) { given: @@ -43,17 +63,9 @@ class NormalizationTest extends Specification { def result = phoneUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164) then: "is number expected: $expectedResult" - if (result != expectedResult) { - if (expectingFail) { - logger.info("PhoneLib is still not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") - } else { - logger.warning("PhoneLib is suddenly not correctly normalizing $number to $expectedResult for region $regionCode, by giving $result") - } - } else { - if (expectingFail) { - logger.info("!!! PhoneLib is now correctly normalizing $number to $expectedResult for region $regionCode !!!") - } - } + + this.logResult(result, expectedResult, expectingFail, number, regionCode) + where: @@ -80,55 +92,6 @@ class NormalizationTest extends Specification { "312345678" | "IT" | "+39312345678" | false } - def "check if original lib fixed non check of NAC - IS_POSSIBLE_LOCAL_ONLY"(String number, regionCode, expectedResult, expectingFail) { - given: - - def phoneNumber = phoneUtil.parse(number, regionCode) - - when: "get number isPossibleNumberWithReason: $number" - - def result1 = phoneUtil.isPossibleNumberWithReason(phoneNumber) - - then: "is number expected: $expectedResult" - if (result1 != expectedResult) { - if (expectingFail) { - logger.info("PhoneLib is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } else { - logger.warning("PhoneLib is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") - } - } else { - if (expectingFail) { - logger.info("!!! PhoneLib is now correctly validating $number to $expectedResult for region $regionCode !!!") - } - } - - where: - - number | regionCode | expectedResult | expectingFail - // Romania numbers must not have 1 has first digit of NAC - // those indicate a special service, but there is no special service starting with 7 - // so normally the whole number must be invalid, but it is marked as TOO_LONG - an error not intended to check here - // "0040(0176) 3 0 6 9 6541" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "0040 176 3 0 6 9 6542" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "004017630696543" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "0040-0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "556" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false - "5566" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55667" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "5566778" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55667789" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "556677889" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "5566778899" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "55667788990" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true - "000" | "AU" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true // this is Austrian Emergency code alternative for 112 - "012345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "312345678" | "IT" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - } } \ No newline at end of file From 38d09774401f8f23cd40e528a2c99415f73182ef Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 23 Dec 2023 09:49:37 +0100 Subject: [PATCH 044/135] - Moving "check if original lib fixed isValidNumber for invalid German NDC" from IsPossibleNumberWithReasonTest into new IsValidNumberTest --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 02ac36f..4b5f009 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -34,7 +34,7 @@ class IsValidNumberTest extends Specification { Logger logger = Logger.getLogger("") - boolean LOGONLYUNEXPECTED = true + boolean LOGONLYUNEXPECTED = false def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() @@ -77,16 +77,14 @@ class IsValidNumberTest extends Specification { number | regionCode | expectedResult | expectingFail // invalid area code for germany - need to be false "02040 556677" | "DE" | false | true + "02041 556677" | "DE" | true | false // 02041 is Bottrop "02042 556677" | "DE" | false | true // 02043 is Gladbeck "02044 556677" | "DE" | false | true // 02045 is Bottrop-Kirchhellen "02046 556677" | "DE" | false | true - /* - "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - .... - */ + } From 22997bbd799c72661320575f14a143e71d3e60a2 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 27 Dec 2023 11:43:54 +0100 Subject: [PATCH 045/135] added test at IsPossibleNumberWithReasonTest for 118(y)xx (Call Assistant Services) and extended 116xxx (EU Solzial Services) --- .../IsPossibleNumberWithReasonTest.groovy | 150 ++++++++++++++++-- 1 file changed, 141 insertions(+), 9 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index fce9231..afc8a95 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -145,7 +145,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | true // see https://www.115.de/SharedDocs/Nachrichten/DE/2018/115_aus_dem_ausland_erreichbar.html // 155 is supporting NDC to reach specific local government hotline: https://www.geoportal.de/Info/tk_05-erreichbarkeit-der-115 "0203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "+49203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // TODO: Need to be checked what is correct here + "+49203115" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49203115" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // 155 does not have additional digits "115555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -175,27 +175,50 @@ class IsPossibleNumberWithReasonTest extends Specification { number | regionCode | expectedResult | expectingFail // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 - // 116xyz is nationally and internationally reachable - special check 116116 as initial number and 116999 as max legal number - "116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // 116xyz is nationally and internationally reachable - special check 116000 as initial number, 116116 as assigned number and 116999 as max legal number + "116" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "116000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true "116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true // https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/116xyz/116116.html + // NAC + 116xxx // see no. 7: national 0116116 is not a valid number, but may be replaced by 116116 by the operator - caller could reach target. ( T-Mobile is doing so currently 03.11.2023 - no guarantee for the future nor for any other operator. Best practice, assuming call will not reach target=. "0116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0116000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC "0116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC "0116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not valid by BnetzA definition just using NAC "0116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // NAC + NDC (e.g. for Duisburg) + 116xxx + "0203116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203116000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // CC + 116xxx + "+49116" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "+49116000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116116" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116 5566" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true "+49116 55" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - "+49116" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // CC + NDC (e.g. for Duisburg) + 116xxx + "+49203116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203116000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203116116" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203116999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203116 5566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203116 55" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // CC + 116xxx from outside Germany + "+49116" | "FR" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "+49116000" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116116" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116999" | "FR" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "+49116 5566" | "FR" | PhoneNumberUtil.ValidationResult.TOO_LONG | true @@ -204,6 +227,116 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German Call Assistant short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/118xy/118xyNummernplan.pdf?__blob=publicationFile&v=1 + // it is mentioned, that those numbers are nationally reachable - which excludes them from locally, so no local number should work this way because without NDC it could not be seperated from the national number + // implicitly it could also mean that those numbers are not routed from outside germany + + // 118 is starting part and in general 5 digits long - except if the 4th digit is 0, than it is six digits long + "118" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "1180" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "11800" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "118000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "1180000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "1181" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "11810" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + // Call Assistant of Deutsche Telekom + "11833" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "118100" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "1189" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "11899" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "118999" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + // Tested on 26.12.2023 - 11833 works on TMD, but neither 011833 nor +4911833 is working on T-Mobile Germany #TODO: find regulatory statement + // NAC + 118(y)xx + "0118" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "01180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "011800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0118000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "01180000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "01181" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "011810" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "011833" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0118100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "01189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "011899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0118999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // NAC + NDC (e.g. for Duisburg) + 118(y)xx + "0203118" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02031180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "020311800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203118000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02031180000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02031181" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "020311810" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "020311833" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203118100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02031189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "020311899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0203118999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // CC + 118(y)xx + "+49118" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49118000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491180000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491181" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911810" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911833" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49118100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49118999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // CC + NDC (e.g. for Duisburg) + 118(y)xx + "+49203118" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+492031180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4920311800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203118000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+492031180000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+492031181" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4920311810" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4920311833" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203118100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+492031189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4920311899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49203118999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // CC + 118(y)xx from outside Germany + "+49118" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491180" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911800" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49118000" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491180000" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491181" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911810" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911833" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49118100" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491189" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4911899" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49118999" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // end of 118 + } + + def "check if original lib fixed isPossibleNumberWithReason for ambulance transport 19222 short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -333,9 +466,9 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0116 is checked in EU social short codes see above // --- "0117 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // TODO: 118 is cal assistance service see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/118xy/start.html - "0118 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - + // --- + // 0118 is checked in German call assistant services see above + // --- "0119 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "012 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -385,7 +518,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // TODO: 09009 - Dialer: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html - // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. From 38b344d93dd9abf98d743ef27259adb9f0474184 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 19 Jan 2024 18:01:00 +0100 Subject: [PATCH 046/135] added test at IsPossibleNumberWithReasonTest for mobile 0115xx(x) for normal number and associated voicemail number by blocks. --- .../IsPossibleNumberWithReasonTest.groovy | 207 ++++++++++++++++++ 1 file changed, 207 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index afc8a95..9c0522f 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -16,6 +16,7 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil +import de.telekom.phonenumbernormalizer.numberplans.PhoneNumberValidationResult import spock.lang.Specification import java.util.logging.Logger @@ -431,6 +432,212 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 15 range"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: + "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: + "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + + // 015xxyyyyyyy xx = block code, yyyyyyy fixed length number in 2 digit block, so together 9 digit is the overall length + // 015zzzaaaaaa zzz = newer block zzz, aaaaaa fixes length number in 3 digit block, so together 9 digit is the overall length + "01500100000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "015001000000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0150010000000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + "01599999999" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "015999999999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false + "0159999999999" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + // There infixes of two digits used to address the voicemail of a line + // see 2.5 in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // This makes the number two digits longer, but on the other hand a short version with the infix does not exists, that is the reason, why above range started at 15001, since 15000 would be an infix + // see own test below + // end of 015xx + } + + + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 15 range with voicemail infix after 1st block digit"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + + given: + String[] numbersToTest = [ numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "000000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999", + numberUntilInfix + "9999999999"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG] + + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + + for (int i = 0; i Date: Sun, 21 Jan 2024 14:29:31 +0100 Subject: [PATCH 047/135] extends test at IsPossibleNumberWithReasonTest for mobile 0115xx(x) for normal numbers and joins test for associated voicemail number to one test --- .../IsPossibleNumberWithReasonTest.groovy | 945 ++++++++++++++++-- 1 file changed, 848 insertions(+), 97 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 9c0522f..7cce8e1 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -432,70 +432,41 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for German Mobile 15 range"(String number, regionCode, expectedResult, expectingFail) { + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 15 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { given: - - def phoneNumber = phoneUtil.parse(number, regionCode) - - when: - "get number isPossibleNumberWithReason: $number" - - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) - - then: - "is number expected: $expectedResult" - this.logResult(result, expectedResult, expectingFail, number, regionCode) - - where: - - number | regionCode | expectedResult | expectingFail - // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html - // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 - - // 015xxyyyyyyy xx = block code, yyyyyyy fixed length number in 2 digit block, so together 9 digit is the overall length - // 015zzzaaaaaa zzz = newer block zzz, aaaaaa fixes length number in 3 digit block, so together 9 digit is the overall length - "01500100000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - "015001000000" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "0150010000000" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - - "01599999999" | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true - "015999999999" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false - "0159999999999" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - - // There infixes of two digits used to address the voicemail of a line - // see 2.5 in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 - // This makes the number two digits longer, but on the other hand a short version with the infix does not exists, that is the reason, why above range started at 15001, since 15000 would be an infix - // see own test below - // end of 015xx - } - - - def "check if original lib fixed isPossibleNumberWithReason for German Mobile 15 range with voicemail infix after 1st block digit"(String numberUntilInfix, regionCode, boolean[] expectingFails) { - - given: - String[] numbersToTest = [ numberUntilInfix + "00000", - numberUntilInfix + "000000", - numberUntilInfix + "0000000", - numberUntilInfix + "00000000", - numberUntilInfix + "000000000", - numberUntilInfix + "99999", - numberUntilInfix + "999999", - numberUntilInfix + "9999999", - numberUntilInfix + "99999999", - numberUntilInfix + "9999999999"] - + String[] numbersToTest + + if (numberUntilInfix.length() == 5) { + numbersToTest = [numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999"] + } + if (numberUntilInfix.length() == 6) { + numbersToTest = [numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999"] + } + if (numberUntilInfix.length() == 7) { + numbersToTest = [numberUntilInfix + "0000", + numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "9999", + numberUntilInfix + "99999", + numberUntilInfix + "999999"] + } PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, - PhoneNumberUtil.ValidationResult.TOO_SHORT, - PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.IS_POSSIBLE, PhoneNumberUtil.ValidationResult.TOO_LONG, PhoneNumberUtil.ValidationResult.TOO_SHORT, - PhoneNumberUtil.ValidationResult.TOO_SHORT, - PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.IS_POSSIBLE, PhoneNumberUtil.ValidationResult.TOO_LONG] - when: PhoneNumberUtil.ValidationResult[] results = [] for (number in numbersToTest) { @@ -504,57 +475,817 @@ class IsPossibleNumberWithReasonTest extends Specification { } then: - for (int i = 0; i Date: Wed, 24 Jan 2024 08:31:33 +0100 Subject: [PATCH 048/135] added test at IsPossibleNumberWithReasonTest for mobile 016(0/2/3) for normal numbers and for associated voicemail numbers added test at IsPossibleNumberWithReasonTest for reserve 016(1/5/6/7) added test at IsPossibleNumberWithReasonTest for "Funkruf" aka eMessage 016(8/9) - 0164 is not yet added, because of unclear number conventions added test at IsPossibleNumberWithReasonTest for mobile 017x for normal numbers and for associated voicemail numbers --- .../IsPossibleNumberWithReasonTest.groovy | 670 +++++++++++++++++- 1 file changed, 666 insertions(+), 4 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 7cce8e1..6122eb0 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -263,8 +263,9 @@ class IsPossibleNumberWithReasonTest extends Specification { "11899" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "118999" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // Tested on 26.12.2023 - 11833 works on TMD, but neither 011833 nor +4911833 is working on T-Mobile Germany #TODO: find regulatory statement - // NAC + 118(y)xx + // Tested on 26.12.2023 - 11833 works on TMD, but neither 011833 nor +4911833 is working on T-Mobile Germany + // NAC + 118(y)xx belongs to the number reserve of NAC + 11 + "0118" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "01180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "011800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -1389,6 +1390,656 @@ class IsPossibleNumberWithReasonTest extends Specification { // end of 015xx for voicemail } + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 16 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest + + if (numberUntilInfix.length() == 5) { + numbersToTest = [numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999"] + } + if (numberUntilInfix.length() == 6) { + numbersToTest = [numberUntilInfix + "0000", + numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "9999", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999"] + } + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 016xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0160 + // + "01600" | "DE" | [true, false, false, true, true, false, false, true] + "016010" | "DE" | [true, false, false, true, true, false, false, true] + "016011" | "DE" | [true, false, false, true, true, false, false, true] + "016012" | "DE" | [true, false, false, true, true, false, false, true] + // 016013 is reserved for voicemail - see tests below + "016014" | "DE" | [true, false, false, true, true, false, false, true] + "016015" | "DE" | [true, false, false, true, true, false, false, true] + "016016" | "DE" | [true, false, false, true, true, false, false, true] + "016017" | "DE" | [true, false, false, true, true, false, false, true] + "016018" | "DE" | [true, false, false, true, true, false, false, true] + "016019" | "DE" | [true, false, false, true, true, false, false, true] + "01602" | "DE" | [true, false, false, true, true, false, false, true] + "01603" | "DE" | [true, false, false, true, true, false, false, true] + "01604" | "DE" | [true, false, false, true, true, false, false, true] + "01605" | "DE" | [true, false, false, true, true, false, false, true] + "01606" | "DE" | [true, false, false, true, true, false, false, true] + "01607" | "DE" | [true, false, false, true, true, false, false, true] + "01608" | "DE" | [true, false, false, true, true, false, false, true] + "01609" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0162 + // + "01620" | "DE" | [true, false, false, true, true, false, false, true] + "01621" | "DE" | [true, false, false, true, true, false, false, true] + "01622" | "DE" | [true, false, false, true, true, false, false, true] + "01623" | "DE" | [true, false, false, true, true, false, false, true] + "01624" | "DE" | [true, false, false, true, true, false, false, true] + // 016250 is reserved for voicemail - see tests below + "016251" | "DE" | [true, false, false, true, true, false, false, true] + "016252" | "DE" | [true, false, false, true, true, false, false, true] + "016253" | "DE" | [true, false, false, true, true, false, false, true] + "016254" | "DE" | [true, false, false, true, true, false, false, true] + // 016255 is reserved for voicemail - see tests below + "016256" | "DE" | [true, false, false, true, true, false, false, true] + "016257" | "DE" | [true, false, false, true, true, false, false, true] + "016258" | "DE" | [true, false, false, true, true, false, false, true] + "016259" | "DE" | [true, false, false, true, true, false, false, true] + "01626" | "DE" | [true, false, false, true, true, false, false, true] + "01627" | "DE" | [true, false, false, true, true, false, false, true] + "01628" | "DE" | [true, false, false, true, true, false, false, true] + "01629" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0163 + // + "01630" | "DE" | [true, false, false, true, true, false, false, true] + "01631" | "DE" | [true, false, false, true, true, false, false, true] + "01632" | "DE" | [true, false, false, true, true, false, false, true] + "01633" | "DE" | [true, false, false, true, true, false, false, true] + "01634" | "DE" | [true, false, false, true, true, false, false, true] + "01635" | "DE" | [true, false, false, true, true, false, false, true] + "01636" | "DE" | [true, false, false, true, true, false, false, true] + "01637" | "DE" | [true, false, false, true, true, false, false, true] + "01638" | "DE" | [true, false, false, true, true, false, false, true] + "016390" | "DE" | [true, false, false, true, true, false, false, true] + "016391" | "DE" | [true, false, false, true, true, false, false, true] + "016392" | "DE" | [true, false, false, true, true, false, false, true] + "016393" | "DE" | [true, false, false, true, true, false, false, true] + "016394" | "DE" | [true, false, false, true, true, false, false, true] + "016395" | "DE" | [true, false, false, true, true, false, false, true] + "016396" | "DE" | [true, false, false, true, true, false, false, true] + "016397" | "DE" | [true, false, false, true, true, false, false, true] + "016398" | "DE" | [true, false, false, true, true, false, false, true] + // 016399 is reserved for voicemail - see tests below + } + + + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 16 range with voicemail infix"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "000000000", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999", + numberUntilInfix + "999999999"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 016xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0160 + // + "016013" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0162 + // + "016250" | "DE" | [true, false, false, true, true, false, false, true] + "016255" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0163 + // + "016399" | "DE" | [true, false, false, true, true, false, false, true] + } + + + def "check if original lib fixed isPossibleNumberWithReason for German reserve 16 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // 0161, 165, 166, 167 are reserved for future use + + "0161" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0165" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0166" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0167" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + } + + def "check if original lib fixed isPossibleNumberWithReason for German 'Funkruf' 16(8/9) range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667", + reserve + "223344556677"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // 0168, 169 are using a 14 digit national number (0164 is not further defined). + // TODO: could 0164 needs to be covered + "0168" | "DE" | [true, true, true, true, true, true, true, true, true, true, true, false, true] + "0169" | "DE" | [true, true, true, true, true, true, true, true, true, true, true, false, true] + + } + + + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 17 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest + + if (numberUntilInfix.length() == 5) { + numbersToTest = [numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999"] + } + if (numberUntilInfix.length() == 6) { + numbersToTest = [numberUntilInfix + "0000", + numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "9999", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999"] + } + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 017xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0170 + // + "01700" | "DE" | [true, false, false, true, true, false, false, true] + "017010" | "DE" | [true, false, false, true, true, false, false, true] + "017011" | "DE" | [true, false, false, true, true, false, false, true] + "017012" | "DE" | [true, false, false, true, true, false, false, true] + // 017013 is reserved for voicemail - see tests below + "017014" | "DE" | [true, false, false, true, true, false, false, true] + "017015" | "DE" | [true, false, false, true, true, false, false, true] + "017016" | "DE" | [true, false, false, true, true, false, false, true] + "017017" | "DE" | [true, false, false, true, true, false, false, true] + "017018" | "DE" | [true, false, false, true, true, false, false, true] + "017019" | "DE" | [true, false, false, true, true, false, false, true] + "01702" | "DE" | [true, false, false, true, true, false, false, true] + "01703" | "DE" | [true, false, false, true, true, false, false, true] + "01704" | "DE" | [true, false, false, true, true, false, false, true] + "01705" | "DE" | [true, false, false, true, true, false, false, true] + "01706" | "DE" | [true, false, false, true, true, false, false, true] + "01707" | "DE" | [true, false, false, true, true, false, false, true] + "01708" | "DE" | [true, false, false, true, true, false, false, true] + "01709" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0171 + // + "01710" | "DE" | [true, false, false, true, true, false, false, true] + "017110" | "DE" | [true, false, false, true, true, false, false, true] + "017111" | "DE" | [true, false, false, true, true, false, false, true] + "017112" | "DE" | [true, false, false, true, true, false, false, true] + // 017113 is reserved for voicemail - see tests below + "017114" | "DE" | [true, false, false, true, true, false, false, true] + "017115" | "DE" | [true, false, false, true, true, false, false, true] + "017116" | "DE" | [true, false, false, true, true, false, false, true] + "017117" | "DE" | [true, false, false, true, true, false, false, true] + "017118" | "DE" | [true, false, false, true, true, false, false, true] + "017119" | "DE" | [true, false, false, true, true, false, false, true] + "01712" | "DE" | [true, false, false, true, true, false, false, true] + "01713" | "DE" | [true, false, false, true, true, false, false, true] + "01714" | "DE" | [true, false, false, true, true, false, false, true] + "01715" | "DE" | [true, false, false, true, true, false, false, true] + "01716" | "DE" | [true, false, false, true, true, false, false, true] + "01717" | "DE" | [true, false, false, true, true, false, false, true] + "01718" | "DE" | [true, false, false, true, true, false, false, true] + "01719" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0172 + // + "01720" | "DE" | [true, false, false, true, true, false, false, true] + "01721" | "DE" | [true, false, false, true, true, false, false, true] + "01722" | "DE" | [true, false, false, true, true, false, false, true] + "01723" | "DE" | [true, false, false, true, true, false, false, true] + "01724" | "DE" | [true, false, false, true, true, false, false, true] + // 017250 is reserved for voicemail - see tests below + "017251" | "DE" | [true, false, false, true, true, false, false, true] + "017252" | "DE" | [true, false, false, true, true, false, false, true] + "017253" | "DE" | [true, false, false, true, true, false, false, true] + "017254" | "DE" | [true, false, false, true, true, false, false, true] + // 017255 is reserved for voicemail - see tests below + "017256" | "DE" | [true, false, false, true, true, false, false, true] + "017257" | "DE" | [true, false, false, true, true, false, false, true] + "017258" | "DE" | [true, false, false, true, true, false, false, true] + "017259" | "DE" | [true, false, false, true, true, false, false, true] + "01726" | "DE" | [true, false, false, true, true, false, false, true] + "01727" | "DE" | [true, false, false, true, true, false, false, true] + "01728" | "DE" | [true, false, false, true, true, false, false, true] + "01729" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0173 + // + "01730" | "DE" | [true, false, false, true, true, false, false, true] + "01731" | "DE" | [true, false, false, true, true, false, false, true] + "01732" | "DE" | [true, false, false, true, true, false, false, true] + "01733" | "DE" | [true, false, false, true, true, false, false, true] + "01734" | "DE" | [true, false, false, true, true, false, false, true] + // 017350 is reserved for voicemail - see tests below + "017351" | "DE" | [true, false, false, true, true, false, false, true] + "017352" | "DE" | [true, false, false, true, true, false, false, true] + "017353" | "DE" | [true, false, false, true, true, false, false, true] + "017354" | "DE" | [true, false, false, true, true, false, false, true] + // 017355 is reserved for voicemail - see tests below + "017356" | "DE" | [true, false, false, true, true, false, false, true] + "017357" | "DE" | [true, false, false, true, true, false, false, true] + "017358" | "DE" | [true, false, false, true, true, false, false, true] + "017359" | "DE" | [true, false, false, true, true, false, false, true] + "01736" | "DE" | [true, false, false, true, true, false, false, true] + "01737" | "DE" | [true, false, false, true, true, false, false, true] + "01738" | "DE" | [true, false, false, true, true, false, false, true] + "01739" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0174 + // + "01740" | "DE" | [true, false, false, true, true, false, false, true] + "01741" | "DE" | [true, false, false, true, true, false, false, true] + "01742" | "DE" | [true, false, false, true, true, false, false, true] + "01743" | "DE" | [true, false, false, true, true, false, false, true] + "01744" | "DE" | [true, false, false, true, true, false, false, true] + // 017450 is reserved for voicemail - see tests below + "017451" | "DE" | [true, false, false, true, true, false, false, true] + "017452" | "DE" | [true, false, false, true, true, false, false, true] + "017453" | "DE" | [true, false, false, true, true, false, false, true] + "017454" | "DE" | [true, false, false, true, true, false, false, true] + // 017455 is reserved for voicemail - see tests below + "017456" | "DE" | [true, false, false, true, true, false, false, true] + "017457" | "DE" | [true, false, false, true, true, false, false, true] + "017458" | "DE" | [true, false, false, true, true, false, false, true] + "017459" | "DE" | [true, false, false, true, true, false, false, true] + "01746" | "DE" | [true, false, false, true, true, false, false, true] + "01747" | "DE" | [true, false, false, true, true, false, false, true] + "01748" | "DE" | [true, false, false, true, true, false, false, true] + "01749" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0175 + // + "01750" | "DE" | [true, false, false, true, true, false, false, true] + "017510" | "DE" | [true, false, false, true, true, false, false, true] + "017511" | "DE" | [true, false, false, true, true, false, false, true] + "017512" | "DE" | [true, false, false, true, true, false, false, true] + // 017513 is reserved for voicemail - see tests below + "017514" | "DE" | [true, false, false, true, true, false, false, true] + "017515" | "DE" | [true, false, false, true, true, false, false, true] + "017516" | "DE" | [true, false, false, true, true, false, false, true] + "017517" | "DE" | [true, false, false, true, true, false, false, true] + "017518" | "DE" | [true, false, false, true, true, false, false, true] + "017519" | "DE" | [true, false, false, true, true, false, false, true] + "01752" | "DE" | [true, false, false, true, true, false, false, true] + "01753" | "DE" | [true, false, false, true, true, false, false, true] + "01754" | "DE" | [true, false, false, true, true, false, false, true] + "01755" | "DE" | [true, false, false, true, true, false, false, true] + "01756" | "DE" | [true, false, false, true, true, false, false, true] + "01757" | "DE" | [true, false, false, true, true, false, false, true] + "01758" | "DE" | [true, false, false, true, true, false, false, true] + "01759" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0176 + // + "01760" | "DE" | [true, false, false, true, true, false, false, true] + "01761" | "DE" | [true, false, false, true, true, false, false, true] + "01762" | "DE" | [true, false, false, true, true, false, false, true] + "017630" | "DE" | [true, false, false, true, true, false, false, true] + "017631" | "DE" | [true, false, false, true, true, false, false, true] + "017632" | "DE" | [true, false, false, true, true, false, false, true] + // 017633 is reserved for voicemail - see tests below + "017634" | "DE" | [true, false, false, true, true, false, false, true] + "017635" | "DE" | [true, false, false, true, true, false, false, true] + "017636" | "DE" | [true, false, false, true, true, false, false, true] + "017637" | "DE" | [true, false, false, true, true, false, false, true] + "017638" | "DE" | [true, false, false, true, true, false, false, true] + "017639" | "DE" | [true, false, false, true, true, false, false, true] + "01764" | "DE" | [true, false, false, true, true, false, false, true] + "01765" | "DE" | [true, false, false, true, true, false, false, true] + "01766" | "DE" | [true, false, false, true, true, false, false, true] + "01767" | "DE" | [true, false, false, true, true, false, false, true] + "01768" | "DE" | [true, false, false, true, true, false, false, true] + "01769" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0177 + // + "01770" | "DE" | [true, false, false, true, true, false, false, true] + "01771" | "DE" | [true, false, false, true, true, false, false, true] + "01772" | "DE" | [true, false, false, true, true, false, false, true] + "01773" | "DE" | [true, false, false, true, true, false, false, true] + "01774" | "DE" | [true, false, false, true, true, false, false, true] + "01775" | "DE" | [true, false, false, true, true, false, false, true] + "01776" | "DE" | [true, false, false, true, true, false, false, true] + "01777" | "DE" | [true, false, false, true, true, false, false, true] + "01778" | "DE" | [true, false, false, true, true, false, false, true] + "017790" | "DE" | [true, false, false, true, true, false, false, true] + "017791" | "DE" | [true, false, false, true, true, false, false, true] + "017792" | "DE" | [true, false, false, true, true, false, false, true] + "017793" | "DE" | [true, false, false, true, true, false, false, true] + "017794" | "DE" | [true, false, false, true, true, false, false, true] + "017795" | "DE" | [true, false, false, true, true, false, false, true] + "017796" | "DE" | [true, false, false, true, true, false, false, true] + "017797" | "DE" | [true, false, false, true, true, false, false, true] + "017798" | "DE" | [true, false, false, true, true, false, false, true] + // 017799 is reserved for voicemail - see tests below + + // + // 0178 + // + "01780" | "DE" | [true, false, false, true, true, false, false, true] + "01781" | "DE" | [true, false, false, true, true, false, false, true] + "01782" | "DE" | [true, false, false, true, true, false, false, true] + "01783" | "DE" | [true, false, false, true, true, false, false, true] + "01784" | "DE" | [true, false, false, true, true, false, false, true] + "01785" | "DE" | [true, false, false, true, true, false, false, true] + "01786" | "DE" | [true, false, false, true, true, false, false, true] + "01787" | "DE" | [true, false, false, true, true, false, false, true] + "01788" | "DE" | [true, false, false, true, true, false, false, true] + "017890" | "DE" | [true, false, false, true, true, false, false, true] + "017891" | "DE" | [true, false, false, true, true, false, false, true] + "017892" | "DE" | [true, false, false, true, true, false, false, true] + "017893" | "DE" | [true, false, false, true, true, false, false, true] + "017894" | "DE" | [true, false, false, true, true, false, false, true] + "017895" | "DE" | [true, false, false, true, true, false, false, true] + "017896" | "DE" | [true, false, false, true, true, false, false, true] + "017897" | "DE" | [true, false, false, true, true, false, false, true] + "017898" | "DE" | [true, false, false, true, true, false, false, true] + // 017899 is reserved for voicemail - see tests below + + // + // 0179 + // + "01790" | "DE" | [true, false, false, true, true, false, false, true] + "01791" | "DE" | [true, false, false, true, true, false, false, true] + "01792" | "DE" | [true, false, false, true, true, false, false, true] + "017930" | "DE" | [true, false, false, true, true, false, false, true] + "017931" | "DE" | [true, false, false, true, true, false, false, true] + "017932" | "DE" | [true, false, false, true, true, false, false, true] + // 017933 is reserved for voicemail - see tests below + "017934" | "DE" | [true, false, false, true, true, false, false, true] + "017935" | "DE" | [true, false, false, true, true, false, false, true] + "017936" | "DE" | [true, false, false, true, true, false, false, true] + "017937" | "DE" | [true, false, false, true, true, false, false, true] + "017938" | "DE" | [true, false, false, true, true, false, false, true] + "017939" | "DE" | [true, false, false, true, true, false, false, true] + "01794" | "DE" | [true, false, false, true, true, false, false, true] + "01795" | "DE" | [true, false, false, true, true, false, false, true] + "01796" | "DE" | [true, false, false, true, true, false, false, true] + "01797" | "DE" | [true, false, false, true, true, false, false, true] + "01798" | "DE" | [true, false, false, true, true, false, false, true] + "01799" | "DE" | [true, false, false, true, true, false, false, true] + } + + + def "check if original lib fixed isPossibleNumberWithReason for German Mobile 17 range with voicemail infix"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "000000000", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999", + numberUntilInfix + "999999999"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 016xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0170 + // + "017013" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0171 + // + "017113" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0172 + // + "017250" | "DE" | [true, false, false, true, true, false, false, true] + "017255" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0173 + // + "017350" | "DE" | [true, false, false, true, true, false, false, true] + "017355" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0174 + // + "017450" | "DE" | [true, false, false, true, true, false, false, true] + "017455" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0175 + // + "017513" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0176 + // + "017633" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0177 + // + "017799" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0178 + // + "017899" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0179 + // + "017933" | "DE" | [true, false, false, true, true, false, false, true] + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -1462,8 +2113,19 @@ class IsPossibleNumberWithReasonTest extends Specification { "0147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // TODO: 015, 016, 017 are mobile see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html - // TODO: 016x is "Funkruf": see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Funkruf/start.html + // --- + // 015x is checked in Mobile 15 and 15 voicemail see above + // --- + // --- + // 016x: + // 0160, 0162, 0163 are checked in Mobile 16 and 16 voicemail + // 0161, 0165, 0166, 0167 are checked in Reserve 16 + // 0168, 0169 are checked in eMessage 16 - see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Funkruf/start.html and https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // TODO: 0164 eMessage length definition needed + // --- + // --- + // 017x is checked in Mobile 17 and 17 voicemail see abovee + // --- // TODO: 018 is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html // TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html // TODO: 0181 is international VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html From eb9cac8763054152cdc3b6c66ae34c6f55010fcb Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Jan 2024 09:52:32 +0100 Subject: [PATCH 049/135] splitting Romain special service 7 check into an own testcase added test at IsPossibleNumberWithReasonTest for service numbers 0180 added test at IsPossibleNumberWithReasonTest for international VPN numbers 0181 added test at IsPossibleNumberWithReasonTest for VPN numbers 018(2-9) nationally and internationally different added test at IsPossibleNumberWithReasonTest for VPN numbers 0018 59995 nationally and internationally special case --- .../IsPossibleNumberWithReasonTest.groovy | 367 +++++++++++++++++- 1 file changed, 356 insertions(+), 11 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 6122eb0..d3fce35 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1993,7 +1993,7 @@ class IsPossibleNumberWithReasonTest extends Specification { numberUntilInfix | regionCode | expectingFails // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 - // 016xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + // 017xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits // // 0170 @@ -2041,6 +2041,330 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German ServiceNumbers 180 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // Numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0180/Nummernplan0180_ServiceDiensteRufnummer.pdf?__blob=publicationFile&v=1 + // points out, that national numbers have 10 (3+7) digits in this range, but that there are historically shorter numbers + // At https://data.bundesnetzagentur.de/Bundesnetzagentur/SharedDocs/ExterneLinks/DE/Sachgebiete/Telekommunikation/Nummerierung/NVMwD.0180.Rufnummer.Vergeben.zip it can be checked, that shorter numbers have 3+5 & 3+6 digits + // 01800 is reserve + "01801" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + "01802" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + "01803" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + "01804" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + "01805" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + "01806" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + "01807" | "DE" | [true, true, true, true, false, false, false, true, true, true, true, true] + // 01808 is reserve + // 01809 is reserve + } + + def "check if original lib fixed isPossibleNumberWithReason for German reserve 180 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // Numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0180/Nummernplan0180_ServiceDiensteRufnummer.pdf?__blob=publicationFile&v=1 + // points out, that national numbers have 10 (3+7) digits in this range, but that there are historically shorter numbers + // At https://data.bundesnetzagentur.de/Bundesnetzagentur/SharedDocs/ExterneLinks/DE/Sachgebiete/Telekommunikation/Nummerierung/NVMwD.0180.Rufnummer.Vergeben.zip it can be checked, that shorter numbers have 3+5 & 3+6 digits + // reserve: + + "01800" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "01808" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "01809" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + } + + def "check if original lib fixed isPossibleNumberWithReason for German international VPN 181 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // TODO: Maybe IS Possible_Local_Only is better value, since VPN numbers are not public accessible, but only from numbers of same VPN + // that would mean at least first 6 to 7 digits after NAC have to be same, depending on the VPN size. + + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0181 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0181/Nummernplan_IVPN.pdf?__blob=publicationFile&v=1 + // nation number with 14 digits + "0181" | "DE" | [true, true, true, false, false, false, false, false, false, false, false, true] + "+49181" | "FR" | [true, true, true, false, false, false, false, false, false, false, false, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for German VPN 18(2-9) range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // TODO: Maybe IS Possible_Local_Only is better value, since VPN numbers are not public accessible, but only from numbers of same VPN + // that would mean at least first 4 to 9 digits after NAC have to be same, depending on the VPN size. + // if such a check is added, 18 59995 would be an exception which a public accessible exception for historical reason. + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 018 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/Nummernplan.pdf?__blob=publicationFile&v=1 + // Historical Reorder: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/TWiderruf.pdf?__blob=publicationFile&v=1 + // nation number with 11 digits + "0182" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0183" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0184" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0185" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0186" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0187" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0188" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + "0189" | "DE" | [true, true, true, true, true, true, true, true, false, true, true, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for German VPN 18(2-9) range which is only reachable nationally"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // TODO: Maybe IS Possible_Local_Only is better value, since VPN numbers are not public accessible, but only from numbers of same VPN + // that would mean at least first 4 to 9 digits after NAC have to be same, depending on the VPN size. + // if such a check is added, 18 59995 would be an exception which a public accessible exception for historical reason. + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 018 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/Nummernplan.pdf?__blob=publicationFile&v=1 + // Historical Reorder: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/TWiderruf.pdf?__blob=publicationFile&v=1 + // nation number with 11 digits + "+49182" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49183" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49184" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49185" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49186" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49187" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49188" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + "+49189" | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true] + + } + + def "check if original lib fixed isPossibleNumberWithReason for German VPN 018 59995 xxxx is reachable"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // is reachable from normal telephony network + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 018 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/Nummernplan.pdf?__blob=publicationFile&v=1 + // Historical Reorder: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/TWiderruf.pdf?__blob=publicationFile&v=1 + // nation number with 11 digits + "018 59995" | "DE" | [true, true, true, true, false, true, true] + "+4918 59995" | "FR" | [true, true, true, true, false, true, true] + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -2124,10 +2448,12 @@ class IsPossibleNumberWithReasonTest extends Specification { // TODO: 0164 eMessage length definition needed // --- // --- - // 017x is checked in Mobile 17 and 17 voicemail see abovee + // 017x is checked in Mobile 17 and 17 voicemail see above + // --- + // --- + // 0180 TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html // --- - // TODO: 018 is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html - // TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // TODO: 018(2-9) is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html // TODO: 0181 is international VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html // TODO: 019xyz Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html // TODO: 019x is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html @@ -5488,6 +5814,32 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixes Romania special service 7 marking too long"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: + "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: + "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // Romania numbers must not have 1 has first digit of NAC + // those indicate a special service, but there is no special service starting with 7 + // so normally the whole number must be invalid, but it is marked as TOO_LONG - an error not intended to check here + "0040(0176) 3 0 6 9 6541" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0040 176 3 0 6 9 6542" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "004017630696543" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0040-0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } + def "check if original lib fixed non check of NAC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -5503,13 +5855,6 @@ class IsPossibleNumberWithReasonTest extends Specification { where: number | regionCode | expectedResult | expectingFail - // Romania numbers must not have 1 has first digit of NAC - // those indicate a special service, but there is no special service starting with 7 - // so normally the whole number must be invalid, but it is marked as TOO_LONG - an error not intended to check here - // "0040(0176) 3 0 6 9 6541" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "0040 176 3 0 6 9 6542" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "004017630696543" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true - // "0040-0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true "0176 3 0 6 9 6544" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "0203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false "203556677" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | true From f9c9f85bd808ca354e850c34f73c956372722529 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 3 Feb 2024 10:52:20 +0100 Subject: [PATCH 050/135] refactored "check if original lib fixed isPossibleNumberWithReason for invalid German NDC" to not only check 556677 as fixed length subscriber for each NDC, but now from nothing to 55667788, since checked NDC are not valid in German number plan at all --- .../IsPossibleNumberWithReasonTest.groovy | 4586 +++++++++-------- 1 file changed, 2300 insertions(+), 2286 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index d3fce35..9d2cfbe 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2368,75 +2368,89 @@ class IsPossibleNumberWithReasonTest extends Specification { def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: - def phoneNumber = phoneUtil.parse(number, regionCode) + String[] numbersToTest = [number + "", + number + "5", + number + "55", + number + "556", + number + "5566", + number + "55667", + number + "556677", + number + "5566778", + number + "55667788"] - when: "get number isPossibleNumberWithReason: $number" - def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + when: "get number isPossibleNumberWithReason: $number" + PhoneNumberUtil.ValidationResult[] results = [] + for (n in numbersToTest) { + def phoneNumber = phoneUtil.parse(n, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } then: "is number expected: $expectedResult" - this.logResult(result, expectedResult, expectingFail, number, regionCode) + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } where: - number | regionCode | expectedResult | expectingFail + number | regionCode | expectedResult | expectingFail // short numbers which are reached internationally are also registered as NDC // TODO: 010 is operator selection see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/010/010xy_node.html ... will be canceled 31.12.2024 - "010 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "010" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // --- // 0110 is checked in Emergency short codes see above // --- - "0111 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0111" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // --- // 0112 is checked in Emergency short codes see above // --- - "0113 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0114 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0113" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0114" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // --- // 0115 is checked in German Government short codes see above // --- // --- // 0116 is checked in EU social short codes see above // --- - "0117 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0117" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // --- // 0118 is checked in German call assistant services see above // --- - "0119 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "012 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0123 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0131 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0132 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0119" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "012" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0120" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0121" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0122" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0123" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0124" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0125" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0126" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0127" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0128" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0129" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0130" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0131" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0132" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0133" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0134" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0135" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0136" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // --- // 0137 is checked in Mass Traffic see above // --- - "0138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "014 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0142 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0144 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0146 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0138" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0139" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "014" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0140" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0141" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0142" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0143" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0144" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0145" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0146" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0147" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0148" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0149" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // --- // 015x is checked in Mobile 15 and 15 voicemail see above // --- @@ -2467,3350 +2481,3350 @@ class IsPossibleNumberWithReasonTest extends Specification { // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. - "0200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0201 is Essen // 0202 is Wuppertal // 0203 is Duisburg - "02040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02040" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02041 is Bottrop - "02042 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02042" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02043 is Gladbeck - "02044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02044" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02045 is Bottrop-Kirchhellen - "02046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02046" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02047" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02048" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02049" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02051 till 02054 are in use - "02055 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02055" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02056 is Heiligenhausen - "02057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02057" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02058 is Wülfrath - "02059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02062 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02059" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02060" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02061" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02062" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02063" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02064 till 02066 is in use - "02067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02067" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02068" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02069" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0207" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0208 & 0209 is in use - "02100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02101" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02102 till 02104 is in use - "02105 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02105" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02106" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02107" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02108" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02109" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 - "02130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02130" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02131 till 02133 is in use - "02134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02135 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02134" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02135" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02136" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02137 is Neuss-Norf - "02138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02138" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02139" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0214 is Leverkusen // 02150 till 02154 is in use - "02155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02155" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02156 till 02159 is in use - "02160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02161 till 02166 is in use - "02167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02167" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02168" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02169" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02170" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02171 is Leverkusen-Opladen - "02172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02172" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02173 till 02175 is in use - "02176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02176" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02177" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02178" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02179" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02181 till 02183 is in use - "02184 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02184" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02185" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02186" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02187" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02188" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02190" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02191 till 02193 is in use - "02194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02194" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02195 till 02196 is in use - "02197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02198" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02199" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02201" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02202 till 02208 is in use - "02209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02209" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0221 is Köln - "02220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02221 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02220" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02221" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02222 till 02228 is in use - "02229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02231 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02229" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02230" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02231" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02232 till 02238 is in use - "02239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02239" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02241 till 02248 is in use - "02249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02249" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02250" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02251 till 02257 is in use - "02258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02258" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02259" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02261 till 02269 is in use - "02270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02270" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02271 till 02275 is in use - "02276 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02276" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02277" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02278" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0228 is Bonn - "02290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02291 till 02297 is in use - "02298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02298" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02301 till 02309 is in use // 0231 is Dortmund - "02320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02320" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02321" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02322" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02323 till 02325 is in use - "02326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02326" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02327 is Bochum-Wattenscheid - "02328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02328" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02329" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02330 till 02339 is in use // 0234 is Bochum - "02350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02350" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02351 till 02355 is in use - "02356 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02356" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02357 till 02358 is in use // 02360 till 02369 is in use - "02370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02371 till 02375 is in use - "02376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02376" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02377 till 02379 is in use - "02380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02381 till 02385 is in use - "02386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02386" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02387 till 02389 is in use - "02390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02391 till 02395 is in use - "02396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02396" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02397" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02398" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02400" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02401 till 02409 is in use // 0241 is Aachen - "02420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02421 till 02429 is in use - "02430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02431 till 02436 is in use - "02437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02438" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02439" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02440 till 02441 is in use - "02442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02442" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02443 till 02449 is in use - "02450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02451 till 02456 is in use - "02457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02457" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02458" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02461 till 02465 is in use - "02466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02466" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02467" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02468" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02471 till 02474 is in use - "02475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02475" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02476" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02477" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02478" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02479" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02481" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02482 is Hellenthal - "02483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02483" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02484 till 02486 is in use - "02487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02488" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0249" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02501 till 02502 is in use - "02503 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02503" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02504 till 02509 is in use // 0251 is Münster // 02520 till 02529 is in use - "02530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02531" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02532 till 02536 is in use - "02531 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02531" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02538 is Drensteinfurt-Rinkerode - "02539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02541 till 02543 is in use - "02544 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02544" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02545 till 02548 is in use - "02549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02549" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02550" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02551 till 02558 is in use - "02559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02559" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02560" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02561 till 02568 is in use - "02569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02569" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02570" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02571 till 02575 is in use - "02576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02576" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02577" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02578" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02579" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02580" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02581 till 02588 is in use - "02589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02589" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02590 till 02599 is in use - "02600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02601 till 02608 is in use - "02609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02609" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0261 is Koblenz am Rhein // 02620 till 02628 is in use - "02629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02629" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02630 till 02639 is in use - "02640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02641 till 02647 is in use - "02648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02648" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02651 till 02657 is in use - "02658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02658" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02659" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02660" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02661 till 02664 is in use - "02665 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02665" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02666 till 02667 is in use - "02668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02668" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02669" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02671 till 02678 is in use - "02679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02680 till 02689 is in use - "02690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02691 till 02697 is in use - "02698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02698" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0271 is Siegen - "02720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02721 till 02725 is in use - "02726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02726" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02727" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02728" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02731" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02731 till 02739 is in use - "02740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02741 till 02745 is in use - "02746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02746" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02747 is Molzhain - "02748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02750 till 02755 is in use - "02756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02756" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02757" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02758 till 02759 is in use - "02760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02761 till 02764 is in use - "02765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02765" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02766" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02767" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02768" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02770 till 02779 is in use - "02780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02780" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02781 till 02784 is in use - "02785 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02793 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02796 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02797 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02785" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02786" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02787" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02788" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02789" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02790" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02791" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02792" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02793" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02794" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02795" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02796" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02797" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02798" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02799" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02801 till 02804 is in use - "02805 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02805" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02806" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02807" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02808" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02809" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0281 is Wesel - "02820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02820" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02821 till 02828 is in use - "02829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02829" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02830" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02831 till 02839 is in use - "02840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02841 till 02845 is in use - "02846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02846" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02847" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02848" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02850 till 02853 is in use - "02854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02854" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02855 till 02859 is in use - "02860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02861 till 02867 is in use - "02868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02868" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02869" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02871 till 02874 is in use - "02875 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02875" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02876" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02877" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0288" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0289" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02900" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02901" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02902 till 02905 is in use - "02906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02906" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02907" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02908" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02909" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0291 is Meschede - "02920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02920" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02921 till 02925 is in use - "02926 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02926" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02927 till 02928 is in use - "02929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02929" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02931 till 02935 is in use - "02936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02936" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02937 till 02938 is in use - "02939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02939" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02940" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02941 till 02945 is in use - "02946 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02946" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02947 till 02948 is in use - "02949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02949" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02950" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02951 till 02955 is in use - "02956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02956" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02957 till 02958 is in use - "02959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02959" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02961 till 02964 is in use - "02965 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02966 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02965" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02966" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02967" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02968" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02969" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02971 till 02975 is in use - "02976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02976" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02977 is Schmallenberg-Bödefeld - "02978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02978" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02980" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02981 till 02985 is in use - "02986 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02986" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02987" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02988" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02989" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02990" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 02991 till 02994 is in use - "02995 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02996 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02997 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "02999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02995" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02996" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02997" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02998" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "02999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 030 is Berlin // 0310 is National Test for length 3 -> TODO: OWN Test // 0311 is National Test for length 3 -> TODO: OWN Test - "0312 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0313 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0314 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0315 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0316 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0317 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0318 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0319 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0312" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0313" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0314" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0315" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0316" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0317" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0318" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0319" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 032 is non geographical 11 till 13 length -> TODO: OWN Test - "03300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03301 till 03304 is in use - "033050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033051 till 033056 is in use - "033057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033057" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033058" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033059" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03306 till 03307 is in use // 033080 is Marienthal Kreis Oberhavel - "033081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033081" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033082 till 033089 is in use - "033090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033092 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033090" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033091" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033092" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033093 till 033094 is in use - "033095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033095" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033096" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033097" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033098" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033099" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0331 is Potsdam // 033200 till 033209 is in use // 03321 is Nauen Brandenburg // 03322 is Falkensee // 033230 till 033235 is in use - "033236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033236" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033237 till 033239 is in use - "03324 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03325 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03324" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03327 till 03329 is in use - "03330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03331 till 03332 is in use - "033330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033331 till 033338 is in use - "033339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033339" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03334 till 03335 is in use - "033360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033361 till 033369 is in use // 03337 till 03338 is in use - "033390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033392 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033391" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033392" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033393 till 033398 is in use - "033399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03340" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03341 till 03342 is in use - "033430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033431" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033432 till 033439 is in use // 03344 is Bad Freienwalde - "033450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033451 till 033452 is in use - "033453 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033453" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033454 is Wölsickendorf/Wollenberg - "033455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033455" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033456 till 033458 is in use - "033459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03346 is Seelow // 033470 is Lietzen - "033471 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033471" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033472 till 033479 is in use // 0335 is Frankfurt (Oder) - "033600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033601 till 033609 is in use // 03361 till 03362 is in use - "033630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033630" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033631 till 033638 is in use - "033639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033639" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03364 is Eisenhüttenstadt - "033650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033651 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033651" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033652 till 033657 is in use - "033658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033658" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033659" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03366 is Beeskow - "033670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033671 till 033679 is in use - "03368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033701 till 033704 is in use - "033705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033705" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033706" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033707" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033708 is Rangsdorf - "033709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033709" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03371 till 03372 is in use - "033730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033731 till 033734 is in use - "033735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033735" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033736" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033737" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033738" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033741 till 033748 is in use - "033749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03375 is Königs Wusterhausen // 33760 is Münchehofe Kreis Dahme-Spreewald - "033761 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033761" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033762 till 033769 is in use // 03377 till 03379 is in use - "03380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03381 till 03382 is in use // 033830 till 033839 is in use - "033840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033841 is Belzig - "033842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033842" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033843 till 033849 is in use // 03385 till 03386 is in use // 033870 is Zollchow bei Rathenow - "033871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033871" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033872 till 033878 is in use - "033879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03391 is Neuruppin // 033920 till 033929 is in use - "033930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033931 till 033933 is in use - "033934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033934" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033935" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033936" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033937" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033938" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033939" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03394 till 03395 is in use - "033960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033961 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033961" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033962 till 033969 is in use // 033970 till 033979 is in use - "033980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033980" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033981 till 033984 is in use - "033985 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033985" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033986 is Falkenhagen Kreis Prignitz - "033987 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "033988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033987" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "033988" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033989 is Sadenbeck - "03399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0340 till 0341 is in use - "034200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034201" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034202 till 034208 is in use - "034209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034209" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03421 is Torgau - "034220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034220" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034221 till 034224 is in use - "034225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034225" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034226" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034227" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034228" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034229" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03423 is Eilenburg - "034240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034241 till 034244 is in use - "034245 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034246 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034247556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034245" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034246" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034247" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034248" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034249" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03425 is Wurzen - "034260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034261 till 034263 is in use - "03427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03427" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03428" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034291 till 034293 is in use - "03430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03431 is Döbeln - "034320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034320" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034321 till 034322 is in use - "034323 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034323" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034324 till 034325 is in use - "034326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034326" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034327 till 034328 is in use - "034329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034329" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03433 is Borna Stadt - "034340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034340" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034341 till 034348 is in use - "034349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034349" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03435 is Oschatz - "034360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034361 till 034364 is in use - "034365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034365" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034366" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034367" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03437 is Grimma - "034380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034381 till 034386 is in use - "034387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034387" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03439" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03440" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03441 is Zeitz - "034420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034421" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034422 till 034426 is in use - "034427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034427" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034428" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034429" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03443 is Weissenfels Sachsen-Anhalt - "034440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034440" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034441 is Hohenmölsen - "034442 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034442" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034443 till 034446 is in use - "034447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034447" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034448" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034449" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03445 is Naumburg Saale - "034460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034461 till 034467 is in use - "034468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034468" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03447 till 03448 is in use - "034490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034490" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034491 till 034498 is in use - "034499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034499" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0345 is Halle Saale // 034600 toll 034607 is in use - "034608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034608" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034609 is Salzmünde // 03461 till 03462 is in use - "034630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034631 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034630" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034631" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034632 till 034633 is in use - "034634 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034634" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034635 till 034639 is in use // 03464 is Sangerhausen - "034650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034651 till 034654 is in use - "034655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034655" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034656 is Wallhausen Sachsen-Anhalt - "034657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034657" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034658 till 034659 is in use // 03466 is Artern Unstrut - "034670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034671 till 034673 is in use - "034674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034674" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034675" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034676" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034678" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03468" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034691 till 034692 is in use - "034693 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034694 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034695 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034693" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034694" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034695" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034696" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034697" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034698" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03471 is Bernburg Saale - "034720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034721 till 034722 is in use - "034723 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034724 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034723" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034724" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034725" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034726" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034727" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034728" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 3473 is Aschersleben Sachsen-Anhalt - "034740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034741 till 034743 is in use - "034744 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034744" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034745 till 034746 is in use - "034747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034747" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03475 till 03476 is in use - "034770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034771 till 034776 is in use - "034777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034777" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034779 is Abberode - "034780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034780" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034781 till 034783 is in use - "034784 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034784" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034785 is Sandersleben - "034786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034786" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034787" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034788" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034789" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03479" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0348" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034900" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034901 is Roßlau Elbe - "034902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034902" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034903 till 034907 - "034908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034908" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034909 is Aken Elbe // 03491 till 03494 (yes full 03492x is used, too) is in use - "034950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034951 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034952 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034950" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034951" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034952" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034953 till 034956 - "034957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034957" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034958" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034959" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03496 is Köthen Anhalt - "034970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034971 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "034972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034971" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034972" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034973 is Osternienburg - "034974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "034974" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 034975 till 034979 is in use - "03498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03498" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03499" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03501 is Pirna - "035029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035031 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035029" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035030" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035031" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035032 till 035033 is in use - "035034 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035034" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035035" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035036" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035038" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035039" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03504 is Dippoldiswalde - "035050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035051 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035051" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035052 till 035058 - "035059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035059" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03506" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03507" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03508" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03509" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0351 is Dresden // 03520x till 03525 is in use (inclusive complete 03524x) - "035260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035262 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035261" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035262" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035263 till 035268 - "035269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03527 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035269" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03527" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03529 till 03529 is in use - "03530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03531 is Finsterwalde - "035320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035321 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035320" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035321" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035322 till 035327 - "035328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035328" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035329 is Dollenchen // 03533 is Elsterwerda - "035340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035340" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035341 till 035343 - "035344 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035346 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035347 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035344" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035345" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035346" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035347" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035348" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035349" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03535 is Herzberg Elster - "035360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035361 till 035365 is in use - "035366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035366" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035367" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03537 is Jessen Elster - "035380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035382 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035381" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035382" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035383 till 035389 is in use - "03539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03541 till 03542 is in use - "035430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035431 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035431" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035432" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035433 till 035436 is in use - "035437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035438" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035439 is Zinnitz // 03544 is Luckau Brandenburg - "035450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035451 till 035456 is in use - "035457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035457" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035458" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03546 is Lübben Spreewald - "035470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035471 till 035478 is in use - "035479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035479" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03548" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03549" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0355 is Cottbus // 03560x till 03564 is in use - "03565 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03565" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03567" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03568" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035691 till 035698 is in use - "035699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03570" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03571 is Hoyerswerda - "035720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035721 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035721" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035722 till 035728 is in use - "035729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03573 till 03574 is in use - "035750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035751 till 035756 is in use - "035757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035757" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035758" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03576 is Weisswasser - "035770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035771 till 035775 is in use - "035776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035776" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035777" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03578 is Kamenz - "035790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035791 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035790" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035791" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035792 till 035793 is in use - "035794 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035794" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035795 till 035797 is in use - "035798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035798" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035799" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03580" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03581 is Görlitz // 035820 is Zodel - "035821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035821" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035822 till 035823 is in use - "035824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035824" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035825 till 035829 is in use // 03583 is Zittau - "035840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035841 till 035844 is in use - "035845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035845" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035846" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035847" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035848" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03585 till 03586 is in use - "035870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035871" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035872 till 035877 is in use - "035878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03588 is Niesky - "035890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035890" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035891 till 0358595 is in use - "035896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035896" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035897" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035898" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03590" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03591 till 03594 (including total 03593x) is in use - "035950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035950" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035951 till 035955 is in use - "035956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035956" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035957" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035958" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035959" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03596 is Neustadt in Sachsen - "035970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 035971 till 035975 is in use - "035976 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035977 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "035979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035976" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035977" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035978" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "035979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03598" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03599" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03601 till 03603 (including total 03602x) is in use - "036040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036040" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036041 till 036043 is in use - "036044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036045 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036044" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036045" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036046" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036047" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036048" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036049" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03605 till 03606 is in use - "036070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036070" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036071 till 036072 is in use - "036073 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036073" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036074 till 036077 is in use - "036078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036078" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036079" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036080" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036081 till 036085 is in use - "036086 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036086" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036087 is Wüstheuterode - "036088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036088" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036089" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03609" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0361 is Erfurt // 03620x till 03624 is in use - "036250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036251 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036250" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036251" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036252 till 036259 is in use - "03626 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03626" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03627" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03628 till 03629 is in use - "03630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03630" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03631 till 03632 is in use // 036330 till 036338 is in use - "036339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036339" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03634 till 03637x is in use - "03638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03638" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03639" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03641 is Jena - "036420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036421 till 036428 is in use - "036429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036429" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03643 till 03644 is in use // 036450 till 036454 is in use - "036455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036456 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036455" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036456" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036457" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036458 till 036459 is in use - "036460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036461 till 036465 is in use - "036466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036466" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036467" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036468" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03647 is Pößneck - "036480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036481 till 036484 is in use - "036485 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036485" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036486" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036488" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0365 is Gera - "036600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036601 till 036608 is in use - "036609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036609" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03661 is Greiz - "036620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036620" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036621 till 036626 is in use - "036627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036627" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036628 is Zeulenroda - "036629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036629" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03663 is Schleiz // 036640 is Remptendorf - "036641 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036641" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036642 till 036649 is in use - "036650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036651 till 036653 is in use - "036654 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036656 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03666 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036654" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036655" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036656" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036657" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036658" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036659" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03666" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03667" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03668" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036691 till 036695 is in use - "036696 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036696" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036697" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036698" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036701 till 036705 is in use - "036706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036708 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036706" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036707" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036708" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036709" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03671 till 03673x is in use - "036740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036741 till 03644 is in use - "036745 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036745" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036746" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036747" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03675 is Heubisch - "036760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036761 till 036762 is in use - "036763 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036763" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036764 is Neuhaus-Schierschnitz - "036765 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036765" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036766 is SChalkau - "036767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036767" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036768" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03677 is Ilmenau Thüringen - "036780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036780" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036781 till 036785 is in use - "036786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036786" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036787" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036788" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036789" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03679 is Suhl - "03680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03681 till 03686 (inlcuding total 03684x) is in use // 036870 till 036871 is in use - "036872 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036872" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036873 till 036875 is in use - "036876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "036877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036876" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036877" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036878 is Oberland - "036879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036891 till 03693 (including total 036892x) is in use // 0368940 till 0368941 is in use - "036942 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036942" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0368943 till 0368949 is in use // 03695 is Bad Salzungen - "036960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "036960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 036961 till 036969 is in use - "03697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03697" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03698" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0371 is Chemnitz Sachsen // 037200 is Wittgensdorf bei Chemnitz - "037201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037201" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037202 till 03724 is in use - "037205 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037205" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037206 till 037209 is in use // 03721 till 03727 is in use - "03728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03728" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037291 till 037298 is in use - "037299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03731 till 03733 (including total 03732x) is in use - "037340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037340" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037341 till 037344 is in use - "037345 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037345" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037346 till 037349 is in use // 03735 till 03737 (including total 03736x) is in use - "037380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037381 till 037384 is in use - "037385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037385" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037386" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037387" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03741 is Plauen - "037420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037421 till 037423 is in use - "037424 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037426 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037424" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037425" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037426" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037427" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037428" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037429" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03473x till 03745 is in use - "037460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037461 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037461" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037462 till 037465 is in use - "037466 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037466" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037467 till 037468 is in use - "037469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03747" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0375 is Zwickau // 03760x till 03765 is in use - "03766 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03766" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03767" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03768" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03771 till 03774 is in use - "037750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037751 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037751" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037752 is Eibenstock - "037753 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037753" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 037754 till 037757 - "037758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "037759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037758" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "037759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03776" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03777" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0378" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0379" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0381 is Rostock - "038200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038201 till 038209 // 03821 till 03822x - "038230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038230" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038231 till 038234 - "038235 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038236 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03824 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03825 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03826 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038235" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038236" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038237" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038238" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038239" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03824" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03825" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03826" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03827" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03828" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038291" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038292 till 038297 is in use - "038298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038298" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03830x till 03831 is in use // 038320 till 038328 is in use - "038329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038329" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08331 till 038334 is in use - "038335 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038336 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038337 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038335" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038336" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038337" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038338" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038339" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03834 is Greifswald - "038350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038350" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038351 till 038356 is in use - "038357 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038358 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038357" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038358" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038359" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03836 till 03838 (including total 03837x) is in use - "038390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038391 till 038393 is in use - "038394 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038395 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038394" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038395" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038396" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038397" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038398" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03841 id Neukloster - "038420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038421 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038421" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038422 till 038429 // 03843 till 03845x is in use - "038460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038461 till 038462 is in use - "038463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038463" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038464 is Bernitt - "038465 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038465" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038466 is Jürgenshagen - "038467 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038467" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038468" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03847 is Sternberg - "038480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038481 till 038486 is in use - "038487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038488 is Demen - "038489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0385 is Schwerin // 03860 till 03861 is in use - "03862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03862" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03863 is Crivitz - "03864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03864" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03865 till 03869 is in use - "03870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03871 till 03872x is in use - "038730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038731 till 038733 is in use - "038734 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038734" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038735 till 038738 is in use - "038739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03874 till 03877 (including total 03875x) is in use // 038780 till 038785 is in use - "038786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038786" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038787 till 038789 is in use - "038790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038790" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038791 till 038794 - "038795 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038795" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038796 till 038797 - "038798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038798" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038799" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03880" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03881 is Grevesmühlen - "038820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038820" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038821 till 038828 is in use - "038829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038829" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03883 is Hagenow - "038840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038841 till 038845 is in use - "038846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038846" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038847 till 038848 is in use - "038849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038850 till 038856 is in use - "038857 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038857" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038858 till 038859 is in use // 03886 is Gadebusch - "038870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 038871 till 038876 is in use - "038877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "038879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038877" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "038879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03888" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03900x till 03905x (including total 03903x) is in use - "039060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039060" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039061 till 039062 is in use - "039063 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039066 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039063" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039064" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039065" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039066" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039067" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039068" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039069" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03907 till 03909 (including total 03908x) is in use // 0391 is Magdeburg // 03920x till 03921 is in use - "039220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039220" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039221 till 039226 is in use - "039227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039227" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039228" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039229" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03923 is Zerbst - "039240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039241 till 039248 is in use - "0392498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0392498" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03925 is Stassfurt - "039260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039261 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039261" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039262 till 039268 is in use - "039269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03927 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039269" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03927" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03928 is Schönebeck Elbe - "039290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039291 till 039298 is in use - "039299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03931 is Stendal // 039320 till 039325 is in use - "039326 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039326" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039327 till 039329 is in use // 03933 is Genthin - "039340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039340" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039341 till 039349 is in use // 03935 is Tangerhütte - "039360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039361 till 039366 is in use - "039367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039367" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03937 is Osterburg Altmark - "039380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039381 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039381" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039382 till 039384 is in use - "039385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039385" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039386 till 039389 is in use // total 03939x is in use // 03940x till 03941 is in use - "039420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039421 till 039428 is in use - "039429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039429" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03943 till 03944 is in use - "039450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039451 till 039459 is in use // 03946 till 03947 is in use - "039480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039481 till 039485 is in use - "039486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039486" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039487 till 039489 is in use // 03949 is Oschersleben Bode // 0395 is Zwiedorf // 039600 till 039608 is in use - "039609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039609" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03961 till 03969 is in use - "03970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03971 is Anklam - "039720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039721 till 039724 is in use - "039725 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039725" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039726 till 039728 is in use - "039729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03973 till 03974x is in use - "039750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039751 till 039754 is in use - "039755 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039755" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039756" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039757" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039758" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03976 is Torgelow bei Uckermünde - "039770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039771 till 039779 is in use - "03980 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03980" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03981 to 03982x is in use - "039830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039830" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039831 till 039833 is in use - "039834 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039835 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039836 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039837 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039838 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039834" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039835" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039836" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039837" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039838" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039839" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03984 is Prenzlau - "039850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039850" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039851 till 039859 is in use - "039860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039861 till 039863 is in use - "039863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039865 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039863" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039864" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039865" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039866" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039867" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039868" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039869" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03987 is Templin - "039880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039880" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039881 till 039889 is in use - "03989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03989" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03990" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03991 is Waren Müritz - "039920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039920" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039921 till 039929 is in use - "039930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039931 till 039934 is in use - "039935 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039936 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "039939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039935" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039936" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039937" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039938" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039939" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03994 is Malchin - "039950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039950" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039951 till 039957 is in use - "039958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039958" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039959 is Dargun // 03996 is Teterow - "039970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039971 till 039973 is in use - "039974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039974" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039975 till 039978 - "039979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03998 is Demmin - "039990 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "039990" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 039991 till 039999 is in use // 040 is Hamburg - "04100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04101 till 04109 is in use - "0411 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0411" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0412x is in use - "04130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04130" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04131 till 04139 is in use // 04140 till 04144 is in use - "04145 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04145" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04146 is Stade-Bützfleth - "04147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04147" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04148 till 04149 is in use - "04150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04150" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04151 till 04156 is in use - "04157 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04157" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04158 till 04159 is in use - "04160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04161 till 04169 is in use - "04170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04170" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04171 till 04179 is in use // total 0418x is in sue - "04190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04190" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04191 till 04195 is in use - "04196 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04196" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04198" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04199" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04201" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04202 till 04209 is in use // 0421 is Bremen - "04220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04220" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04221 till 04224 is in use - "04225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04225" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04226" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04227" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04228" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04229" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0423x till 0424x is in use - "04250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04250" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04251 till 04258 is in use - "04259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04259" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0426x is in use - "04270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04270" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04271 till 04277 is in use - "04278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04278" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04280" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04281 till 04289 is in use - "04290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04291" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04292 till 04298 is in use - "04299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04301" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04302 till 04303 is in use - "04304 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04304" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04305 is Westensee - "04306 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04306" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04307 till 04308 is in use - "04309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04309" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0431 till 0433x (including total 0432x) is in use // 04340 is Achterwehr - "04341 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04341" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04342 till 04346 is in use - "04350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04350" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04351 till 04358 is in use - "04359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04359" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04361 till 04367 is in use - "04368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04371 till 04372 is in use - "04373 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04374 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04375 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04373" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04374" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04375" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04376" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04377" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04378" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04379" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04381 till 04385 is in use - "04386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04386" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04387" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04391" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04392 till 04394 is in use - "04395 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04395" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04396" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04397" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04398" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04400" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04401 till 04409 is in use // 0441 is Oldenburg (Oldb) - "04420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04421 till 04423 is in use - "04424 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04424" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04425 till 04426 is in use - "04427 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04427" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04428" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04429" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04431 till 04435 is in use - "04436 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04436" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04438" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04439" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04440" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04441 till 04447 is in use - "04448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04448" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04449" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04451 till 04456 is in use - "04457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04457" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04458 is Wiefeldstede-Spohle - "04459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04461 till 04469 is in use - "04470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04471 till 04475 is in use - "04476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04476" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04477 till 04479 is in use // total 0448x is in use - "04490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04490" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04491 till 1199 is in use - "04500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04501 till 04506 is in use - "04507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04507" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04508 till 0459 is in use // 0451 is Lübeck - "04520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04520" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04521 till 04529 is in use - "04530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04531 till 04537 is in use - "04538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04538" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04539 is Westerau - "04540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04541 till 04547 is in use - "04548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04548" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04549" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0455x is in use - "04560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04560" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04561 till 04564 is in use - "0457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0457" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0458" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04601" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04602 till 04609 is in use // 0461 is Flensburg - "04620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04620" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04621 till 04627 is in use - "04628 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04628" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04629" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0463x is in use - "04640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04641 till 04644 is in use - "04645 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04645" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04646 is Morkirch - "04647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04647" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04648" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04651 is Sylt - "04652 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04653 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04654 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04656 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04657 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04652" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04653" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04654" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04655" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04656" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04657" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04658" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04659" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04660" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04661 till 04668 is in use - "04669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04669" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04671 till 04674 is in use - "04675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04675" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04676" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04678" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04681 till 04684 is in use - "04685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04685" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04686" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04687" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04701" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04702 till 04708 is in use - "04709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04709" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0471 is Bremerhaven - "04720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04721 till 04725 is in use - "04726 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04726" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04727" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04728" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04731 till 04737 is in use - "04738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04738" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0474x is in use - "04750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04751 till 04758 is in use - "04759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04761 till 04769 is in use // total 0477x is in use - "0478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04790 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0478" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04790" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04791 till 04796 is in use - "04800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04802 till 04806 is in use - "04807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04807" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04808" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04809" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0481 is Heide Holstein - "04820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04820" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04821 till 04829 is in use // 04830 is Süderhastedt - "04831 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04831" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04832 till 04839 is in use - "04840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04841 till 04849 os in use - "04850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04850" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04851 till 04859 is in use - "04860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04861 till 04865 is in use - "04866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04866" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04867" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04868" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04869" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04871 till 04877 is in use - "04878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04880" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04881 till 04885 is in use - "04886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04891 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04886" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04887" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04888" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04890" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04891" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04892 till 04893 is in use - "04894 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04895 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04897 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04898 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04894" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04895" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04896" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04897" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04898" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04900" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04901" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04902 till 04903 is in use - "04904 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04905 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04906 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04907 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04904" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04905" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04906" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04907" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04908" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04909" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0491 is Leer Ostfriesland // total 0492x is in use - "04930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04931 till 04936 is in use - "04937 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04937" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04938 till 04939 is in use - "04940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04940" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04941 till 04948 is in use - "04949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04949" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0495x is in use - "04960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04961 till 04968 is in use - "04969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04969" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 04971 till 04977 is in use - "04978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "04979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04978" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "04979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0498" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0499" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0501" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05020" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05021 till 05028 is in use - "05029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05029" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05030" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05031 till 05037 is in use - "05038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05038" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05039" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05040" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05041 till 05045 is in use - "05046 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05046" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05047" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05048" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05049" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05051 till 05056 is in use - "05057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05057" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05058" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05058" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05060 is Bodenburg - "05061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05061" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05062 till 05069 is in use - "05070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05070" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05071 till 05074 is in use - "05075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05081 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05075" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05076" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05077" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05078" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05079" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05080" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05081" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05082 till 05086 is in use - "05087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05087" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05088" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05089" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0509" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05101 till 05103 is in use - "05104 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05104" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05105 is Barsinghausen - "05106 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05106" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05107" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05108 till 05109 is in use // 0511 is Hannover - "05120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05120" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05121 is Hildesheim - "05122 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05122" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05123 is Schellerten - "05124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05124" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05125" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05126 till 05129 is in use // 05130 till 05132 is in use - "05133 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05134 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05133" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05134" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05135 till 05139 is in use - "05140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05140" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05141 till 05149 is in use - "05150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05150" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05151 till 05159 is in use - "05160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05161 till 05168 is in use - "05169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05169" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05170" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05171 till 05177 is in use - "05178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05178" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05179" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05181 till 05187 is in use - "05188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05188" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0519x is in use - "05200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05201 till 05209 is in use // 0521 is Bielefeld - "05220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05220" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05221 till 05226 is in use - "05227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05227" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05228 is Vlotho-Exter - "05229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05229" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05230" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05231 till 05238 is in use - "05239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05239" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05241 till 0522 is in use - "05243 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05243" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05244 till 05248 is in use - "05249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05249" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05250 till 05255 is in use - "05256 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05256" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05257 till 05259 is in use - "05260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05261 till 05266 is in use - "05267 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05268 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05269 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05267" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05268" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05269" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05270" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05271 till 05278 is in use - "05279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05280" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05281 till 05286 is in use - "05287 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05287" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05288" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05289" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05291" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05292 till 05295 is in use - "05296 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05296" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05297" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05298" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0530x is in use // 0531 is Braunschweig // total 0532x is in use - "05330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05331 till 05337 is in use - "05338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05338" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05339 is Gielde - "05340 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05340" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05341 is Salzgitter - "05342 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05343 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05342" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05343" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05344 till 05347 is in use - "05348 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05348" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05349" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05350" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05351 till 05358 is in use - "05359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05359" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05361 till 05368 is in use - "05369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05371 till 05379 is in use - "05380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05381 till 05384 is in use - "05385 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05386 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05385" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05386" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05387" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05400" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05401 till 05407 is in use - "05408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05408" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05409 is Hilter am Teutoburger Wald // 0541 Osnabrück - "05420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05421 till 05429 is in use - "05430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05431 till 05439 is in use - "05440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05440" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05441 till 05448 is in use - "05449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05449" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05451 till 05459 is in use - "05460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05461 till 05462 is in use - "05463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05463" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05464 till 05468 is in use - "05469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05471 till 05476 is in use - "05477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05477" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05478" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05479" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05481 till 05485 is in use - "05486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05486" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05488" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05490" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05491 till 05495 is in use - "05496 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05497 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05498 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05499 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05496" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05497" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05498" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05499" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05501" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05502 till 05509 is in use // 0551 is Göttingen // 05520 till 05525 is in use - "05526 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05526" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05527 till 05529 is in use - "05530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05531 till 05536 is in use - "05537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05537" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05538" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05541 till 05546 is in use - "05547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05547" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05548" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05549" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05550" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05551 till 05556 is in use - "05557 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05558 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05557" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05558" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05559" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05560" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05561 till 05565 is in use - "05566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05567" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05568" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05569" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05570" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05571 till 05574 is in use - "05575 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05581 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05575" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05576" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05577" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05578" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05579" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05580" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05581" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05582 till 05586 is in use - "05587 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05591 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05587" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05588" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05589" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05590" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05591" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05592 till 05594 is in use - "05595 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05596 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05597 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05595" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05596" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05597" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05598" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05599" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05601 till 05609 is in use // 0561 is Kassel - "05620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05620" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05621 till 05626 is in use - "05627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05628 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05627" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05628" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05629" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05630" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05631 till 05636 is in use - "05637 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05637" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05638" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05639" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05641 till 05648 is in use - "05649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0565x is in use - "05660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05660" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05661 till 05665 is in use - "05666 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05666" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05667" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05668" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05669" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05671 till 05677 is in use - "05678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05678" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05681 till 05686 - "05687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05687" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05691 till 05696 is in use - "05697 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05698 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05697" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05698" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05701" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05702 till 05707 is in use - "05708 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05708" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05709" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0571 is Minden Westfalen - "05720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05721 till 05726 is in use - "05727 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05727" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05728" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05731 till 05734 is in use - "05735 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05735" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05736" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05737" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05738" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05741 till 05746 is in use - "05747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05747" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05751 till 05755 is in use - "05756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05756" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05757" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05758" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05761 is Stolzenau - "05762 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05762" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05763 till 05769 is in use - "05770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05771 till 05777 is in use - "05778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0578" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0579" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05802 till 05808 is in use - "05809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05809" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0581 is Uelzen // total 0582x is in use - "05830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05830" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05831 till 05839 is in use // 05840 till 05846 is in use - "05847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05847" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05848 till 05849 is in use // 05850 till 05855 is in use - "05856 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05856" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05857 till 05859 is in use - "05860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05861 till 05865 is in use - "05866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05867 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05868 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05871 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05866" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05867" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05868" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05869" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05871" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 5872 till 5875 is in use - "05876 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05881 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05876" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05877" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05880" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05881" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05882 till 05883 is in use - "05884 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05885 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05884" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05885" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05886" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05887" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05888" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0589" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05900" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05901 till 05909 is in use // 0591 is Lingen (ems) - "05920 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05920" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05921 till 05926 is in use - "05927 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05928 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05929 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05927" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05928" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05929" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05931 till 05937 is in use - "05938 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05938" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05939 is Sustrum - "05940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05940" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05941 till 05948 is in use - "05949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05949" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05950" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05951 till 05957 is in use - "05958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05958" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05959" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05961 till 05966 is in use - "05967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "05970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05967" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05968" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05969" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05971 is Rheine - "05972 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05972" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05973 is Neuenkirchen Kreis Steinfurt - "05974 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05974" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 05975 till 05978 is in use - "05979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06000 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06001 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "05979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0598" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0599" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06001" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06002 till 06004 is in use - "06005 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06006 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06005" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06006" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06007 till 06008 is in use - "06009 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06009" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0601" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06020 till 06024 is in use - "06025 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06025" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06026 till 06029 is in use - "06030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06030" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06031 till 06036 is in use - "06037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06037" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06038" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06039 is Karben - "06040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06040" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06041 till 06049 is in use // total 0605x is in use - "06060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06060" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06061 till 06063 is in use - "06064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06064" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06065" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06066 is Michelstadt-Vielbrunn - "06067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06067" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06068 is Beerfelden - "06070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06070" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06071 is Dieburg - "06072 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06072" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06073 till 06074 is in use - "06075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06075" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06076" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06077" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06078 is Gross-Umstadt - "06079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06079" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06080" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06081 till 06087 is in use - "06088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06091 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06088" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06089" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06090" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06091" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06092 till 06096 is in use - "06097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06097" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06098" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06099" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06101 till 06109 is in use // 0611 is Wiesbaden // 06120 is Aarbergen - "06121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06121" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06122 till 06124 is in use - "06125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06125" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06126 till 06129 is in use // 06130 till 06136 is in use - "06137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06137" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06138 till 06139 is in use - "06140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06141 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06140" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06141" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06142 is Rüsselsheim - "06143 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06143" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06144 till 06147 is in use - "06148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06148" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06149" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06150 till 06152 is in use - "06153 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06153" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06154 till 06155 is in use - "06156 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06156" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06157 till 06159 is in use - "06160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06161 till 06167 is in use - "06168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06168" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06169" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06170" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06171 till 06175 is in use - "06176 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06176" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06177" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06178" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06179" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06181 till 06188 is in use - "06189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06190 is Hattersheim am Main - "06191 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06191" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06192 is Hofheim am Taunus - "06193 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06194 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06193" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06194" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06195 till 06196 is in use - "06197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06198 is Eppstein - "06199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06199" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06201 till 06207 is in use - "06208 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06208" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06209 is Mörlenbach // 0621 is Mannheim // 06220 till 06224 is in use - "06225 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06225" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06226 till 06229 is in use - "06230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06230" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06231 till 06239 is in use - "06240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06241 till 06247 is in use - "06248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06248" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06249 is Guntersblum - "06250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06250" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06251 till 06258 is in use - "06259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06259" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06261 till 06269 is in use - "06270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06270" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06271 till 06272 is in use - "06273 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06273" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06274 till 06276 is in use - "06277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06277" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06278" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06280" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06281 till 06287 is in use - "06288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06288" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06289" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06291 till 06298 is in use - "06299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06301 till 06308 is in use - "06309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06309" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0631 is Kauserslautern - "06320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06320" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06321 till 06329 is in use - "06330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06331 till 06339 is in use // total 0634x is in use - "06350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06350" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06351 till 06353 is in use - "06354 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06354" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06355 till 06359 is in use - "06360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06361 till 06364 is in use - "06365 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06366 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06367 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06365" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06366" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06367" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06371 till 06375 is in use - "06376 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06376" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06377" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06378" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06379" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06381 till 06837 is in use - "06388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06391 till 06398 is in use - "06399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0640x till 0642x is in use // 06431 till 06436 is in use - "06437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06438 till 06439 is in use // total 0644x is in use - "06450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06451 till 06458 is in use - "06459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06461 till 06462 is in use - "06463 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06463" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06464 till 06468 is in use - "06469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06471 till 06479 is in use - "06480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06481" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06482 till 06486 is in use - "06487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06488" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0650x till 0651 is in use - "06520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06521 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06520" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06521" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06522 till 06527 is in use - "06528 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06529 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06528" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06529" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06531 till 06536 is in use - "06537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06537" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06538" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06541 till 06545 is in use - "06546 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06546" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06547" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06548" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06549" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0655x is in use - "06560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06560" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06561 till 06569 is in use - "06570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06570" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06571 till 06575 is in use - "06576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06576" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06577" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06578 is Salmtal - "06579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06579" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0658x is in use - "06590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06590" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06591 till 06597 is in use - "06598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06598" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06599 is Wiedenbach bei Gerolstein - "0660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0660" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0661 till 0662x is in use // 06630 till 06631 is in use - "06632 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06632" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06633 till 06639 is in use - "06640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06641 till 06648 is in use - "06649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0665x is in use // 06660 till 06661 is in use - "06662 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06662" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06663 till 06669 is in use // 06670 is Ludwigsau Hessen - "06671 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06671" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06672 till 06678 is in use - "06679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06681 till 06684 is in use - "06685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06690 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06685" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06686" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06687" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06690" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06691 till 06698 is in use - "06699 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06699" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06701 is Sprendlingen Rheinhessen - "06702 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06702" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06703 till 06704 is in use - "06705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06705" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06706 till 06709 is in use // 0671 is Bad Kreuznach - "06720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06721 till 06728 is in use - "06729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06731 till 06737 is in use - "06738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06738" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06741 till 06747 is in use - "06748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06751 till 06758 is in use - "06759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06761 till 06766 is in use - "06767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06767" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06768" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06771 till 06776 is in use - "06777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06777" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06780" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06781 to 06789 is in use - "0679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06802 till 06806 is in use - "06807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06807" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06808" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06809 is Grossrosseln // 0681 is Saarbrücken - "06820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06820" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06821 is Neunkirchen Saar - "06822 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06823 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06822" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06823" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06824 till 06827 is in use - "06828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06828" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06829" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06830" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06831 till 06838 is in use - "06839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06839" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06841 till 06844 is in use - "06845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06845" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06846" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06847" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06848 till 06849 is in use - "06850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06850" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06851 till 06858 is in use - "06859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06859" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06861 is Merzig - "06862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06862" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06863" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06864 till 06869 is in use - "06870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06871 till 06876 is in use - "06877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06880 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06877" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06880" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06881 is Lebach - "06882 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06883 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06884 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06885 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06886 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06882" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06883" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06884" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06885" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06886" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06887 rill 06888 is in use - "06889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06890 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06891 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06892 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06890" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06891" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06892" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06893 till 06894 is in use - "06895 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "06896 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06895" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06896" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 06897 till 06898 is in use - "06899 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "06899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 069 is Frankfurt am Mai // 0700 is special number code see: TODO will be coded - see above - "0701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07020 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0701" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07020" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 7021 till 7026 is in use - "07027 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07028 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07029 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07027" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07028" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07029" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07030" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07031 till 07034 is in use - "07035 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07036 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07038 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07039 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07035" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07036" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07037" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07038" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07039" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07040" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07041 till 07046 is in use - "07047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07047" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07048" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07049" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07051 till 07056 is in use - "07057 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07061 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07057" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07058" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07059" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07060" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07061" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07062 till 07063 is in use - "07064 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07065 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07064" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07065" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07066 is Bad Rappenau-Bonfeld - "07067 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07067" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07068" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07069" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07070" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07071 till 07073 is in use - "07074 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07075 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07076 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07074" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07075" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07076" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07077" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07078" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07079" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07080" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07081 till 07085 is in use - "07086 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0709 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0710 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07086" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07087" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07088" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07089" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0709" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0710" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0711 is Stuttgart - "07120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07120" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07121 till 07129 is in use // 07130 till 07136 is in use - "07137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07137" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07138 till 07139 is in use - "07140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07140" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07141 till 07148 is in use - "07149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07149" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07150" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07150 till 07154 is in use - "07155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07155" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07156 till 07159 is in use - "07160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07161 till 07166 is in use - "07167 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07170 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07167" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07168" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07169" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07170" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07171 till 07176 is in use - "07177 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07178 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07179 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07180 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07177" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07178" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07179" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07180" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07181 till 07184 is in use - "07185 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07186 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07187 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07188 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07189 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07185" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07186" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07187" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07188" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07189" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07190" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07191 till 07195 - "07196 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07196" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07198" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07199" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07201" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07202 till 07204 is in use - "07205 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07206 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07207 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07208 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07205" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07206" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07207" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07208" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07209" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0721 is Karlsbad // total 0722x is in use - "07230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07230" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07231 till 07237 is in use - "07238 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07238" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07239" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07240 is Pfinztal - "07241 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07241" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07242 till 07249 is in use // 0725x till 0726x is in use - "07270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07270" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07271 till 07277 is in use - "07278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0728 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07278" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0728" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07300 is Roggenburg - "07301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07301" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0732 till 0739 is in use // 0731 is Ulm Donau - "07320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07320" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07321 till 07329 is in use - "07330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07331 till 07337 is in use - "07338 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07338" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07339" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07340 is Neenstetten - "07341 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07342 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07341" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07342" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07343 till 07348 is in use - "07349 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07350 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07349" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07350" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07351 till 07358 is in use - "07359 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07359" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07361 till 07367 is in use - "07368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07369 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07369" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07371 is Riedlingen Württemberg - "07372 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07372" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07373 till 07376 is in use - "07377 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07378 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07377" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07378" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07379" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07381 till 07389 is in use - "07390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07391 till 07395 is in use - "07396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07401 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07396" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07397" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07398" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07400" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07401" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07402 till 07404 is in use - "07405 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07406 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07407 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07409 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07405" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07406" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07407" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07408" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07409" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0741 is Deisslingen // 07420 is Schramberg // 07421 till 07429 is in use - "07430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07431 till 07436 is in use - "07437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07438" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07439" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0744x is in use - "07450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07451 till 07459 is in use - "07460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07461 till 07467 is in use - "07468 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07469 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07468" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07469" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07471 till 07478 is in use - "07479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07480 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07481 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07479" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07480" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07481" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07482 till 07486 is in use - "07487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07488" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07501" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07502 till 07506 is in use - "07507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07507" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07508" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07509" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0751 Ravensburg // 07520 is Bodnegg - "07521 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07521" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07522 is Wangen im Allgäu - "07523 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07523" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07524 till 07525 is in use - "07526 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07526" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07527 till 07529 is in use - "07530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07531 till 07534 is in use - "07535 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07536 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07535" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07536" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07537" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07538" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07541 till 07546 is in use - "07547 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07548 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07549 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07547" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07548" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07549" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07550" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07551 till 07558 is in use - "07559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07559" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07560" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07561 till 07569 is in use // total 0757x is in use - "07580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07580" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07581 till 07587 is in use - "07588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07588" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07589" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07601" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07602 is Oberried Breisgau - "07603 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07604 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07605 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07606 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07607 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07608 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07603" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07604" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07605" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07606" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07607" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07608" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07609" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0761 Freiburg im Breisgau // total 0762x is in use - "07630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07630" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07631 till 07636 is in use - "07637 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07638 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07639 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07637" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07638" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07639" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07641 till 07646 - "07647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07647" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07648" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07651 till 07657 is in use - "07658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07658" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07659" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0766x is in use - "07670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07671 till 07676 is in use - "07677 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07678" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 076781 till 07685 is in use - "07686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07686" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07687" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07701" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07702 till 07709 is in use // 0771 is Donaueschingen // total 0772x is in use - "07730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07731 till 07736 is in use - "07737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07737" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07738 till 07339 is in use - "07740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07741 till 07748 is in use - "07749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07751 is Waldshut - "07752 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07752" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07753 till 07755 is in use - "07756 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07756" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07757" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07758" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07771 is Stockach - "07772 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07772" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07773 till 07775 is in use - "07776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07776" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07777 is Sauldorf - "07778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07802 till 07808 is in use - "07809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07809" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0781 is Offenburg - "07820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07820" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07821 till 07826 is in use - "07827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07827" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07828" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07829" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07830" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07831 till 07839 is in use - "07840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07841 till 07844 is in use - "07845 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07846 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07845" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07846" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07847" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07848" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07850" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07851 till 07854 is in use - "07855 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07856 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07857 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07858 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07855" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07856" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07857" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07858" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07859" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0786" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0787" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0788" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0789" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07900" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07901" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07902" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07903 till 07907 is in use - "07908 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07908" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07909" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0791 is Schwäbisch Hall - "0792 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0792" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0793x till 0794x is in use // 07950 till 07955 is in use - "07956 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07956" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07957 till 07959 is in use - "07960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07961 till 07967 is in use - "07968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07968" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07969" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 07971 till 07977 is in use - "07978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "07979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0798 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0799 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07978" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "07979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0798" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0799" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0800 is special number code see: TODO will be coded - see above - "0801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0802x is in use - "08030 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08030" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08031 till 08036 is in use - "08037 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08037" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08038 till 08039 is in use - "08040 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08040" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08041 till 08043 is in use - "08044 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08044" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08045 till 08046 is in use - "08047 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08048 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08049 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08050 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08047" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08048" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08049" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08051 till 08057 is in use - "08058 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08059 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08060 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08058" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08059" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08060" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08061 till 08067 is in use - "08068 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08069 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08070 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08068" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08069" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08070" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08071 till 08076 is in use - "08077 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08078 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08080 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08077" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08078" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08079" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08080" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08081 till 08086 is in use - "08087 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08088 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08089 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08090 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08087" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08088" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08089" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08090" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08091 till 08095 is in use - "08096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08097 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08099 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08101 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08096" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08097" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08098" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08099" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08101" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08102 is Höhenkirchen-Siegertsbrunn - "08103 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08103" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08104 till 08106 is in use - "08107 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08107" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08108" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08109" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0811 is Halbergmoos - "08120 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08120" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08121 till 08124 is in use - "08125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08126 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08127 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08128 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08129 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08125" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08126" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08127" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08128" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08129" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08130" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08131 is Dachau - "08132556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08132" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08133 till 08139 is in use - "08140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08140" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08141 till 08146 is in use - "08147 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08148 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08149 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08147" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08148" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08149" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08150" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08151 till 08153 is in use - "08154 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08155 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08156 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08154" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08155" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08156" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08157 till 08158 is in use - "08159 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08159" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08161 is Freising - "08162 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08163 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08164 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08162" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08163" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08164" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08165 till 08168 is in use - "08169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08169" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08170 till 08171 is in use - "08172 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08173 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08174 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08175 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08172" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08173" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08174" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08175" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08176 till 08179 is in use - "0818 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08190 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0818" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08190" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08191 till 08196 is in use - "08197 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08198 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08199 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08201 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08198" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08199" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08201" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08202 till 08208 is in use - "08209 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08209" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0821 is Augsburg - "08220 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08220" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08221 till 08226 is in use - "08227 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08228 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08229 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08227" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08228" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08229" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08230 till 08234 is in use - "08235 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08235" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08236 till 08239 is in use - "08240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08241 is Buchloe - "08242 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08242" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08243 is Fuchstal - "08244 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08244" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08245 till 08249 is in use // 08250 till 08254 is in use - "08255 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08256 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08255" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08256" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08257 till 08259 is in use - "08260 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08260" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08261 till 08263 is in use - "08264 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08264" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08265 till 08269 is in use - "08270 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08270" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08271 till 08274 is in use - "08275 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08275" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08276 is Baar Schwaben - "08277 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08278 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08279 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08280 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08277" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08278" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08279" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08280" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08281 till 08285 is in use - "08286 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08287 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08288 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08289 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08286" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08287" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08288" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08289" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08291 till 08296 is in use - "08297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08299 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08297" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08298" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08299" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08301" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08302 till 08304 is in use - "08305 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08305" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08306 is Ronsberg - "08307 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08308 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08307" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08308" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08309" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0831 is Kempten Allgäu // 08320 till 08328 is in use - "08329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08329" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08330 till 08338 is in use - "08339 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08339" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0834x is in use - "0835 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08360 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0835" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08360" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08361 till 08369 is in use // 08370 is Obergünzburg - "08371 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08371" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08372 till 08379 is in use // total 0838x is in use - "08390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08391 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08391" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08392 till 08395 is in use - "08396 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08397 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08398 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08401 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08396" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08397" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08398" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08400" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08401" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08402 till 08407 is in use - "08408 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08409 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08408" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08409" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0841 is Ingolstadt Donau - "08420 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08420" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08421 till 08424 is in use - "08425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08425" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08426 till 08427 is in use - "08428 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08429 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08428" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08429" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08431 till 08435 is in use - "08436 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08438 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08439 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08436" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08438" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08439" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08440" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08441 till 08446 is in use - "08447 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08448 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08447" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08448" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08449" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08450 is Ingoldstadt-Zuchering - "08451 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08451" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08452 till 08454 is in use - "08455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08455" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08456 till 08459 is in use // total 0846x is in use - "0847 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0847" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0848" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08501 till 08507 is in use - "08508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08508" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08509 is Ruderting // 0851 is Passau - "0852 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0852" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08531 till 08538 is in use - "08539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08541 till 08549 is in use // 08550 till 08558 is in use - "08559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08560 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08559" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08560" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08561 till 08565 is in use - "08566 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08567 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08568 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08569 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08566" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08567" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08568" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08569" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08570" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08571 till 08574 is in use - "08575 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08576 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08580 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08575" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08576" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08577" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08578" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08579" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08580" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08581 till 08586 is in use - "08587 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08588 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08589 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08590 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08587" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08588" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08589" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08590" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08591 till 08593 is in use - "08594 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08595 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08596 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08597 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08598 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08599 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08594" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08595" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08596" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08597" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08598" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08599" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0861 is Traunstein - "08620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08620" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08621 till 08624 is in use - "08625 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08626 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08627 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08625" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08626" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08627" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08628 till 08629 is in use // 08630 till 08631 is in use - "08632 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08632" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08633 till 08639 is in use // 08640 till 08642 is in use - "08643 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08644 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08645 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08646 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08647 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08648 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08643" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08644" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08645" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08646" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08647" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08648" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08649 is Schleching // 08650 till 08652 is in use - "08653 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08653" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08654 Freilassing - "08655 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08655" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08656 till 08657 is in use - "08658 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08659 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08658" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08659" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08660" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08661 till 08667 is in use - "08668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08668" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08669 is Traunreut // 08670 till 08671 is in use - "08672 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08673 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08674 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08675 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08676 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08672" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08673" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08674" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08675" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08676" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08677 till 086779 is in use - "08680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08681 till 08687 is in use - "08688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0869 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08701 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0869" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08701" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08702 till 08709 is in use // 0871 is Landshut - "08720 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08720" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08721 till 08728 is in use - "08729 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08729" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08731 till 08735 is in use - "08736 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08737 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08738 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08736" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08737" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08738" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08741 till 08745 is in use - "08746 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08747 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08748 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08749 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08750 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08746" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08747" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08748" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08749" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08750" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08751 till 08754 is in use - "08755 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08755" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08756 is Nandlstadt - "08757 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08758 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08759 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08757" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08758" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08759" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08761 till 08762 is in use - "08763 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08763" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08764 till 08766 is in use - "08767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08767" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08768" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08771 till 08774 is in use - "08775 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08776 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08777 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08778 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08779 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08780 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08775" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08776" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08777" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08778" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08779" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08780" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08781 till 08785 is in use - "08786 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08787 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08788 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08789 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08786" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08787" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08788" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08789" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08801 till 08803 is in use - "08804 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08804" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08805 till 08809 is in use // 0881 is Weilheim in Oberbayern - "08820 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08820" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08821 till 08826 is in use - "08827 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08828 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08829 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0883 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08827" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08828" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08829" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0883" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08841 is Murnau am Staffelsee - "08842 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08843 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08844 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08842" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08843" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08844" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08845 till 08847 is in use - "08848 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08848" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08850" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08851 is Kochel am See - "08852 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08853 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08854 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08855 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08852" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08853" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08854" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08855" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08856 till 08858 is in use - "08859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08859" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08860 till 08862 is in use - "08863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08865 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "08866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08863" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08864" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08865" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "08866" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 08867 till 08869 is in use - "0887 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0888 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0889 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0887" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0888" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 089 is München - "09000 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09001 Information Service TODO:see above - "09002 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09002" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09003 Entertainment Service TODO:see above - "09004 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09004" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09005 other premium services TODO: see above - "09006 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09007 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09008 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09009 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0901 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0903 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0904 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0905 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09006" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09007" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09008" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09009" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0901" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0902" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0903" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0904" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0905" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0906 is Donauwörth // 09070 till 09078 is in use - "09079 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09079" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0908x is in use // 09090 till 0904 is in use - "09095 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09096 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09095" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09096" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09097 is Marxheim - "09098 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09098" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09099 is Kaisheim - "09100 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09100" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09101 till 09107 is in use - "09108 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09109 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09108" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09109" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0911 is Nürnberg // 09120 is Leinburg - "09121 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09121" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09122 till 09123 is in use - "09124 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09125 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09124" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09125" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09126 till 09129 is in use - "09130 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09130" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09131 till 09135 is in use - "09136 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09137 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09138 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09139 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09140 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09136" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09137" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09138" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09139" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09140" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09141 till 09149 is in use - "09150 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09150" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09151 till 09158 is in use - "09159 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09160 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09159" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09160" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09161 till 09167 is in use - "09168 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09169 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09168" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09169" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0917x till 0919x is in use - "09200 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09201 till 09209 is in use // 0921 is Bayreuth // 09220 till 09223 is in use - "09224 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09224" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09225 is Stadtsteinach - "09226 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09226" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09227 till 09229 is in use - "09230 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09230" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09231 till 09236 is in use - "09237 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09237" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09238 is Röslau - "09239 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09240 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09239" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09240" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09241 till 09246 is in use - "09247 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09248 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09249 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09250 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09247" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09248" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09249" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09250" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09251 till 09257 is in use - "09258 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09259 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09258" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09259" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0926x till 0928x is in use - "09290 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09291 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09290" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09291" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09292 till 09295 is in use - "09296 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09297 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09298 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09300 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09301 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09296" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09297" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09298" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09301" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09302 till 09303 is in use - "09304 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09304" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09305 till 09307 is in use - "09308 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09309 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09308" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09309" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0931 is Würzburg - "09320 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09320" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09321 is Kitzingen - "09322 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09322" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09323 till 09326 is in use - "09327 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09328 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09329 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09330 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09327" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09328" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09329" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09331 till 09339 is in use // 0934x till 0935x is in use // 09360 is Thüngen - "09361 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09362 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09361" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09362" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09363 till 09367 is in use - "09368 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09368" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09369 is Uettingen - "09370 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09370" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09371 till 09378 is in use - "09379 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09380 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09379" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09380" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09381 till 09386 is in use - "09387 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09388 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09389 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09390 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09387" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09388" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09389" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09390" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09391 till 09398 is in use - "09399 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09400 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09399" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09400" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09401 till 09409 is in use // 0941 is Regensburg // 09420 till 09424 is in use - "09425 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09425" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09426 till 09429 is in use - "09430 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09430" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09431 is Schwandorf - "09432 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09432" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09433 till 09436 is in use - "09437 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09437" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09438 till 09439 is in use - "09440 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09440" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09441 till 09448 is in use - "09449 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09450 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09449" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09450" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09451 till 09454 is in use - "09455 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09456 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09457 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09458 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09459 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09460 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09455" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09456" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09457" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09458" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09459" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09460" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09461 till 09649 is in use - "09470 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09470" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09471 till 09474 is in use - "09475 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09476 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09477 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09478 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09479 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09475" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09476" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09477" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09478" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09479" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09480 till 09482 is in use - "09483 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09483" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09484 is Brennberg - "09485 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09486 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09487 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09488 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09489 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09490 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09485" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09486" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09487" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09488" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09489" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09490" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09491 till 09493 is in use - "09494 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09494" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09495 is Breitenbrunn Oberfalz - "09496 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09496" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09497 till 09499 is in use - "09500 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09501 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09500" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09501" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09502 till 09505 is in use - "09506 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09507 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09508 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09509 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09506" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09507" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09508" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09509" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0951 is Bamberg - "09520 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09520" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09521 till 09529 is in use - "09530 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09530" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09531 till 09536 is in use - "09537 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09538 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09539 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09540 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09541 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09537" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09538" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09539" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09540" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09541" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09542 till 09549 is in use - "09550 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09550" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09551 till 09556 is in use - "09557 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09558 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09559 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09557" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09558" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09559" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0956x is in use - "09570 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09570" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09571 till 09576 is in use - "09577 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09578 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09579 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09600 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09601 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09577" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09578" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09579" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0958" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0959" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09600" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09601" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09602 till 09608 is in use - "09609 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09609" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0961 is Weiden in der Oberfalz - "09620 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09620" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09621 till 09622 is in use - "09623 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09623" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09624 till 09628 is in use - "09629 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09630 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09629" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09630" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09631 till 09639 is in use - "09640 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09640" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09641 till 09648 is in use - "09649 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09650 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09649" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09650" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09651 till 09659 is in use - "09660 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09660" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09661 till 09666 is in use - "09667 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09668 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09669 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09670 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09667" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09668" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09669" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09670" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09671 till 09677 is in use - "09678 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09679 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09680 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09678" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09679" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09680" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09681 till 09683 is in use - "09684 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09685 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09686 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09687 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09688 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09689 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09700 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09684" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09685" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09686" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09687" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09688" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09689" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0969" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09700" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09701 is Sandberg Unterfranken - "09702 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09703 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09702" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09703" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09704 is Euerdorf - "09705 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09706 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09707 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09705" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09706" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09707" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09708 is Bad Bocklet // total 0972x is in use - "09730 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09731 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09730" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09731" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09732 till 09738 is in use - "09739 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09740 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09739" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09740" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09741 till 09742 is in use - "09743 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09743" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09744 till 09749 is in use - "0975 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09760 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0975" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09760" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09761 till 09766 is in use - "09767 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09768 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09769 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09770 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09767" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09768" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09769" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09770" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09771 till 09779 is in use - "0978 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09800 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09801 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0978" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09800" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09802 till 09805 - "09806 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09807 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09808 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09809 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09806" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09807" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09808" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09809" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0981 is Ansbach // 09820 is Lehrberg - "09821 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09821" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09822 till 09829 is in use - "09830 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09830" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09831 till 09837 s in use - "09838 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09839 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09840 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09838" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09839" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09840" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09841 till 09848 is in use - "09849 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09850 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09849" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09850" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09851 till 09857 is in use - "09858 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09859 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09860 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09858" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09859" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09860" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09861 is Rothenburg ob der Tauber - "09862 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09863 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09864 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09862" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09863" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09864" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09865 is Adelshofen Mittelfranken - "09866 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09866" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09867 till 09869 is in use - "09870 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09870" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09871 till 09876 is in use - "09877 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09878 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09879 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0988 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0989 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09900 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09877" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09878" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09879" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0988" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0989" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09900" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09901 is Hengersberg Bayern - "09902 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09902" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09903 till 09908 is in use - "09909 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09909" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0991 is Deggendorf // total 0992x is in use - "09930 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09930" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09931 till 09933 is in use - "09934 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09934" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09935 till 09938 is in use - "09939 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09940 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09939" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09940" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09941 till 09948 is in use - "09949 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09950 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09949" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09950" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09951 till 09956 is in use - "09957 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09958 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09959 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09960 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09957" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09958" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09959" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09960" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09961 till 09966 is in use - "09967 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09968 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09969 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09970 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09967" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09968" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09969" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09970" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09971 till 09978 is in use - "09979 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0998 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "0999 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "09979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0998" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "0999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } From ed5c860b981f208778be61fa7f999f93a491cc25 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 3 Feb 2024 17:38:15 +0100 Subject: [PATCH 051/135] updated TODO notes in NDC test for outsourced ranges added test at IsPossibleNumberWithReasonTest for Online Services 019(1-4) --- .../IsPossibleNumberWithReasonTest.groovy | 94 +++++++++++++++---- 1 file changed, 78 insertions(+), 16 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 9d2cfbe..52bde3e 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -159,7 +159,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // end of 115 } - def "check if original lib fixed isPossibleNumberWithReason for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -227,7 +226,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // end of 116 } - def "check if original lib fixed isPossibleNumberWithReason for German Call Assistant short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -338,7 +336,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // end of 118 } - def "check if original lib fixed isPossibleNumberWithReason for ambulance transport 19222 short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -432,7 +429,6 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for German Mobile 15 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { given: String[] numbersToTest @@ -1512,7 +1508,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // 016399 is reserved for voicemail - see tests below } - def "check if original lib fixed isPossibleNumberWithReason for German Mobile 16 range with voicemail infix"(String numberUntilInfix, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [numberUntilInfix + "000000", @@ -1567,7 +1562,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "016399" | "DE" | [true, false, false, true, true, false, false, true] } - def "check if original lib fixed isPossibleNumberWithReason for German reserve 16 range"(String reserve, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", @@ -1672,7 +1666,6 @@ class IsPossibleNumberWithReasonTest extends Specification { } - def "check if original lib fixed isPossibleNumberWithReason for German Mobile 17 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { given: String[] numbersToTest @@ -1956,7 +1949,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "01799" | "DE" | [true, false, false, true, true, false, false, true] } - def "check if original lib fixed isPossibleNumberWithReason for German Mobile 17 range with voicemail infix"(String numberUntilInfix, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [numberUntilInfix + "000000", @@ -2040,7 +2032,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "017933" | "DE" | [true, false, false, true, true, false, false, true] } - def "check if original lib fixed isPossibleNumberWithReason for German ServiceNumbers 180 range"(String reserve, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", @@ -2365,6 +2356,67 @@ class IsPossibleNumberWithReasonTest extends Specification { "+4918 59995" | "FR" | [true, true, true, true, false, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German Online Services 019(1-4)"(String reserve, boolean historic, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if (historic) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // BnetzA mentioned historic numbers are 4 digits long + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // TODO: BnetzA only mentioned historic 4 digit numbers, but since we found 6 digit in use, we asume the gab with 5 digits should be possible + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // At TDG (Deutsche Telekom Germany) we are using historic 0191 range with a 6 digit number + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // BnetzA specified just 6 digits for current numbers + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } + + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | historic | regionCode | expectingFails + // 019(1-4) is Online Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/019xyz/019_Nummernplan.pdf?__blob=publicationFile&v=1 + // while currently only 019(2-4) is used, there are historically 019(1-3) allocations with other structure. + // are those services dead? https://www.teltarif.de/internet/by-call/ + // Deutsche Telekom still offers 0191011 see https://www.telekom.de/hilfe/festnetz-internet-tv/anschluss-verfuegbarkeit/anschlussvarianten/festnetz-internet/einwahlnummern-internetzugang-aus-dem-ausland?samChecked=true + // that is historically a 0191 range, but not limit to 4 digits but using 6! + // Vodafone Germany is offering 0192070 see https://www.vodafone.de/media/downloads/pdf/090512_Preisliste_Vodafone_Festnetz.pdf + // Historical: 4 to 6 + "0191" | true | "DE" | [true, false, false, false, true, true] + "0192" | true | "DE" | [true, false, false, false, true, true] + "0193" | true | "DE" | [true, false, false, false, true, true] + "+49191" | true | "FR" | [true, false, false, false, true, true] + "+49192" | true | "FR" | [true, false, false, false, true, true] + "+49193" | true | "FR" | [true, false, false, false, true, true] + // current: 6 digits + "0194" | false | "DE" | [true, true, true, false, true, true] + "+49194" | false | "FR" | [true, true, true, false, true, true] + + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -2465,13 +2517,24 @@ class IsPossibleNumberWithReasonTest extends Specification { // 017x is checked in Mobile 17 and 17 voicemail see above // --- // --- - // 0180 TODO: 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // 0180 is checked in Service Numbers 0180 and its reserve + // --- + // --- + // 0181 is checked in international VPN 0181 + // --- + // --- + // 018(2-9) is checked in German national VPN 018(2-9) range and that it is only reachable nationally + // --- + "0190" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve - previously premium rate numbers, which were relocated to 0900 + // --- + // TODO: 019(1-4) Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // --- + "0195" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + "0196" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + "0197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + // --- + // TODO: 019(8&9) is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html // --- - // TODO: 018(2-9) is VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html - // TODO: 0181 is international VPN see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html - // TODO: 019xyz Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html - // TODO: 019x is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html - // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html @@ -5827,7 +5890,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "0999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } - def "check if original lib fixes Romania special service 7 marking too long"(String number, regionCode, expectedResult, expectingFail) { given: From 7558a8b54a9a67f89c03ddd609c33e90e641ee48 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 3 Feb 2024 18:13:31 +0100 Subject: [PATCH 052/135] updated 019(1-4) todo in NDC test and prepared 019(8-9) traffic routing numbers by adding the reserve ranges and todos for used once --- .../IsPossibleNumberWithReasonTest.groovy | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 52bde3e..fb48f6d 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2356,7 +2356,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "+4918 59995" | "FR" | [true, true, true, true, false, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German Online Services 019(1-4)"(String reserve, boolean historic, regionCode, boolean[] expectingFails) { + def "check if original lib fixed isPossibleNumberWithReason for German Online Services 019(1-4) inc. historic"(String reserve, historic,regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", reserve + "2", @@ -2527,13 +2527,25 @@ class IsPossibleNumberWithReasonTest extends Specification { // --- "0190" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve - previously premium rate numbers, which were relocated to 0900 // --- - // TODO: 019(1-4) Online Services see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // 019(1-4) is checked in German Online Services 019(1-4) inc. historic // --- "0195" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "0196" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "0197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve // --- + // Traffic management numbers are only valid between operators - so not for end customers to call // TODO: 019(8&9) is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + "01980" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + // TODO: 01981 - emergency routing from mobile + // TODO: 01982 - emergency routing + "01983" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + "01984" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + "01985" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve + // TODO: 01986 - 115 Service Routing + // TODO: 01987 - 116 Service Routing + // TODO: 01988 - International FreeCall Routing + // TODO: 01989 - Assistant Service Routing + // TODO: 0199 - network internal Routing // --- // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html From 01df3a291ac1982d255a8f2308f0dd631762e6bc Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 4 Feb 2024 15:48:56 +0100 Subject: [PATCH 053/135] Extended the values of PhoneNumberValidationResult enumeration to cover policies found when creating testcases for validation of numbers against the German number plan --- .../PhoneNumberValidationResult.java | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java index a72ece6..bca1403 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -10,40 +10,69 @@ * It differentiate two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} for any negative case, which is not explicitly covered by any of the other four values. * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focus on a specific number part - the Country Code. *

- * Validation of other parts of the number are not covered by an own value. So this enum wrapper is introducing {@link PhoneNumberValidationResult#INVALID_NATIONAL_ACCESS_CODE} for number plans with a national access code. + * This wrapper introduces explicit INVALID_ reason codes for currently undifferentiated number parts IDP, NAC and NDC. Lastly there is also {@link PhoneNumberValidationResult#INVALID_DRAMA_NUMBER} reason code for the whole number if it is reserved as a fictional number in arts. + *

+ * Furthermore it introduces additional IS_POSSIBLE_ values, to hint for more specific calling restrictions of the validated number besides {@link PhoneNumberValidationResult#IS_POSSIBLE_LOCAL_ONLY}. *

* @see ValidationResult */ - -// TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 - public enum PhoneNumberValidationResult { - /** The number length matches that of valid numbers for this region. */ + /** The number length matches that of valid numbers for this region or used NDC without any identified calling restrictions. */ IS_POSSIBLE(ValidationResult.IS_POSSIBLE), /** - * The number length matches that of local numbers for this region only (i.e. numbers that may - * be able to be dialled within an area, but do not have all the information to be dialled from + * The number length/pattern matches that of local numbers for this region only (i.e. numbers that may + * be able to be dialled within an area, but does not have all the information e.g. NDC or is not allowed to be dialled from * anywhere inside or outside the country). */ IS_POSSIBLE_LOCAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), - /** The number has an invalid country calling code. */ + /** + * The number length/pattern matches that of national numbers for this region only (i.e. numbers that may + * be able to be dialled within an area or the region itself, but is not allowed to be dialled from + * anywhere outside the country using CC). + */ + IS_POSSIBLE_NATIONAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** + * The number length/pattern matches that of international number for this region only (i.e. number is not allowed to be call from within the region, + * even if CC of the regions is used). + */ + IS_POSSIBLE_INTERNATIONAL_ONLY(ValidationResult.IS_POSSIBLE), + /** + * The number length/pattern matches that of national VPN number for this region only (i.e. number is only allowed to be call from other numbers of same VPN within this region and not by users of the public telephony network). + */ + IS_POSSIBLE_NATIONAL_VPN_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** + * The number length/pattern matches that of VPN number for this region only (i.e. number is only allowed to be call from other numbers of same VPN even internationally but not by users of the public telephony network). + */ + IS_POSSIBLE_VPN_ONLY(ValidationResult.IS_POSSIBLE), + /** + * The number length/pattern matches that of operator traffic control numbers for this region only (i.e. number is only allowed to be call between operators for call routing and not directly by users of the public telephony network). + */ + IS_POSSIBLE_OPERATOR_ONLY(ValidationResult.IS_POSSIBLE), + /** The number has an invalid international dialing prefix (aka IDP) for this region. */ + INVALID_INTERNATIONAL_DIALING_PREFIX(ValidationResult.INVALID_LENGTH), + /** The number has an invalid national destination code (aka NDC) for this region. */ INVALID_COUNTRY_CODE(ValidationResult.INVALID_COUNTRY_CODE), - /** The number has an invalid national access code. */ + /** The number has an invalid national access code (aka NAC). */ INVALID_NATIONAL_ACCESS_CODE(ValidationResult.INVALID_LENGTH), - /** The number is shorter than all valid numbers for this region. */ + /** The number has an invalid country calling code (aka CC). */ + INVALID_NATIONAL_DESTINATION_CODE(ValidationResult.INVALID_LENGTH), + /** The number is shorter than all valid numbers for this region or used NDC. */ TOO_SHORT(ValidationResult.TOO_SHORT), /** - * The number is longer than the shortest valid numbers for this region, shorter than the - * longest valid numbers for this region, and does not itself have a number length that matches + * The number is longer than the shortest valid numbers for this region or used NDC, shorter than the + * longest valid numbers for this region or used NDC, and does not itself have a number length that matches * valid numbers for this region. This can also be returned in the case where * isPossibleNumberForTypeWithReason was called, and there are no numbers of this type at all - * for this region. + * for this region or used NDC while none of the other INVALID values would match. */ INVALID_LENGTH(ValidationResult.INVALID_LENGTH), - /** The number is longer than all valid numbers for this region. */ - TOO_LONG(ValidationResult.TOO_LONG); + /** The number is longer than all valid numbers for this region, or for the used NDC. */ + TOO_LONG(ValidationResult.TOO_LONG), + /** The number is matching a drama number range, which simulates valid number for this region only used in movies or other fictional story telling. */ + INVALID_DRAMA_NUMBER(ValidationResult.INVALID_LENGTH); + /** * storing the corresponding enum value of {@link ValidationResult} */ From 9548b802ec54432326fd90049f4997149cbf9be0 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Tue, 6 Feb 2024 17:16:45 +0100 Subject: [PATCH 054/135] Finalized German traffic routing 01981 of mobile Emergency calls --- .../IsPossibleNumberWithReasonTest.groovy | 81 ++++++++++++++++++- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index fb48f6d..5efede4 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -16,7 +16,6 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil -import de.telekom.phonenumbernormalizer.numberplans.PhoneNumberValidationResult import spock.lang.Specification import java.util.logging.Logger @@ -2417,6 +2416,82 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01981 of mobile Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667", + reserve + "223344556677"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((operator) && (regionCode == "DE")) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.TOO_LONG] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.TOO_LONG] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it could be checked if A is 2..5 and B is 1..3 + // additionally only valid NDCs see below could also be checked but that would be more a IsValid check + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will allways fail until it could distingush it + "01981" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, false] + "01981" | true | "DE" | [true, true, true, true, true, true, true, true, false, false, false, false, false] + "+491981" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, false] + "+491981" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, false] + + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -2536,7 +2611,9 @@ class IsPossibleNumberWithReasonTest extends Specification { // Traffic management numbers are only valid between operators - so not for end customers to call // TODO: 019(8&9) is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html "01980" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve - // TODO: 01981 - emergency routing from mobile + // --- + // 01981 is checked in German traffic routing 01981 of mobile Emergency calls + // --- // TODO: 01982 - emergency routing "01983" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "01984" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve From 085832a63ae1fcc917b9483904c3d7480750b91d Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 9 Feb 2024 21:11:35 +0100 Subject: [PATCH 055/135] Added test for two more digits of German traffic routing 01981 of mobile Emergency calls to verify if possible or not. --- .../PhoneNumberValidationResult.java | 16 + .../IsPossibleNumberWithReasonTest.groovy | 276 +++++++++++++++++- 2 files changed, 290 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java index bca1403..879fab7 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -46,6 +46,10 @@ public enum PhoneNumberValidationResult { * The number length/pattern matches that of VPN number for this region only (i.e. number is only allowed to be call from other numbers of same VPN even internationally but not by users of the public telephony network). */ IS_POSSIBLE_VPN_ONLY(ValidationResult.IS_POSSIBLE), + /** + * The number length/pattern matches that of national operator traffic control numbers for this region only (i.e. number is only allowed to be call between national operators for call routing and not directly by users of the public telephony network). + */ + IS_POSSIBLE_NATIONAL_OPERATOR_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), /** * The number length/pattern matches that of operator traffic control numbers for this region only (i.e. number is only allowed to be call between operators for call routing and not directly by users of the public telephony network). */ @@ -94,4 +98,16 @@ public ValidationResult getPhoneLibValidationResult() { return phoneLibResult; } + /** + * Returns if the validation result identifies a possible number regardless of calling limitations + * @return boolean true for any IS_POSSIBLE(_xxx) enum value + */ + public boolean isSomeHowValid() { + return ((this == IS_POSSIBLE) || (this == IS_POSSIBLE_LOCAL_ONLY) + || (this == IS_POSSIBLE_NATIONAL_ONLY) || (this == IS_POSSIBLE_NATIONAL_VPN_ONLY) || (this == IS_POSSIBLE_NATIONAL_OPERATOR_ONLY) + || (this == IS_POSSIBLE_INTERNATIONAL_ONLY) + || (this == IS_POSSIBLE_VPN_ONLY) + || (this == IS_POSSIBLE_OPERATOR_ONLY)); + } + } diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 5efede4..eaf485d 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2418,6 +2418,7 @@ class IsPossibleNumberWithReasonTest extends Specification { def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01981 of mobile Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { given: + // starting with 22 is giving a real number - 3344 is area code for Bad Freienwalde String[] numbersToTest = [reserve + "", reserve + "2", reserve + "22", @@ -2481,17 +2482,288 @@ class IsPossibleNumberWithReasonTest extends Specification { // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators // 01981-AB-(NDC 2-5 digits)-CC-XY - // additionally it could be checked if A is 2..5 and B is 1..3 + // additionally it could be checked if A is 2..5 and B is 1..3 (see own test below) // additionally only valid NDCs see below could also be checked but that would be more a IsValid check - // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will allways fail until it could distingush it + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it "01981" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, false] "01981" | true | "DE" | [true, true, true, true, true, true, true, true, false, false, false, false, false] "+491981" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, false] "+491981" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, false] + } + + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01981xx of mobile Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + // 2233 is are code of Hürth + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((operator) && (regionCode == "DE")) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.TOO_LONG] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for national operators + PhoneNumberUtil.ValidationResult.TOO_LONG] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it is checked if A is 2..5 and B is 1..3 + // additionally only valid NDCs see below could also be checked but that would be more a IsValid check + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + + // Telekom Deutschland GmbH + "0198121" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198121" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198122" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198122" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198123" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198123" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + // Vodafone GmbH + "0198131" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198131" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198132" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198132" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198133" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198133" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + // Telefónica Germany GmbH & Co. OHG + "0198141" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198141" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198142" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198142" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198143" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198143" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + // Telefónica Germany GmbH & Co. OHG + "0198151" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198151" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198152" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198152" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + "0198153" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, false] + "0198153" | true | "DE" | [true, true, true, true, true, true, false, false, false, false, false] + + "+49198121" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198121" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198122" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198122" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198123" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198123" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + + "+49198131" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198131" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198132" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198132" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198133" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198133" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + + "+49198141" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198141" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198142" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198142" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198143" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198143" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + + "+49198151" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198151" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198152" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198152" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198153" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, false] + "+49198153" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] } + def "check if original lib fixed isPossibleNumberWithReason for German invalid traffic routing 01981xx of mobile Emergency calls"(String reserve, regionCode, boolean[] expectingFails) { + given: + // 2233 is are code of Hürth + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it is checked for non A is 2..5 and B is 1..3 + + "0198100" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198101" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198102" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198103" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198104" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198105" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198106" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198107" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198108" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198109" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198110" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198111" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198112" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198113" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198114" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198115" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198116" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198117" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198118" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198119" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198120" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198124" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198125" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198126" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198127" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198128" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198129" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198130" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198134" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198135" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198136" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198137" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198138" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198139" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198140" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198144" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198145" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198146" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198147" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198148" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198149" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198150" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198154" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198155" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198156" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198157" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198158" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198159" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198160" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198161" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198162" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198163" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198164" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198165" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198166" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198167" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198168" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198169" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198170" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198171" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198172" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198173" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198174" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198175" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198176" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198177" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198178" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198179" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198180" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198181" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198182" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198183" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198184" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198185" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198186" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198187" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198188" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198189" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198190" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198191" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198192" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198193" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198194" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198195" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198196" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198197" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198198" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198199" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From a5f05914577e3ccf17f1a6bc410afca18ee5a61c Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 10 Feb 2024 12:44:02 +0100 Subject: [PATCH 056/135] added test at IsPossibleNumberWithReasonTest for emergancy traffic routing 01982 for operators --- .../IsPossibleNumberWithReasonTest.groovy | 80 ++++++++++++++++++- 1 file changed, 76 insertions(+), 4 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index eaf485d..d82b0e7 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2551,7 +2551,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators // 01981-AB-(NDC 2-5 digits)-CC-XY - // additionally it is checked if A is 2..5 and B is 1..3 + // additionally it is checked if A is 2..5 and B is 1..3 - just for DE, for other countries it is INVALID Length which is tested by first 01981 test // additionally only valid NDCs see below could also be checked but that would be more a IsValid check // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it @@ -2613,7 +2613,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49198153" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, false] } - def "check if original lib fixed isPossibleNumberWithReason for German invalid traffic routing 01981xx of mobile Emergency calls"(String reserve, regionCode, boolean[] expectingFails) { given: // 2233 is are code of Hürth @@ -2659,7 +2658,8 @@ class IsPossibleNumberWithReasonTest extends Specification { // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators // 01981-AB-(NDC 2-5 digits)-CC-XY - // additionally it is checked for non A is 2..5 and B is 1..3 + // additionally it is checked for non A is 2..5 and B is 1..3 - just for DE, for other countries it is INVALID Length which is tested by first 01981 test + // no distinguishing of user and operator needed because those ranges are INVALID for both. "0198100" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] "0198101" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] @@ -2764,6 +2764,76 @@ class IsPossibleNumberWithReasonTest extends Specification { "0198199" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01982 of Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((operator)) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01982 is used for emergency call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it could be checked if A is 2..5 and B is 1..3 (see own test below) + // additionally only valid NDCs see below could also be checked but that would be more a IsValid check + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01982" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "01982" | true | "DE" | [true, true, true, false, false, false, false, false, true, true, true] + "+491982" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + "+491982" | true | "FR" | [true, true, true, false, false, false, false, false, true, true, true] + } + + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -2886,7 +2956,9 @@ class IsPossibleNumberWithReasonTest extends Specification { // --- // 01981 is checked in German traffic routing 01981 of mobile Emergency calls // --- - // TODO: 01982 - emergency routing + // --- + // 01982 is checked in German traffic routing 01982 for emergency routing + // --- "01983" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "01984" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "01985" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve From 8b0243e62306d4798f3b1ff593eaac559fc19756 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 10 Feb 2024 12:58:13 +0100 Subject: [PATCH 057/135] added test at IsPossibleNumberWithReasonTest for public service call traffic routing 01986 for operators --- .../IsPossibleNumberWithReasonTest.groovy | 87 ++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index d82b0e7..4120fd9 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2833,6 +2833,87 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01986 of public service calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "1", + reserve + "11", + reserve + "115", + reserve + "1151", + reserve + "11511", + reserve + "115111", + reserve + "222", + reserve + "333", + reserve + "444", + reserve + "555", + reserve + "666", + reserve + "777", + reserve + "888", + reserve + "999", + reserve + "000"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((operator)) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01986 is used for public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01986-115 + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01986" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + "01986" | true | "DE" | [true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true] + "+491986" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + "+491986" | true | "FR" | [true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true] + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -2957,12 +3038,14 @@ class IsPossibleNumberWithReasonTest extends Specification { // 01981 is checked in German traffic routing 01981 of mobile Emergency calls // --- // --- - // 01982 is checked in German traffic routing 01982 for emergency routing + // 01982 is checked in German traffic routing 01982 for emergency calls // --- "01983" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "01984" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "01985" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve - // TODO: 01986 - 115 Service Routing + // --- + // 01986 is checked in German traffic routing 01986 for public service calls + // --- // TODO: 01987 - 116 Service Routing // TODO: 01988 - International FreeCall Routing // TODO: 01989 - Assistant Service Routing From 753f2b23673d0df501798d1118a4dc8eb3b94081 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 11 Feb 2024 10:11:19 +0100 Subject: [PATCH 058/135] added test at IsPossibleNumberWithReasonTest for public EU service call traffic routing 01987 for operators --- .../IsPossibleNumberWithReasonTest.groovy | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 4120fd9..e38d609 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2832,7 +2832,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+491982" | true | "FR" | [true, true, true, false, false, false, false, false, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01986 of public service calls"(String reserve, operator,regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", @@ -2914,6 +2913,79 @@ class IsPossibleNumberWithReasonTest extends Specification { "+491986" | true | "FR" | [true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01987 of EU public service calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "0", + reserve + "00", + reserve + "000", + reserve + "0000", + reserve + "00000", + reserve + "000000", + reserve + "9", + reserve + "99", + reserve + "999", + reserve + "9999", + reserve + "99999", + reserve + "999999"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((operator)) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01987 is used for EU public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01987-xyz + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01987" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true] + "01987" | true | "DE" | [true, true, true, false, true, true, true, true, true, false, true, true, true] + "+491987" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true] + "+491987" | true | "FR" | [true, true, true, false, true, true, true, true, true, false, true, true, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From c72b929fe07464d1c45b75ba0763623985db779d Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 11 Feb 2024 21:17:20 +0100 Subject: [PATCH 059/135] added test at IsPossibleNumberWithReasonTest for international free call traffic routing 01988 for operators --- .../IsPossibleNumberWithReasonTest.groovy | 84 +++++++++++++++++-- 1 file changed, 79 insertions(+), 5 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index e38d609..9091cbc 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -59,7 +59,6 @@ class IsPossibleNumberWithReasonTest extends Specification { return true } - def "check if original lib fixed isPossibleNumberWithReason for police short code 110 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -2985,7 +2984,77 @@ class IsPossibleNumberWithReasonTest extends Specification { "+491987" | true | "FR" | [true, true, true, false, true, true, true, true, true, false, true, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01988 for international free calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "0", + reserve + "00", + reserve + "000", + reserve + "0000", + reserve + "00000", + reserve + "000000", + reserve + "9", + reserve + "99", + reserve + "999", + reserve + "9999", + reserve + "99999", + reserve + "999999"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((operator)) { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, // not callable public, but for operators + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01988 is used for EU public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01988-xx + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01988" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true] + "01988" | true | "DE" | [true, true, false, true, true, true, true, true, false, true, true, true, true] + "+491988" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true] + "+491988" | true | "FR" | [true, true, false, true, true, true, true, true, false, true, true, true, true] + } def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3104,7 +3173,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "0197" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve // --- // Traffic management numbers are only valid between operators - so not for end customers to call - // TODO: 019(8&9) is traffic management see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // --- "01980" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve // --- // 01981 is checked in German traffic routing 01981 of mobile Emergency calls @@ -3116,13 +3185,18 @@ class IsPossibleNumberWithReasonTest extends Specification { "01984" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve "01985" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // Reserve // --- - // 01986 is checked in German traffic routing 01986 for public service calls + // 01986 is checked in German traffic routing 01986 for public service calls 115 + // --- + // --- + // 01987 is checked in German traffic routing 01987 for public EU service calls 116xyz + // --- + // --- + // 01988 is checked in German traffic routing 01988 for international freecalls // --- - // TODO: 01987 - 116 Service Routing - // TODO: 01988 - International FreeCall Routing // TODO: 01989 - Assistant Service Routing // TODO: 0199 - network internal Routing // --- + // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html From 5d53cfe4b971b4821122cfc75c6020cfaf7a1650 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 18 Feb 2024 15:34:00 +0100 Subject: [PATCH 060/135] added test at IsPossibleNumberWithReasonTest for national call assistant traffic routing 01989 for operators --- .../IsPossibleNumberWithReasonTest.groovy | 116 +++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 9091cbc..615b3bf 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3048,7 +3048,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 // 01988 is used for EU public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) - // 01988-xx + // 01988-xx TODO: verify called number information is transfered outside the number (no digits after xx) // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it "01988" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true] "01988" | true | "DE" | [true, true, false, true, true, true, true, true, false, true, true, true, true] @@ -3056,6 +3056,116 @@ class IsPossibleNumberWithReasonTest extends Specification { "+491988" | true | "FR" | [true, true, false, true, true, true, true, true, false, true, true, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 01989 for Call Assistant"(String number, boolean Operator, regionCode, expectedResult, expectingFail) { + given: + // Operator is currently not usable in original methods (just a preparation) + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isPossibleNumberWithReason(phoneNumber) + + then: "is number expected: $expectedResult" + + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | Operator | regionCode | expectedResult | expectingFail + // traffic routing is described in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/118xy/118xyNummernplan.pdf?__blob=publicationFile&v=1 + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "019890" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198900" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "01989000" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + "019890000"| true | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019891" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198910" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + "01989100" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019899" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198999" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + "01989999" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "019890" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198900" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "01989000" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + "019890000"| false | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019891" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198910" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + "01989100" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019899" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198999" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + "01989999" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "019890" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198900" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "01989000" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + "019890000"| true | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019891" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198910" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + "01989100" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019899" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198999" | true | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE | false // not callable public, but for operators + "01989999" | true | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "019890" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198900" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "01989000" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + "019890000"| false | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019891" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198910" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + "01989100" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + "019899" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_SHORT | true + "0198999" | false | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // not callable public, but for operators + "01989999" | false | "DE" | PhoneNumberUtil.ValidationResult.TOO_LONG | true + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "+491989" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919890" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49198900" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491989000" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919890000"| true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919891" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49198910" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // Call Assistant of Deutsche Telekom + "+49198933" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491989100" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919899" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49198999" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491989999" | true | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "+491989" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919890" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49198900" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491989000" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919890000"| false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919891" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49198910" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // Call Assistant of Deutsche Telekom + "+49198933" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491989100" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+4919899" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+49198999" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "+491989999" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3193,7 +3303,9 @@ class IsPossibleNumberWithReasonTest extends Specification { // --- // 01988 is checked in German traffic routing 01988 for international freecalls // --- - // TODO: 01989 - Assistant Service Routing + // --- + // 01989 is checked in Assistant Service Routing + // --- // TODO: 0199 - network internal Routing // --- From e386fa340ea82dfbb10b720904a13ebbd6d47ea4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 24 Feb 2024 18:16:36 +0100 Subject: [PATCH 061/135] added test at IsPossibleNumberWithReasonTest for operator internal traffic routing 0199 for operators --- .../IsPossibleNumberWithReasonTest.groovy | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 615b3bf..1031966 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3166,6 +3166,116 @@ class IsPossibleNumberWithReasonTest extends Specification { "+491989999" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 0199 for internal traffic routin"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "0", + reserve + "00", + reserve + "000", + reserve + "0000", + reserve + "00000", + reserve + "000000", + reserve + "0000000", + reserve + "00000000", + reserve + "000000000", + reserve + "0000000000", + reserve + "00000000000", + reserve + "000000000000", + reserve + "9", + reserve + "99", + reserve + "999", + reserve + "9999", + reserve + "99999", + reserve + "999999", + reserve + "9999999", + reserve + "99999999", + reserve + "999999999", + reserve + "9999999999", + reserve + "99999999999", + reserve + "999999999999"] + + PhoneNumberUtil.ValidationResult[] expectedResults + // TODO: Assumed 0199 is only valid within a German Operator network + if ((operator) && regionCode == "DE") { + expectedResults = [PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE] + } else { + expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0199 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 0199 is not further ruled, so assuming ITU rule of max length 15 with no lower limit, but operator only use + "0199" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + "0199" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] + "+49199" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + "+49199" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + } + + + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 9468a6cfb66ae34b597d1e4dbcc02f5c280a80f7 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 2 Mar 2024 14:27:06 +0100 Subject: [PATCH 062/135] added test at IsPossibleNumberWithReasonTest for personal numbers in 0700 Range --- .../IsPossibleNumberWithReasonTest.groovy | 56 ++++++++++++++++++- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 1031966..5ecac46 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3273,8 +3273,56 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49199" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German personale 700 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0700 is personal number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html + // it has 8-digit long numbers TODO: unclear if those numbers may only be called within Germany (no country code example) + // but general numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // indicates it is callable from outside Germany + + "0700" | "DE" | [true, true, true, true, true, true, true, true, false, true, true] + "+49700" | "DE" | [true, true, true, true, true, true, true, true, false, true, true] + "+49700" | "FR" | [true, true, true, true, true, true, true, true, false, true, true] + } def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3416,10 +3464,10 @@ class IsPossibleNumberWithReasonTest extends Specification { // --- // 01989 is checked in Assistant Service Routing // --- - // TODO: 0199 - network internal Routing + // --- + // 0199 is checked in operator internal network traffic routing // --- - // TODO: 0700 - personal: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html // TODO: 09009 - Dialer: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html @@ -5754,7 +5802,9 @@ class IsPossibleNumberWithReasonTest extends Specification { // 06897 till 06898 is in use "06899" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 069 is Frankfurt am Mai - // 0700 is special number code see: TODO will be coded - see above + // --- + // 0700 is checked in personal number 0700 see above + // --- "0701" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "07020" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 7021 till 7026 is in use From 2f2d96501f7c9d3926b6aebc903918f4f8c32a86 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 9 Mar 2024 13:09:59 +0100 Subject: [PATCH 063/135] added testcases in IsPossibleNumberWithReasonTest for 0800 range added a pom dependency to activate logging during tests. --- pom.xml | 8 +++ .../IsPossibleNumberWithReasonTest.groovy | 71 ++++++++++++++++--- 2 files changed, 71 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 1181dcb..605482d 100644 --- a/pom.xml +++ b/pom.xml @@ -136,6 +136,14 @@ 1.3.2
+ com.googlecode.libphonenumber geocoder diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 5ecac46..556c13b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3324,6 +3324,59 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49700" | "FR" | [true, true, true, true, true, true, true, true, false, true, true] } + def "check if original lib fixed isPossibleNumberWithReason for German free call 800 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0800 is personal number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html + // it has 7-digit long numbers TODO: unclear if those numbers may only be called within Germany (no country code example) + // but general numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // indicates it is callable from outside Germany + // numbers could be extended, but that it up to carrier support and might not be supported see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0800/0800_Nummernplan.pdf?__blob=publicationFile&v=1 + // TODO: Need to check if extended numbers should be marked somehow-possible + + "0800" | "DE" | [true, true, true, true, true, true, true, false, true, true, true] + "+49800" | "DE" | [true, true, true, true, true, true, true, false, true, true, true] + "+49800" | "FR" | [true, true, true, true, true, true, true, false, true, true, true] + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3468,9 +3521,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0199 is checked in operator internal network traffic routing // --- - // TODO: 0800 - free call: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html - // TODO: 09009 - Dialer: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 @@ -3897,11 +3948,11 @@ class IsPossibleNumberWithReasonTest extends Specification { // 033230 till 033235 is in use "033236" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033237 till 033239 is in use - "03324" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03325" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "03326" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03324" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03325" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03326" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03327 till 03329 is in use - "03330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + "03330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03331 till 03332 is in use "033330" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 033331 till 033338 is in use @@ -6141,7 +6192,9 @@ class IsPossibleNumberWithReasonTest extends Specification { "07979" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0798" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0799" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 0800 is special number code see: TODO will be coded - see above + // --- + // 0800 is checked with free call 800 range see above + // --- "0801" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // total 0802x is in use "08030" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -6500,6 +6553,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "0888" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 089 is München + // TODO start: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service "09000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09001 Information Service TODO:see above "09002" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -6509,7 +6563,8 @@ class IsPossibleNumberWithReasonTest extends Specification { "09006" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "09007" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "09008" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "09009" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true + // TODO end: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service + "09009" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html removed block "0901" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0902" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0903" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true From 842d9ea15ed1e3e22728c1b951f70182b158508b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 9 Mar 2024 17:43:20 +0100 Subject: [PATCH 064/135] added testcases in IsPossibleNumberWithReasonTest for 0900 range --- .../IsPossibleNumberWithReasonTest.groovy | 72 +++++++++++++++++-- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 556c13b..3cd6242 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3377,6 +3377,70 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49800" | "FR" | [true, true, true, true, true, true, true, false, true, true, true] } + + def "check if original lib fixed isPossibleNumberWithReason for German free call 900 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0900x is premium number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html + // it has 6-digit long numbers TODO: unclear if those numbers may only be called within Germany (no country code example) + // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0900/0900_NummernplanMit.pdf?__blob=publicationFile&v=1 + // but general numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // indicates it is callable from outside Germany + + // TODO start: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service + // Information + "09001" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+499001" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+499001" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + // Entertaining + "09003" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+499003" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+499003" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + // everything else + "09005" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+499005" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+499005" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3521,9 +3585,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0199 is checked in operator internal network traffic routing // --- - // TODO: 0900 - premium: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html - // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. @@ -6555,11 +6617,11 @@ class IsPossibleNumberWithReasonTest extends Specification { // 089 is München // TODO start: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service "09000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 09001 Information Service TODO:see above + // 09001 Information Service checked in 0900 range test "09002" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 09003 Entertainment Service TODO:see above + // 09003 Entertainment Service checked in 0900 range test "09004" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 09005 other premium services TODO: see above + // 09005 other premium services checked in 0900 range test "09006" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "09007" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "09008" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true From 9f6856d6545d646450d9b33282dfc12a0d3c3275 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 10 Mar 2024 13:29:26 +0100 Subject: [PATCH 065/135] added testcases in IsPossibleNumberWithReasonTest for 031x testnumbers --- .../IsPossibleNumberWithReasonTest.groovy | 115 +++++++++++++++++- 1 file changed, 112 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 3cd6242..48767c2 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3441,6 +3441,114 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German test numbers 031x range"(String reserve, regionCode, boolean[] expectingFails, boolean reserverange) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults + if ((reserverange) || (regionCode != "DE")) { + expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + } else { + // if +49 is even not an option inside germany, then this would be IS_POSSIBLE_LOCAL_ONLY + // bit currently it seems it is part of general numberplan with +49 https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + expectedResults = [PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + } + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | reserverange | regionCode | expectingFails + // 031 is personal number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html + // it has onl one digit (0 or 1) + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/031/Zutregel.pdf?__blob=publicationFile&v=1 + // not callable from outside germany + // TODO: check if inside Germany it is reachable via +49 + // TODO: Check if those test numbers are dropped when no preselection (010x) is possible anymore + + "0310" | false | "DE" | [false, true, true, true, true, true, true, true, true, true, true] + "+49310" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49310" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0311" | false | "DE" | [false, true, true, true, true, true, true, true, true, true, true] + "+49311" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49311" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0312" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49312" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49312" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0313" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49313" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49313" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0314" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49314" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49314" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0315" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49315" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49315" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0316" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49316" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49316" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0317" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49317" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49317" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0318" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49318" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49318" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0319" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49319" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49319" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3585,7 +3693,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0199 is checked in operator internal network traffic routing // --- - // TODO: 031 - Testnumbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html + // TODO: 032 - National numbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. @@ -3972,8 +4080,9 @@ class IsPossibleNumberWithReasonTest extends Specification { "02998" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "02999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 030 is Berlin - // 0310 is National Test for length 3 -> TODO: OWN Test - // 0311 is National Test for length 3 -> TODO: OWN Test + // 0310 is checked in German test numbers 031x + // 0311 is checked in German test numbers 031x + // 0312 till 0319 is also checked in German test numbers 031x - TODO: by end of 2024 Call By Call is disabled in Germany, to be checked if Testnumbers are dropped then. "0312" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0313" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0314" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true From f2aa29f4a29ebecb4baeadae54cf2f56cfa5c8ef Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 10 Mar 2024 13:55:28 +0100 Subject: [PATCH 066/135] added testcases in IsPossibleNumberWithReasonTest for 032 personal numbers --- .../IsPossibleNumberWithReasonTest.groovy | 347 +++++++++++++++++- 1 file changed, 345 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 48767c2..215a386 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3549,6 +3549,344 @@ class IsPossibleNumberWithReasonTest extends Specification { } + def "check if original lib fixed isPossibleNumberWithReason for German personal numbers 032 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.TOO_SHORT, + PhoneNumberUtil.ValidationResult.IS_POSSIBLE, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_LONG + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + // (0)32210 is not usable for now + + "032211" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932211" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932211" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032212" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932212" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932212" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032213" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932213" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932213" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032214" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932214" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932214" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032215" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932215" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932215" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032216" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932216" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932216" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032217" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932217" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932217" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032218" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932218" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932218" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032219" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932219" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932219" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + // (0)32220 is not usable for now + + "032221" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932221" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932221" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032222" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932222" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932222" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032223" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932223" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932223" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032224" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932224" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932224" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032225" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932225" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932225" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032226" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932226" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932226" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032227" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932227" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932227" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032228" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932228" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932228" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + + "032229" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932229" | "DE" | [true, true, true, true, true, true, false, true, true, true, true] + "+4932229" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] + } + + + def "check if original lib fixed isPossibleNumberWithReason for German personal numbers 032 range - low level reserve"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + "032210" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+4932210" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+4932210" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "032220" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+4932220" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+4932220" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for German personal numbers 032 range - mid level reserve"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + "03220" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493220" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493220" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + // (0)3221xyyy is in use see above + // (0)3222xyyy is in use see above + + "03223" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493223" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493223" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "03224" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493224" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493224" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "03225" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493225" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493225" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "03226" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493226" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493226" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "03227" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493227" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493227" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "03228" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493228" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493228" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "03229" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493229" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+493229" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + } + + def "check if original lib fixed isPossibleNumberWithReason for German personal numbers 032 range - high level reserve"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH + ] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + "0320" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49320" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49320" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0321" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49321" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49321" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + // (0)322 is checked in middle level test see above + + "0323" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49323" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49323" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0324" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49324" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49324" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0325" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49325" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49325" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0326" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49326" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49326" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0327" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49327" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49327" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0328" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49328" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49328" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + + "0329" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49329" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "+49329" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: @@ -3693,7 +4031,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // 0199 is checked in operator internal network traffic routing // --- - // TODO: 032 - National numbers: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. @@ -4080,6 +4417,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "02998" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "02999" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 030 is Berlin + // --- // 0310 is checked in German test numbers 031x // 0311 is checked in German test numbers 031x // 0312 till 0319 is also checked in German test numbers 031x - TODO: by end of 2024 Call By Call is disabled in Germany, to be checked if Testnumbers are dropped then. @@ -4091,7 +4429,10 @@ class IsPossibleNumberWithReasonTest extends Specification { "0317" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0318" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0319" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - // 032 is non geographical 11 till 13 length -> TODO: OWN Test + // --- + // --- + // 032 is checked in multiple 032 test (due to different blocks are only in use currently) see above + // --- "03300" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 03301 till 03304 is in use "033050" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -6724,6 +7065,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "0888" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0889" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 089 is München + // --- // TODO start: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service "09000" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 09001 Information Service checked in 0900 range test @@ -6735,6 +7077,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "09007" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "09008" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO end: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service + // --- "09009" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html removed block "0901" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0902" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true From fdc3065f78e61e46ac12b6baa6b403833d99971a Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 10 Mar 2024 17:28:54 +0100 Subject: [PATCH 067/135] added testcases in IsPossibleNumberWithReasonTest for not assignable Drama Numbers --- .../IsPossibleNumberWithReasonTest.groovy | 159 +++++++++++++++++- 1 file changed, 154 insertions(+), 5 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 215a386..48f01d0 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3273,7 +3273,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49199" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German personale 700 range"(String reserve, regionCode, boolean[] expectingFails) { + def "check if original lib fixed isPossibleNumberWithReason for German personal 700 range"(String reserve, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", reserve + "2", @@ -3377,7 +3377,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49800" | "FR" | [true, true, true, true, true, true, true, false, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German free call 900 range"(String reserve, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", @@ -3440,7 +3439,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+499005" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German test numbers 031x range"(String reserve, regionCode, boolean[] expectingFails, boolean reserverange) { given: String[] numbersToTest = [reserve + "", @@ -3548,7 +3546,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49319" | true | "FR" | [true, true, true, true, true, true, true, true, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German personal numbers 032 range"(String reserve, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", @@ -3670,7 +3667,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+4932229" | "FR" | [true, true, true, true, true, true, false, true, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German personal numbers 032 range - low level reserve"(String reserve, regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", @@ -3887,6 +3883,159 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49329" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] } + + def "check if original lib fixed isPossibleNumberWithReason for German explicit drama numbers"(String testnumber, regionCode, boolean expectingFail) { + given: + String[] numbersToTest = [testnumber] + PhoneNumberUtil.ValidationResult expectedResult = PhoneNumberUtil.ValidationResult.INVALID_LENGTH + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } + + where: + testnumber | regionCode | expectingFail + // there are some drama numbers definded in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/mittlg148_2021.pdf?__blob=publicationFile&v=1 + + "0152 28817386" | "DE" | true + "+49152 28817386" | "DE" | true + "+49152 28817386" | "FR" | true + + "0152 28895456" | "DE" | true + "+49152 28895456" | "DE" | true + "+49152 28895456" | "FR" | true + + "0152 54599371" | "DE" | true + "+49152 54599371" | "DE" | true + "+49152 54599371" | "FR" | true + + "0172 9925904" | "DE" | true + "+49172 9925904" | "DE" | true + "+49172 9925904" | "FR" | true + + "0172 9968532" | "DE" | true + "+49172 9968532" | "DE" | true + "+49172 9968532" | "FR" | true + + "0172 9973185" | "DE" | true + "+49172 9973185" | "DE" | true + "+49172 9973185" | "FR" | true + + "0172 9973186" | "DE" | true + "+49172 9973186" | "DE" | true + "+49172 9973186" | "FR" | true + + "0172 9980752" | "DE" | true + "+49172 9980752" | "DE" | true + "+49172 9980752" | "FR" | true + + "0174 9091317" | "DE" | true + "+49174 9091317" | "DE" | true + "+49174 9091317" | "FR" | true + + "0174 9464308" | "DE" | true + "+49174 9464308" | "DE" | true + "+49174 9464308" | "FR" | true + } + + def "check if original lib fixed isPossibleNumberWithReason for German 2 digit drama number range"(String testnumber, regionCode, boolean expectingFail) { + given: + ArrayList numbersToTest = [] + + for (int i1=0; i1<10; i1++) { + for (int i2=0; i2<10; i2++) { + String s = testnumber + String.valueOf(i1) + String.valueOf(i2) + numbersToTest.add(s) + } + } + + PhoneNumberUtil.ValidationResult expectedResult = PhoneNumberUtil.ValidationResult.INVALID_LENGTH + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } + + where: + testnumber | regionCode | expectingFail + // there are some drama number ranges defined in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/mittlg148_2021.pdf?__blob=publicationFile&v=1 + + "0171 39200" | "DE" | true + "+49171 39200" | "DE" | true + "+49171 39200" | "FR" | true + + "0176 040690" | "DE" | true + "+49176 040690" | "DE" | true + "+49176 040690" | "FR" | true + } + + def "check if original lib fixed isPossibleNumberWithReason for German 3 digit drama number range"(String testnumber, regionCode, boolean expectingFail) { + given: + ArrayList numbersToTest = [] + + for (int i1=0; i1<10; i1++) { + for (int i2=0; i2<10; i2++) { + for (int i3=0; i3<10; i3++) { + String s = testnumber + String.valueOf(i1) + String.valueOf(i2) + String.valueOf(i3) + numbersToTest.add(s) + } + } + } + + PhoneNumberUtil.ValidationResult expectedResult = PhoneNumberUtil.ValidationResult.INVALID_LENGTH + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } + + where: + testnumber | regionCode | expectingFail + // there are some drama number ranges defined in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/mittlg148_2021.pdf?__blob=publicationFile&v=1 + + "030 23125" | "DE" | true + "+4930 23125" | "DE" | true + "+4930 23125" | "FR" | true + + "069 90009" | "DE" | true + "+4969 90009" | "DE" | true + "+4969 90009" | "FR" | true + + "040 66969" | "DE" | true + "+4940 66969" | "DE" | true + "+4940 66969" | "FR" | true + + "0221 4710" | "DE" | true + "+49221 4710" | "DE" | true + "+49221 4710" | "FR" | true + + "089 99998" | "DE" | true + "+4989 99998" | "DE" | true + "+4989 99998" | "FR" | true + } + def "check if original lib fixed isPossibleNumberWithReason for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From c1061b99e4ae04e090ca9f80072cc8ecb1f1c6fd Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 10 Mar 2024 17:29:51 +0100 Subject: [PATCH 068/135] besides some assurance ToDo - all additional test are generated. --- .../PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 48f01d0..ca2d920 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -4179,9 +4179,6 @@ class IsPossibleNumberWithReasonTest extends Specification { // --- // 0199 is checked in operator internal network traffic routing // --- - - // TODO: DRAMA numbers: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mittlg148_2021.pdf?__blob=publicationFile&v=1 - // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. "0200" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // 0201 is Essen From 7365127ad48a9915574a662491228ffa555121f9 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 17 Apr 2024 18:00:34 +0200 Subject: [PATCH 069/135] Cloning first testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: for police short code 110 in combination as NDC --- .../IsPossibleNumberWithReasonTest.groovy | 8 ++--- .../PhoneNumberUtil/IsValidNumberTest.groovy | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index ca2d920..43054ad 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -79,11 +79,11 @@ class IsPossibleNumberWithReasonTest extends Specification { "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // checked "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // IS_POSSIBLE_LOCAL_ONLY would also acceptable "+49110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // IS_POSSIBLE_LOCAL_ONLY would also acceptable "+49110 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 110" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 110555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true @@ -111,11 +111,11 @@ class IsPossibleNumberWithReasonTest extends Specification { "0112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // IS_POSSIBLE_LOCAL_ONLY would also acceptable "+49112 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 112" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 112555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true - "+49112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // TODO: Maybe IS_POSSIBLE_LOCAL_ONLY is also acceptable + "+49112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // IS_POSSIBLE_LOCAL_ONLY would also acceptable "+49112 556677" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 112" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49203 112555" | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index b5d9e3c..c2bb222 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -59,6 +59,39 @@ class IsValidNumberTest extends Specification { return true } + def "check if original lib fixed isValid for police short code 110 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short code for Police (110) is not dial-able internationally nor does it has additional numbers + "110" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "0110" | "DE" | false | false + "0203 110" | "DE" | false | true + "0203 110555" | "DE" | false | true + "+49110" | "DE" | false | false + "+49110 556677" | "DE" | false | false + "+49203 110" | "DE" | false | true + "+49203 110555" | "DE" | false | true + "+49110" | "FR" | false | false + "+49110 556677" | "FR" | false | false + "+49203 110" | "FR" | false | true + "+49203 110555" | "FR" | false | true + // end of 110 + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 402a40a359319fdab95133a72db629b5a40b0e5b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 19 Apr 2024 13:55:20 +0200 Subject: [PATCH 070/135] German NDC 2626 label had a typo, which is corrected --- src/main/resources/arealabels/nationallabels/de.json | 2 +- .../extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/arealabels/nationallabels/de.json b/src/main/resources/arealabels/nationallabels/de.json index 972f022..80ca3f6 100644 --- a/src/main/resources/arealabels/nationallabels/de.json +++ b/src/main/resources/arealabels/nationallabels/de.json @@ -317,7 +317,7 @@ "2623": "Ransbach Baumbach", "2624": "Höhr Grenzhausen", "2625": "Ochtendung", - "2626": "Selters Westferwald", + "2626": "Selters Westerwald", "2627": "Braubach", "2628": "Rhens", "2630": "Mülheim Kärlich", diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy index 26073f1..a54558d 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy @@ -382,7 +382,7 @@ class PhoneNumberOfflineGeocoderTest extends Specification { "2623" | "Ransbach Baumbach" | false "2624" | "Höhr Grenzhausen" | false "2625" | "Ochtendung" | false - "2626" | "Selters Westferwald" | false + "2626" | "Selters Westerwald" | false "2627" | "Braubach" | false "2628" | "Rhens" | false "2630" | "Mülheim Kärlich" | false From 14ea34ad30ce4eb0a4ada12e9dcd34ea4ce90b3e Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 21 Apr 2024 15:45:34 +0200 Subject: [PATCH 071/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: for Emergency short code 112 in combination as NDC --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index c2bb222..b820c52 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -90,6 +90,37 @@ class IsValidNumberTest extends Specification { // end of 110 } + def "check if original lib fixed isValid for Emergency short code 112 in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // short code for emergency (112) is not dial-able internationally nor does it has additional numbers + "112" | "DE" | true | true // // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "0112" | "DE" | false | false + "0112 556677" | "DE" | false | false + "0203 112" | "DE" | false | true + "0203 112555" | "DE" | false | true + "+49112" | "DE" | false | false + "+49112 556677" | "DE" | false | false + "+49203 112" | "DE" | false | true + "+49203 112555" | "DE" | false | true + "+49112" | "FR" | false | false + "+49112 556677" | "FR" | false | false + "+49203 112" | "FR" | false | true + "+49203 112555" | "FR" | false | true + // end of 112 + } From 3f70acb70de5ad44ba7ce0df8542363e5f4a50f5 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 21 Apr 2024 15:59:07 +0200 Subject: [PATCH 072/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: for German Government short code 115 in combination as NDC --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index b820c52..847afba 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -106,7 +106,7 @@ class IsValidNumberTest extends Specification { number | regionCode | expectedResult | expectingFail // short code for emergency (112) is not dial-able internationally nor does it has additional numbers - "112" | "DE" | true | true // // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "112" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers "0112" | "DE" | false | false "0112 556677" | "DE" | false | false "0203 112" | "DE" | false | true @@ -122,6 +122,40 @@ class IsValidNumberTest extends Specification { // end of 112 } + def "check if original lib fixed isValid for German Government short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 155 is Public Service Number for German administration, it is internationally reachable only from foreign countries + "115" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "0115" | "DE" | false | false // not valid by BnetzA definition from within Germany + "+49115" | "DE" | false | false // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/115/115_Nummernplan_konsolidiert.pdf?__blob=publicationFile&v=1 at chapter 2.3 + "+49115" | "FR" | true | true // see https://www.115.de/SharedDocs/Nachrichten/DE/2018/115_aus_dem_ausland_erreichbar.html + // 155 is supporting NDC to reach specific local government hotline: https://www.geoportal.de/Info/tk_05-erreichbarkeit-der-115 + "0203115" | "DE" | true | false + "+49203115" | "DE" | true | false + "+49203115" | "FR" | true | false + // 155 does not have additional digits + "115555" | "DE" | false | false + "0115 556677" | "DE" | false | false + "0203 115555" | "DE" | false | true + "+49115 556677" | "DE" | false | false + "+49115 556677" | "FR" | false | false + "+49203 115555" | "DE" | false | true + "+49203 115555" | "FR" | false | true + // end of 115 + } def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { From 51e7302963aa7ba43f060b9472d9b22f198901c2 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 21 Apr 2024 16:24:42 +0200 Subject: [PATCH 073/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: for EU social short code 116xxx in combination as NDC --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 847afba..ced19ff 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -157,6 +157,74 @@ class IsValidNumberTest extends Specification { // end of 115 } + def "check if original lib fixed isValid for EU social short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 116 is mentioned in number plan as 1160 and 1161 but in special ruling a full 6 digit number block: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/116xyz/StrukturAusgestNrBereich_Id11155pdf.pdf?__blob=publicationFile&v=4 + // 116xyz is nationally and internationally reachable - special check 116000 as initial number, 116116 as assigned number and 116999 as max legal number + "116" | "DE" | false | false + "116000" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "116116" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "116999" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "116 5566" | "DE" | false | false + "116 55" | "DE" | false | false + // https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/116xyz/116116.html + // NAC + 116xxx + // see no. 7: national 0116116 is not a valid number, but may be replaced by 116116 by the operator - caller could reach target. ( T-Mobile is doing so currently 03.11.2023 - no guarantee for the future nor for any other operator. Best practice, assuming call will not reach target=. + "0116" | "DE" | false | false + "0116000" | "DE" | false | false // not valid by BnetzA definition just using NAC + "0116116" | "DE" | false | false // not valid by BnetzA definition just using NAC + "0116999" | "DE" | false | false // not valid by BnetzA definition just using NAC + "0116 5566" | "DE" | false | false + "0116 55" | "DE" | false | false + + // NAC + NDC (e.g. for Duisburg) + 116xxx + "0203116" | "DE" | false | true + "0203116000" | "DE" | false | true + "0203116116" | "DE" | false | true + "0203116999" | "DE" | false | true + "0203116 5566" | "DE" | false | true + "0203116 55" | "DE" | false | true + + // CC + 116xxx + "+49116" | "DE" | false | false + "+49116000" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "+49116116" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "+49116999" | "DE" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "+49116 5566" | "DE" | false | false + "+49116 55" | "DE" | false | false + + // CC + NDC (e.g. for Duisburg) + 116xxx + "+49203116" | "DE" | false | true + "+49203116000" | "DE" | false | true + "+49203116116" | "DE" | false | true + "+49203116999" | "DE" | false | true + "+49203116 5566" | "DE" | false | true + "+49203116 55" | "DE" | false | true + + // CC + 116xxx from outside Germany + "+49116" | "FR" | false | false + "+49116000" | "FR" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "+49116116" | "FR" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "+49116999" | "FR" | true | true // known as intended to use ShortNumberInfo see https://github.com/google/libphonenumber/blob/master/FAQ.md#why-does-phonenumberutil-return-false-for-valid-short-numbers + "+49116 5566" | "FR" | false | false + "+49116 55" | "FR" | false | false + // end of 116 + } + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 730cd3bf19efdccc9cafe748a2ab9b3f877289c0 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 21 Apr 2024 16:33:33 +0200 Subject: [PATCH 074/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: for Call Assistant short code 118yxx in combination as NDC --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index ced19ff..071f561 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -224,6 +224,115 @@ class IsValidNumberTest extends Specification { // end of 116 } + def "check if original lib fixed isValid for German Call Assistant short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/118xy/118xyNummernplan.pdf?__blob=publicationFile&v=1 + // it is mentioned, that those numbers are nationally reachable - which excludes them from locally, so no local number should work this way because without NDC it could not be seperated from the national number + // implicitly it could also mean that those numbers are not routed from outside germany + + // 118 is starting part and in general 5 digits long - except if the 4th digit is 0, than it is six digits long + "118" | "DE" | false | false + "1180" | "DE" | false | false + "11800" | "DE" | false | false + "118000" | "DE" | true | true + "1180000" | "DE" | false | false + "1181" | "DE" | false | false + "11810" | "DE" | true | true + // Call Assistant of Deutsche Telekom + "11833" | "DE" | true | true + "118100" | "DE" | false | false + "1189" | "DE" | false | false + "11899" | "DE" | true | true + "118999" | "DE" | false | false + + // Tested on 26.12.2023 - 11833 works on TMD, but neither 011833 nor +4911833 is working on T-Mobile Germany + // NAC + 118(y)xx belongs to the number reserve of NAC + 11 + + "0118" | "DE" | false | false + "01180" | "DE" | false | false + "011800" | "DE" | false | false + "0118000" | "DE" | false | false + "01180000" | "DE" | false | false + "01181" | "DE" | false | false + "011810" | "DE" | false | false + "011833" | "DE" | false | false + "0118100" | "DE" | false | false + "01189" | "DE" | false | false + "011899" | "DE" | false | false + "0118999" | "DE" | false | false + + // NAC + NDC (e.g. for Duisburg) + 118(y)xx + "0203118" | "DE" | false | true + "02031180" | "DE" | false | true + "020311800" | "DE" | false | true + "0203118000" | "DE" | false | true + "02031180000" | "DE" | false | true + "02031181" | "DE" | false | true + "020311810" | "DE" | false | true + "020311833" | "DE" | false | true + "0203118100" | "DE" | false | true + "02031189" | "DE" | false | true + "020311899" | "DE" | false | true + "0203118999" | "DE" | false | true + + // CC + 118(y)xx + "+49118" | "DE" | false | false + "+491180" | "DE" | false | false + "+4911800" | "DE" | false | false + "+49118000" | "DE" | false | false + "+491180000" | "DE" | false | false + "+491181" | "DE" | false | false + "+4911810" | "DE" | false | false + "+4911833" | "DE" | false | false + "+49118100" | "DE" | false | false + "+491189" | "DE" | false | false + "+4911899" | "DE" | false | false + "+49118999" | "DE" | false | false + + // CC + NDC (e.g. for Duisburg) + 118(y)xx + "+49203118" | "DE" | false | true + "+492031180" | "DE" | false | true + "+4920311800" | "DE" | false | true + "+49203118000" | "DE" | false | true + "+492031180000" | "DE" | false | true + "+492031181" | "DE" | false | true + "+4920311810" | "DE" | false | true + "+4920311833" | "DE" | false | true + "+49203118100" | "DE" | false | true + "+492031189" | "DE" | false | true + "+4920311899" | "DE" | false | true + "+49203118999" | "DE" | false | true + + // CC + 118(y)xx from outside Germany + "+49118" | "FR" | false | false + "+491180" | "FR" | false | false + "+4911800" | "FR" | false | false + "+49118000" | "FR" | false | false + "+491180000" | "FR" | false | false + "+491181" | "FR" | false | false + "+4911810" | "FR" | false | false + "+4911833" | "FR" | false | false + "+49118100" | "FR" | false | false + "+491189" | "FR" | false | false + "+4911899" | "FR" | false | false + "+49118999" | "FR" | false | false + + // end of 118 + } def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { From dee6471b2c4ef08f1c49c3166b2c637b475bfbe5 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 21 Apr 2024 17:26:12 +0200 Subject: [PATCH 075/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: for ambulance transport short code 19222 in combination as NDC --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 071f561..aa5da31 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -334,6 +334,37 @@ class IsValidNumberTest extends Specification { // end of 118 } + def "check if original lib fixed isValid for ambulance transport 19222 short codes in combination as NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // prior to mobile, there where 19xxx short codes in fixed line - only 19222 for no emergency ambulance call is still valid + // its a national reserved number, which in contrast to 112 might also be called with NDC to reach a specific ambulance center - not all NDC have a connected 19222. + // for more information see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/ONRufnr/Vfg_25_2006_konsFassung100823.pdf?__blob=publicationFile&v=3 chapter 7 + "19222" | "DE" | true | true // not valid on mobil but on fixedline + // using 19222 als NDC after NAC is checked by "online services 019xx" + "0203 19222" | "DE" | true | false + "0203 19222555" | "DE" | false | true // must not be longer + "+4919222" | "DE" | false | false + // using 19222 from DE als NDC after CC is checked by "online services 019xx" + "+49203 19222" | "DE" | true | false + "+49203 19222555" | "DE" | false | true // must not be longer + // using 19222 from FR als NDC after CC is checked by "online services 019xx" + "+49203 19222" | "FR" | true | false + "+49203 19222555" | "FR" | false | true // must not be longer + // end of 19222 + } def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 5cda648be635d7a52eb2369277eea4a82a9c1a4b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 21 Apr 2024 17:51:34 +0200 Subject: [PATCH 076/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German mass traffic in combination with NDC --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index aa5da31..805d71e 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -366,6 +366,68 @@ class IsValidNumberTest extends Specification { // end of 19222 } + def "check if original lib fixed isValid for German mass traffic NDC"(String number, regionCode, expectedResult, expectingFail) { + given: + + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isValid: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | regionCode | expectedResult | expectingFail + // 137 is masstraffic 10 digits + "0137 000 0000" | "DE" | false | false // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 00000" | "DE" | false | false // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + "0137 000 000" | "DE" | false | false // Zone 0 are not assigend https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/freieRNB/0137_MABEZ_FreieRNB.html?nn=326370 + + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0137/0137_Nummernplan.pdf?__blob=publicationFile&v=4 + // within each zone, there are only a few ranges assigned: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0137/belegteRNB/0137MABEZBelegteRNB_Basepage.html?nn=326370 + // Zone 1 is valid, but only with exactly 10 digits + "0137 100 0000" | "DE" | true | false + "0137 100 00000" | "DE" | false | false + "0137 100 000" | "DE" | false | false + // Zone 2 is valid, but only with exactly 10 digits + "0137 200 0000" | "DE" | true | false + "0137 200 00000" | "DE" | false | false + "0137 200 000" | "DE" | false | false + // Zone 3 is valid, but only with exactly 10 digits + "0137 300 0000" | "DE" | true | false + "0137 300 00000" | "DE" | false | false + "0137 300 000" | "DE" | false | false + // Zone 4 is valid, but only with exactly 10 digits + "0137 400 0000" | "DE" | true | false + "0137 400 00000" | "DE" | false | false + "0137 400 000" | "DE" | false | false + // Zone 5 is valid, but only with exactly 10 digits + "0137 500 0000" | "DE" | true | false + "0137 500 00000" | "DE" | false | false + "0137 500 000" | "DE" | false | false + // Zone 6 is valid, but only with exactly 10 digits + "0137 600 0000" | "DE" | true | false + "0137 600 00000" | "DE" | false | false + "0137 600 000" | "DE" | false | false + // Zone 7 is valid, but only with exactly 10 digits + "0137 700 0000" | "DE" | true | false + "0137 700 00000" | "DE" | false | false + "0137 700 000" | "DE" | false | false + // Zone 8 is valid, but only with exactly 10 digits + "0137 800 0000" | "DE" | true | false + "0137 800 00000" | "DE" | false | false + "0137 800 000" | "DE" | false | false + // Zone 9 is valid, but only with exactly 10 digits + "0137 900 0000" | "DE" | true | false + "0137 900 00000" | "DE" | false | false + "0137 900 000" | "DE" | false | false + + } + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From efcfa2f9fb376a983ab09ca99c7c949065698af4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Mon, 22 Apr 2024 17:34:24 +0200 Subject: [PATCH 077/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German Mobile 15 range (normal and voicemail infix) --- .../IsPossibleNumberWithReasonTest.groovy | 2 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 944 ++++++++++++++++++ 2 files changed, 945 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 43054ad..bd20212 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1360,7 +1360,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "0157299" | "DE" | [true, true, true, false, true, true, true, true, false, true] "0157399" | "DE" | [true, true, true, false, true, true, true, true, false, true] "0157499" | "DE" | [true, true, true, false, true, true, true, true, false, true] - "0152599" | "DE" | [true, true, true, false, true, true, true, true, false, true] + "0157599" | "DE" | [true, true, true, false, true, true, true, true, false, true] "0157699" | "DE" | [true, true, true, false, true, true, true, true, false, true] "0157799" | "DE" | [true, true, true, false, true, true, true, true, false, true] "0157899" | "DE" | [true, true, true, false, true, true, true, true, false, true] diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 805d71e..8fc2f26 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -427,6 +427,950 @@ class IsValidNumberTest extends Specification { } + def "check if original lib fixed isValid for German Mobile 15 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest + + if (numberUntilInfix.length() == 5) { + numbersToTest = [numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999"] + } + if (numberUntilInfix.length() == 6) { + numbersToTest = [numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999"] + } + if (numberUntilInfix.length() == 7) { + numbersToTest = [numberUntilInfix + "0000", + numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "9999", + numberUntilInfix + "99999", + numberUntilInfix + "999999"] + } + Boolean[] expectedResults = [false, true, false, false, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i Date: Tue, 23 Apr 2024 07:50:32 +0200 Subject: [PATCH 078/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German Mobile 16 range (normal and voicemail infix) --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 8fc2f26..1e31317 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -1371,6 +1371,169 @@ class IsValidNumberTest extends Specification { // end of 015xx for voicemail } + def "check if original lib fixed isValid for German Mobile 16 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest + + if (numberUntilInfix.length() == 5) { + numbersToTest = [numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999"] + } + if (numberUntilInfix.length() == 6) { + numbersToTest = [numberUntilInfix + "0000", + numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "9999", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999"] + } + + Boolean[] expectedResults = [false, true, true, false, + false, true, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 016xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0160 + // + "01600" | "DE" | [false, false, false, false, false, false, false, false] + "016010" | "DE" | [false, false, false, false, false, false, false, false] + "016011" | "DE" | [false, false, false, false, false, false, false, false] + "016012" | "DE" | [false, false, false, false, false, false, false, false] + // 016013 is reserved for voicemail - see tests below + "016014" | "DE" | [false, false, false, false, false, false, false, false] + "016015" | "DE" | [false, false, false, false, false, false, false, false] + "016016" | "DE" | [false, false, false, false, false, false, false, false] + "016017" | "DE" | [false, false, false, false, false, false, false, false] + "016018" | "DE" | [false, false, false, false, false, false, false, false] + "016019" | "DE" | [false, false, false, false, false, false, false, false] + "01602" | "DE" | [false, false, false, false, false, false, false, false] + "01603" | "DE" | [false, false, false, false, false, false, false, false] + "01604" | "DE" | [false, false, false, false, false, false, false, false] + "01605" | "DE" | [false, false, false, false, false, false, false, false] + "01606" | "DE" | [false, false, false, false, false, false, false, false] + "01607" | "DE" | [false, false, false, false, false, false, false, false] + "01608" | "DE" | [false, false, false, false, false, false, false, false] + "01609" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0162 + // + "01620" | "DE" | [false, false, false, false, false, false, false, false] + "01621" | "DE" | [false, false, false, false, false, false, false, false] + "01622" | "DE" | [false, false, false, false, false, false, false, false] + "01623" | "DE" | [false, false, false, false, false, false, false, false] + "01624" | "DE" | [false, false, false, false, false, false, false, false] + // 016250 is reserved for voicemail - see tests below + "016251" | "DE" | [false, false, false, false, false, false, false, false] + "016252" | "DE" | [false, false, false, false, false, false, false, false] + "016253" | "DE" | [false, false, false, false, false, false, false, false] + "016254" | "DE" | [false, false, false, false, false, false, false, false] + // 016255 is reserved for voicemail - see tests below + "016256" | "DE" | [false, false, false, false, false, false, false, false] + "016257" | "DE" | [false, false, false, false, false, false, false, false] + "016258" | "DE" | [false, false, false, false, false, false, false, false] + "016259" | "DE" | [false, false, false, false, false, false, false, false] + "01626" | "DE" | [false, false, false, false, false, false, false, false] + "01627" | "DE" | [false, false, false, false, false, false, false, false] + "01628" | "DE" | [false, false, false, false, false, false, false, false] + "01629" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0163 + // + "01630" | "DE" | [false, false, false, false, false, false, false, false] + "01631" | "DE" | [false, false, false, false, false, false, false, false] + "01632" | "DE" | [false, false, false, false, false, false, false, false] + "01633" | "DE" | [false, false, false, false, false, false, false, false] + "01634" | "DE" | [false, false, false, false, false, false, false, false] + "01635" | "DE" | [false, false, false, false, false, false, false, false] + "01636" | "DE" | [false, false, false, false, false, false, false, false] + "01637" | "DE" | [false, false, false, false, false, false, false, false] + "01638" | "DE" | [false, false, false, false, false, false, false, false] + "016390" | "DE" | [false, false, false, false, false, false, false, false] + "016391" | "DE" | [false, false, false, false, false, false, false, false] + "016392" | "DE" | [false, false, false, false, false, false, false, false] + "016393" | "DE" | [false, false, false, false, false, false, false, false] + "016394" | "DE" | [false, false, false, false, false, false, false, false] + "016395" | "DE" | [false, false, false, false, false, false, false, false] + "016396" | "DE" | [false, false, false, false, false, false, false, false] + "016397" | "DE" | [false, false, false, false, false, false, false, false] + "016398" | "DE" | [false, false, false, false, false, false, false, false] + // 016399 is reserved for voicemail - see tests below + } + + def "check if original lib fixed isValid for German Mobile 16 range with voicemail infix"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "000000000", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999", + numberUntilInfix + "999999999"] + + Boolean[] expectedResults = [false, true, true, false, + false, true, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 016xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0160 + // + "016013" | "DE" | [true, false, false, true, true, false, false, true] + // + // 0162 + // + "016250" | "DE" | [true, false, false, true, true, false, false, true] + "016255" | "DE" | [true, false, false, true, true, false, false, true] + + // + // 0163 + // + "016399" | "DE" | [true, false, false, true, true, false, false, true] + } def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 2c74d949bf18aefc30a0c2f9026495f4fac802e6 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Tue, 23 Apr 2024 07:53:01 +0200 Subject: [PATCH 079/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German Mobile 16 reserved range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 1e31317..2cbd939 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -1535,6 +1535,46 @@ class IsValidNumberTest extends Specification { "016399" | "DE" | [true, false, false, true, true, false, false, true] } + def "check if original lib fixed isValid for German reserve 16 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // 0161, 165, 166, 167 are reserved for future use + + "0161" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0165" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0166" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0167" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 37e571f1d1ebdcdb7d0ae51c47f4ca8fd0188726 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 07:42:27 +0200 Subject: [PATCH 080/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German 'Funkruf' 16(8/9) range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 2cbd939..96b93f5 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -1575,6 +1575,46 @@ class IsValidNumberTest extends Specification { } + def "check if original lib fixed isValid for German 'Funkruf' 16(8/9) range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667", + reserve + "223344556677"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // 0168, 169 are using a 14 digit national number (0164 is not further defined). + // TODO: could 0164 needs to be covered + "0168" | "DE" | [false, true, true, true, true, true, true, true, true, true, true, false, false] + "0169" | "DE" | [false, true, true, true, true, true, true, true, true, true, true, false, false] + + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 241044e2aff307f48ed1fa70ce6ca0cd1d960675 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 07:53:03 +0200 Subject: [PATCH 081/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German Mobile 17 range (normal and voicemail infix) --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 355 ++++++++++++++++++ 1 file changed, 355 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 96b93f5..968e17b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -1615,6 +1615,361 @@ class IsValidNumberTest extends Specification { } + def "check if original lib fixed isValid for German Mobile 17 range"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest + + if (numberUntilInfix.length() == 5) { + numbersToTest = [numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999"] + } + if (numberUntilInfix.length() == 6) { + numbersToTest = [numberUntilInfix + "0000", + numberUntilInfix + "00000", + numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "9999", + numberUntilInfix + "99999", + numberUntilInfix + "999999", + numberUntilInfix + "9999999"] + } + + Boolean[] expectedResults = [false, true, true, false, + false, true, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 017xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0170 + // + "01700" | "DE" | [false, false, false, false, false, false, false, false] + "017010" | "DE" | [false, false, false, false, false, false, false, false] + "017011" | "DE" | [false, false, false, false, false, false, false, false] + "017012" | "DE" | [false, false, false, false, false, false, false, false] + // 017013 is reserved for voicemail - see tests below + "017014" | "DE" | [false, false, false, false, false, false, false, false] + "017015" | "DE" | [false, false, false, false, false, false, false, false] + "017016" | "DE" | [false, false, false, false, false, false, false, false] + "017017" | "DE" | [false, false, false, false, false, false, false, false] + "017018" | "DE" | [false, false, false, false, false, false, false, false] + "017019" | "DE" | [false, false, false, false, false, false, false, false] + "01702" | "DE" | [false, false, false, false, false, false, false, false] + "01703" | "DE" | [false, false, false, false, false, false, false, false] + "01704" | "DE" | [false, false, false, false, false, false, false, false] + "01705" | "DE" | [false, false, false, false, false, false, false, false] + "01706" | "DE" | [false, false, false, false, false, false, false, false] + "01707" | "DE" | [false, false, false, false, false, false, false, false] + "01708" | "DE" | [false, false, false, false, false, false, false, false] + "01709" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0171 + // + "01710" | "DE" | [false, false, false, false, false, false, false, false] + "017110" | "DE" | [false, false, false, false, false, false, false, false] + "017111" | "DE" | [false, false, false, false, false, false, false, false] + "017112" | "DE" | [false, false, false, false, false, false, false, false] + // 017113 is reserved for voicemail - see tests below + "017114" | "DE" | [false, false, false, false, false, false, false, false] + "017115" | "DE" | [false, false, false, false, false, false, false, false] + "017116" | "DE" | [false, false, false, false, false, false, false, false] + "017117" | "DE" | [false, false, false, false, false, false, false, false] + "017118" | "DE" | [false, false, false, false, false, false, false, false] + "017119" | "DE" | [false, false, false, false, false, false, false, false] + "01712" | "DE" | [false, false, false, false, false, false, false, false] + "01713" | "DE" | [false, false, false, false, false, false, false, false] + "01714" | "DE" | [false, false, false, false, false, false, false, false] + "01715" | "DE" | [false, false, false, false, false, false, false, false] + "01716" | "DE" | [false, false, false, false, false, false, false, false] + "01717" | "DE" | [false, false, false, false, false, false, false, false] + "01718" | "DE" | [false, false, false, false, false, false, false, false] + "01719" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0172 + // + "01720" | "DE" | [false, false, false, false, false, false, false, false] + "01721" | "DE" | [false, false, false, false, false, false, false, false] + "01722" | "DE" | [false, false, false, false, false, false, false, false] + "01723" | "DE" | [false, false, false, false, false, false, false, false] + "01724" | "DE" | [false, false, false, false, false, false, false, false] + // 017250 is reserved for voicemail - see tests below + "017251" | "DE" | [false, false, false, false, false, false, false, false] + "017252" | "DE" | [false, false, false, false, false, false, false, false] + "017253" | "DE" | [false, false, false, false, false, false, false, false] + "017254" | "DE" | [false, false, false, false, false, false, false, false] + // 017255 is reserved for voicemail - see tests below + "017256" | "DE" | [false, false, false, false, false, false, false, false] + "017257" | "DE" | [false, false, false, false, false, false, false, false] + "017258" | "DE" | [false, false, false, false, false, false, false, false] + "017259" | "DE" | [false, false, false, false, false, false, false, false] + "01726" | "DE" | [false, false, false, false, false, false, false, false] + "01727" | "DE" | [false, false, false, false, false, false, false, false] + "01728" | "DE" | [false, false, false, false, false, false, false, false] + "01729" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0173 + // + "01730" | "DE" | [false, false, false, false, false, false, false, false] + "01731" | "DE" | [false, false, false, false, false, false, false, false] + "01732" | "DE" | [false, false, false, false, false, false, false, false] + "01733" | "DE" | [false, false, false, false, false, false, false, false] + "01734" | "DE" | [false, false, false, false, false, false, false, false] + // 017350 is reserved for voicemail - see tests below + "017351" | "DE" | [false, false, false, false, false, false, false, false] + "017352" | "DE" | [false, false, false, false, false, false, false, false] + "017353" | "DE" | [false, false, false, false, false, false, false, false] + "017354" | "DE" | [false, false, false, false, false, false, false, false] + // 017355 is reserved for voicemail - see tests below + "017356" | "DE" | [false, false, false, false, false, false, false, false] + "017357" | "DE" | [false, false, false, false, false, false, false, false] + "017358" | "DE" | [false, false, false, false, false, false, false, false] + "017359" | "DE" | [false, false, false, false, false, false, false, false] + "01736" | "DE" | [false, false, false, false, false, false, false, false] + "01737" | "DE" | [false, false, false, false, false, false, false, false] + "01738" | "DE" | [false, false, false, false, false, false, false, false] + "01739" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0174 + // + "01740" | "DE" | [false, false, false, false, false, false, false, false] + "01741" | "DE" | [false, false, false, false, false, false, false, false] + "01742" | "DE" | [false, false, false, false, false, false, false, false] + "01743" | "DE" | [false, false, false, false, false, false, false, false] + "01744" | "DE" | [false, false, false, false, false, false, false, false] + // 017450 is reserved for voicemail - see tests below + "017451" | "DE" | [false, false, false, false, false, false, false, false] + "017452" | "DE" | [false, false, false, false, false, false, false, false] + "017453" | "DE" | [false, false, false, false, false, false, false, false] + "017454" | "DE" | [false, false, false, false, false, false, false, false] + // 017455 is reserved for voicemail - see tests below + "017456" | "DE" | [false, false, false, false, false, false, false, false] + "017457" | "DE" | [false, false, false, false, false, false, false, false] + "017458" | "DE" | [false, false, false, false, false, false, false, false] + "017459" | "DE" | [false, false, false, false, false, false, false, false] + "01746" | "DE" | [false, false, false, false, false, false, false, false] + "01747" | "DE" | [false, false, false, false, false, false, false, false] + "01748" | "DE" | [false, false, false, false, false, false, false, false] + "01749" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0175 + // + "01750" | "DE" | [false, false, false, false, false, false, false, false] + "017510" | "DE" | [false, false, false, false, false, false, false, false] + "017511" | "DE" | [false, false, false, false, false, false, false, false] + "017512" | "DE" | [false, false, false, false, false, false, false, false] + // 017513 is reserved for voicemail - see tests below + "017514" | "DE" | [false, false, false, false, false, false, false, false] + "017515" | "DE" | [false, false, false, false, false, false, false, false] + "017516" | "DE" | [false, false, false, false, false, false, false, false] + "017517" | "DE" | [false, false, false, false, false, false, false, false] + "017518" | "DE" | [false, false, false, false, false, false, false, false] + "017519" | "DE" | [false, false, false, false, false, false, false, false] + "01752" | "DE" | [false, false, false, false, false, false, false, false] + "01753" | "DE" | [false, false, false, false, false, false, false, false] + "01754" | "DE" | [false, false, false, false, false, false, false, false] + "01755" | "DE" | [false, false, false, false, false, false, false, false] + "01756" | "DE" | [false, false, false, false, false, false, false, false] + "01757" | "DE" | [false, false, false, false, false, false, false, false] + "01758" | "DE" | [false, false, false, false, false, false, false, false] + "01759" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0176 + // + "01760" | "DE" | [false, false, false, false, false, false, false, false] + "01761" | "DE" | [false, false, false, false, false, false, false, false] + "01762" | "DE" | [false, false, false, false, false, false, false, false] + "017630" | "DE" | [false, false, false, false, false, false, false, false] + "017631" | "DE" | [false, false, false, false, false, false, false, false] + "017632" | "DE" | [false, false, false, false, false, false, false, false] + // 017633 is reserved for voicemail - see tests below + "017634" | "DE" | [false, false, false, false, false, false, false, false] + "017635" | "DE" | [false, false, false, false, false, false, false, false] + "017636" | "DE" | [false, false, false, false, false, false, false, false] + "017637" | "DE" | [false, false, false, false, false, false, false, false] + "017638" | "DE" | [false, false, false, false, false, false, false, false] + "017639" | "DE" | [false, false, false, false, false, false, false, false] + "01764" | "DE" | [false, false, false, false, false, false, false, false] + "01765" | "DE" | [false, false, false, false, false, false, false, false] + "01766" | "DE" | [false, false, false, false, false, false, false, false] + "01767" | "DE" | [false, false, false, false, false, false, false, false] + "01768" | "DE" | [false, false, false, false, false, false, false, false] + "01769" | "DE" | [false, false, false, false, false, false, false, false] + + // + // 0177 + // + "01770" | "DE" | [false, false, false, false, false, false, false, false] + "01771" | "DE" | [false, false, false, false, false, false, false, false] + "01772" | "DE" | [false, false, false, false, false, false, false, false] + "01773" | "DE" | [false, false, false, false, false, false, false, false] + "01774" | "DE" | [false, false, false, false, false, false, false, false] + "01775" | "DE" | [false, false, false, false, false, false, false, false] + "01776" | "DE" | [false, false, false, false, false, false, false, false] + "01777" | "DE" | [false, false, false, false, false, false, false, false] + "01778" | "DE" | [false, false, false, false, false, false, false, false] + "017790" | "DE" | [false, false, false, false, false, false, false, false] + "017791" | "DE" | [false, false, false, false, false, false, false, false] + "017792" | "DE" | [false, false, false, false, false, false, false, false] + "017793" | "DE" | [false, false, false, false, false, false, false, false] + "017794" | "DE" | [false, false, false, false, false, false, false, false] + "017795" | "DE" | [false, false, false, false, false, false, false, false] + "017796" | "DE" | [false, false, false, false, false, false, false, false] + "017797" | "DE" | [false, false, false, false, false, false, false, false] + "017798" | "DE" | [false, false, false, false, false, false, false, false] + // 017799 is reserved for voicemail - see tests below + + // + // 0178 + // + "01780" | "DE" | [false, false, false, false, false, false, false, false] + "01781" | "DE" | [false, false, false, false, false, false, false, false] + "01782" | "DE" | [false, false, false, false, false, false, false, false] + "01783" | "DE" | [false, false, false, false, false, false, false, false] + "01784" | "DE" | [false, false, false, false, false, false, false, false] + "01785" | "DE" | [false, false, false, false, false, false, false, false] + "01786" | "DE" | [false, false, false, false, false, false, false, false] + "01787" | "DE" | [false, false, false, false, false, false, false, false] + "01788" | "DE" | [false, false, false, false, false, false, false, false] + "017890" | "DE" | [false, false, false, false, false, false, false, false] + "017891" | "DE" | [false, false, false, false, false, false, false, false] + "017892" | "DE" | [false, false, false, false, false, false, false, false] + "017893" | "DE" | [false, false, false, false, false, false, false, false] + "017894" | "DE" | [false, false, false, false, false, false, false, false] + "017895" | "DE" | [false, false, false, false, false, false, false, false] + "017896" | "DE" | [false, false, false, false, false, false, false, false] + "017897" | "DE" | [false, false, false, false, false, false, false, false] + "017898" | "DE" | [false, false, false, false, false, false, false, false] + // 017899 is reserved for voicemail - see tests below + + // + // 0179 + // + "01790" | "DE" | [false, false, false, false, false, false, false, false] + "01791" | "DE" | [false, false, false, false, false, false, false, false] + "01792" | "DE" | [false, false, false, false, false, false, false, false] + "017930" | "DE" | [false, false, false, false, false, false, false, false] + "017931" | "DE" | [false, false, false, false, false, false, false, false] + "017932" | "DE" | [false, false, false, false, false, false, false, false] + // 017933 is reserved for voicemail - see tests below + "017934" | "DE" | [false, false, false, false, false, false, false, false] + "017935" | "DE" | [false, false, false, false, false, false, false, false] + "017936" | "DE" | [false, false, false, false, false, false, false, false] + "017937" | "DE" | [false, false, false, false, false, false, false, false] + "017938" | "DE" | [false, false, false, false, false, false, false, false] + "017939" | "DE" | [false, false, false, false, false, false, false, false] + "01794" | "DE" | [false, false, false, false, false, false, false, false] + "01795" | "DE" | [false, false, false, false, false, false, false, false] + "01796" | "DE" | [false, false, false, false, false, false, false, false] + "01797" | "DE" | [false, false, false, false, false, false, false, false] + "01798" | "DE" | [false, false, false, false, false, false, false, false] + "01799" | "DE" | [false, false, false, false, false, false, false, false] + } + + def "check if original lib fixed isValid for German Mobile 17 range with voicemail infix"(String numberUntilInfix, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [numberUntilInfix + "000000", + numberUntilInfix + "0000000", + numberUntilInfix + "00000000", + numberUntilInfix + "000000000", + numberUntilInfix + "999999", + numberUntilInfix + "9999999", + numberUntilInfix + "99999999", + numberUntilInfix + "999999999"] + + Boolean[] expectedResults = [false, true, true, false, + false, true, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + numberUntilInfix | regionCode | expectingFails + // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/MobileDienste/start.html + // especially https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Mobile%20Dienste/Nummernplan-2018-03-02.pdf?__blob=publicationFile&v=1 + // 017xyyyyyyy(y) x = block code, yyyyyyy(y) variable line lenx of 7 - 8 digits + + // + // 0170 + // + "017013" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0171 + // + "017113" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0172 + // + "017250" | "DE" | [true, true, true, false, true, true, true, false] + "017255" | "DE" | [true, false,false, false, true, false, false, false] + // + // 0173 + // + "017350" | "DE" | [true, true, true, false, true, true, true, false] + "017355" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0174 + // + "017450" | "DE" | [true, true, true, false, true, true, true, false] + "017455" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0175 + // + "017513" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0176 + // + "017633" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0177 + // + "017799" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0178 + // + "017899" | "DE" | [true, false, false, false, true, false, false, false] + // + // 0179 + // + "017933" | "DE" | [true, false, false, false, true, false, false, false] + } + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From b7d48fb0f8032932cf351e462a8992dd8fcdc139 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 16:06:24 +0200 Subject: [PATCH 082/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German ServiceNumbers 180 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 968e17b..3fc1e04 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -1969,6 +1969,55 @@ class IsValidNumberTest extends Specification { "017933" | "DE" | [true, false, false, false, true, false, false, false] } + def "check if original lib fixed isValid for German ServiceNumbers 180 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + Boolean[] expectedResults = [false, false, false, false, + true, true, true, + false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // Numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0180/Nummernplan0180_ServiceDiensteRufnummer.pdf?__blob=publicationFile&v=1 + // points out, that national numbers have 10 (3+7) digits in this range, but that there are historically shorter numbers + // At https://data.bundesnetzagentur.de/Bundesnetzagentur/SharedDocs/ExterneLinks/DE/Sachgebiete/Telekommunikation/Nummerierung/NVMwD.0180.Rufnummer.Vergeben.zip it can be checked, that shorter numbers have 3+5 & 3+6 digits + // 01800 is reserve + "01801" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + "01802" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + "01803" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + "01804" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + "01805" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + "01806" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + "01807" | "DE" | [false, false, false, false, false, false, false, true, true, true, true, false] + // 01808 is reserve + // 01809 is reserve + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 93d832e007d742d44d3ff61a50c78b86e9e0547b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 16:09:37 +0200 Subject: [PATCH 083/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German ServiceNumbers reserved 180 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 3fc1e04..cdb3426 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2018,6 +2018,48 @@ class IsValidNumberTest extends Specification { // 01809 is reserve } + def "check if original lib fixed isValid for German reserve 180 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0180 is Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0180/start.html + // Numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0180/Nummernplan0180_ServiceDiensteRufnummer.pdf?__blob=publicationFile&v=1 + // points out, that national numbers have 10 (3+7) digits in this range, but that there are historically shorter numbers + // At https://data.bundesnetzagentur.de/Bundesnetzagentur/SharedDocs/ExterneLinks/DE/Sachgebiete/Telekommunikation/Nummerierung/NVMwD.0180.Rufnummer.Vergeben.zip it can be checked, that shorter numbers have 3+5 & 3+6 digits + // reserve: + + "01800" | "DE" | [false, false, false, false, true, true, true, true, true, true, true] + "01808" | "DE" | [false, false, false, false, true, true, true, true, true, true, true] + "01809" | "DE" | [false, false, false, false, true, true, true, true, true, true, true] + + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 984cfd96268296757021340295c45a3d3fb034e7 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 16:13:28 +0200 Subject: [PATCH 084/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German international VPN 181 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index cdb3426..5578cf4 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2060,6 +2060,45 @@ class IsValidNumberTest extends Specification { } + def "check if original lib fixed isValid for German international VPN 181 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + Boolean[] expectedResults = [false, false, false, + true, true, true, true, true, true, true, true, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0181 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0181/181_node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0181/Nummernplan_IVPN.pdf?__blob=publicationFile&v=1 + // nation number with 14 digits + "0181" | "DE" | [true, true, true, false, false, false, false, false, false, false, false, true] + "+49181" | "FR" | [true, true, true, false, false, false, false, false, false, false, false, true] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 28dd11ffde51dff6be0f59fe336ed36ba5f83a82 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 16:18:18 +0200 Subject: [PATCH 085/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German VPN 18(2-9) range (and a fix for the original one) --- .../IsPossibleNumberWithReasonTest.groovy | 2 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index bd20212..a6aafa7 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2216,7 +2216,7 @@ class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.TOO_SHORT, - PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // TODO: Maybe IS Possible_Local_Only is better value, since VPN numbers are not public accessible, but only from numbers of same VPN // that would mean at least first 4 to 9 digits after NAC have to be same, depending on the VPN size. // if such a check is added, 18 59995 would be an exception which a public accessible exception for historical reason. diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 5578cf4..d72f361 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2099,6 +2099,51 @@ class IsValidNumberTest extends Specification { "+49181" | "FR" | [true, true, true, false, false, false, false, false, false, false, false, true] } + def "check if original lib fixed isValid for German VPN 18(2-9) range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, true, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 018 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/Nummernplan.pdf?__blob=publicationFile&v=1 + // Historical Reorder: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/TWiderruf.pdf?__blob=publicationFile&v=1 + // nation number with 11 digits + "0182" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0183" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0184" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0185" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0186" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0187" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0188" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + "0189" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From ce53799b1ef954247bc85046805b73d28507190d Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 16:27:23 +0200 Subject: [PATCH 086/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German VPN 18(2-9) range only reachable nationally --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index d72f361..30211fc 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2144,6 +2144,51 @@ class IsValidNumberTest extends Specification { "0189" | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German VPN 18(2-9) range which is only reachable nationally"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 018 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/Nummernplan.pdf?__blob=publicationFile&v=1 + // Historical Reorder: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/TWiderruf.pdf?__blob=publicationFile&v=1 + // nation number with 11 digits + "+49182" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49183" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49184" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49185" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49186" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49187" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49188" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + "+49189" | "FR" | [false, false, false, false, false, false, false, false, true, false, false, false] + + } def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From d313eb9cbc72f864f1e4eee4d049086782834099 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 24 Apr 2024 16:46:52 +0200 Subject: [PATCH 087/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German VPN 018 59995 xxxx is reachable (and fix of original one) --- .../IsPossibleNumberWithReasonTest.groovy | 2 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index a6aafa7..d5dea44 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -2326,7 +2326,7 @@ class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.TOO_SHORT, - PhoneNumberUtil.ValidationResult.TOO_LONG, + PhoneNumberUtil.ValidationResult.TOO_SHORT, PhoneNumberUtil.ValidationResult.IS_POSSIBLE, // is reachable from normal telephony network PhoneNumberUtil.ValidationResult.TOO_LONG, PhoneNumberUtil.ValidationResult.TOO_LONG, diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 30211fc..64f775e 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2190,6 +2190,42 @@ class IsValidNumberTest extends Specification { } + def "check if original lib fixed isValid for German VPN 018 59995 xxxx is reachable"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344"] + + Boolean[] expectedResults = [false, false, false, false, true, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 018 is VPN: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/018/018_Node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/Nummernplan.pdf?__blob=publicationFile&v=1 + // Historical Reorder: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/018/TWiderruf.pdf?__blob=publicationFile&v=1 + // nation number with 11 digits + "018 59995" | "DE" | [false, false, false, false, false, false, false] + "+4918 59995" | "FR" | [false, false, false, false, false, false, false] + } + + + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 3624ff2a059aa88ca2ecf68765edbeac2cc40d94 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 07:41:00 +0200 Subject: [PATCH 088/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German Online Services 019(1-4) inc. historic" --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 64f775e..f05537e 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2224,6 +2224,66 @@ class IsValidNumberTest extends Specification { "+4918 59995" | "FR" | [false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German Online Services 019(1-4) inc. historic"(String reserve, historic,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334"] + + Boolean[] expectedResults + if (historic) { + expectedResults = [false, + true, // BnetzA mentioned historic numbers are 4 digits long + true, // TODO: BnetzA only mentioned historic 4 digit numbers, but since we found 6 digit in use, we asume the gab with 5 digits should be possible + true, // At TDG (Deutsche Telekom Germany) we are using historic 0191 range with a 6 digit number + false, + false] + } else { + expectedResults = [false, + false, + false, + true, // BnetzA specified just 6 digits for current numbers + false, + false] + } + + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | historic | regionCode | expectingFails + // 019(1-4) is Online Services: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/019xyz/019xyz_node.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/019xyz/019_Nummernplan.pdf?__blob=publicationFile&v=1 + // while currently only 019(2-4) is used, there are historically 019(1-3) allocations with other structure. + // are those services dead? https://www.teltarif.de/internet/by-call/ + // Deutsche Telekom still offers 0191011 see https://www.telekom.de/hilfe/festnetz-internet-tv/anschluss-verfuegbarkeit/anschlussvarianten/festnetz-internet/einwahlnummern-internetzugang-aus-dem-ausland?samChecked=true + // that is historically a 0191 range, but not limit to 4 digits but using 6! + // Vodafone Germany is offering 0192070 see https://www.vodafone.de/media/downloads/pdf/090512_Preisliste_Vodafone_Festnetz.pdf + // Historical: 4 to 6 + "0191" | true | "DE" | [false, true, true, true, false, false] + "0192" | true | "DE" | [false, true, true, true, false, false] + "0193" | true | "DE" | [false, true, true, true, false, false] + "+49191" | true | "FR" | [false, true, true, true, false, false] + "+49192" | true | "FR" | [false, true, true, true, false, false] + "+49193" | true | "FR" | [false, true, true, true, false, false] + // current: 6 digits + "0194" | false | "DE" | [false, false, false, true, false, false] + "+49194" | false | "FR" | [false, false, false, true, false, false] + + } def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { From 08603caf5633725898d17fbaef382e3a43008f06 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 07:47:36 +0200 Subject: [PATCH 089/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01981 of mobile Emergency calls --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index f05537e..9b41dbe 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2285,6 +2285,67 @@ class IsValidNumberTest extends Specification { } + def "check if original lib fixed isValid for German traffic routing 01981 of mobile Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + // starting with 22 is giving a real number - 3344 is area code for Bad Freienwalde + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566", + reserve + "22334455667", + reserve + "223344556677"] + + Boolean[] expectedResults + if ((operator) && (regionCode == "DE")) { + expectedResults = [false, false, false, false, false, false, false, false, + true, // not callable public, but for national operators + true, // not callable public, but for national operators + true, // not callable public, but for national operators + true, // not callable public, but for national operators + false] + } else { + expectedResults = [false, false, false, false, false, false, false, false, + false, // not callable public, but for national operators + false, // not callable public, but for national operators + false, // not callable public, but for national operators + false, // not callable public, but for national operators + false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it could be checked if A is 2..5 and B is 1..3 (see own test below) + // additionally only valid NDCs see below could also be checked but that would be more a IsValid check + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01981" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false, false] + "01981" | true | "DE" | [false, false, false, false, false, false, false, false, true, true, true, true, false] + "+491981" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false] + "+491981" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 3f6ed391cf5c2f3dd6508fb4e841556184ef7980 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 13:04:42 +0200 Subject: [PATCH 090/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01981xx of mobile Emergency calls --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 9b41dbe..d401705 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2346,6 +2346,118 @@ class IsValidNumberTest extends Specification { "+491981" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German traffic routing 01981xx of mobile Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + // 2233 is are code of Hürth + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults + if ((operator) && (regionCode == "DE")) { + expectedResults = [false, false, false, false, false, false, + true, // not callable public, but for national operators + true, // not callable public, but for national operators + true, // not callable public, but for national operators + true, // not callable public, but for national operators + false] + } else { + expectedResults = [false, false, false, false, false, false, + false, // not callable public, but for national operators + false, // not callable public, but for national operators + false, // not callable public, but for national operators + false, // not callable public, but for national operators + false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it is checked if A is 2..5 and B is 1..3 - just for DE, for other countries it is INVALID Length which is tested by first 01981 test + // additionally only valid NDCs see below could also be checked but that would be more a IsValid check + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + + // Telekom Deutschland GmbH + "0198121" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198121" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198122" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198122" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198123" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198123" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + // Vodafone GmbH + "0198131" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198131" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198132" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198132" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198133" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198133" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + // Telefónica Germany GmbH & Co. OHG + "0198141" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198141" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198142" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198142" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198143" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198143" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + // Telefónica Germany GmbH & Co. OHG + "0198151" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198151" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198152" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198152" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + "0198153" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198153" | true | "DE" | [false, false, false, false, false, false, true, true, true, true, false] + + "+49198121" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198121" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198122" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198122" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198123" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198123" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "+49198131" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198131" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198132" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198132" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198133" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198133" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "+49198141" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198141" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198142" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198142" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198143" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198143" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "+49198151" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198151" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198152" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198152" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198153" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+49198153" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 8a1af215fa31fd42ce708bdba1abea9e670049c8 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 14:39:52 +0200 Subject: [PATCH 091/135] Apply suggestions from code review Co-authored-by: Kai Kreuzer --- .../numberplans/PhoneNumberValidationResult.java | 4 ++-- .../libphonenumber/PhoneNumberOfflineGeocoderTest.groovy | 2 +- .../libphonenumber/PhoneNumberUtil/NormalizationTest.groovy | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java index 879fab7..6efefba 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -7,8 +7,8 @@ *

* When the PhoneLib is validating a phone number it returns a value of the enum {@link ValidationResult}. *

- * It differentiate two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} for any negative case, which is not explicitly covered by any of the other four values. - * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focus on a specific number part - the Country Code. + * It differentiates two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} is for any negative case, which is not explicitly covered by any of the other four values. + * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focuses on a specific number part - the Country Code. *

* This wrapper introduces explicit INVALID_ reason codes for currently undifferentiated number parts IDP, NAC and NDC. Lastly there is also {@link PhoneNumberValidationResult#INVALID_DRAMA_NUMBER} reason code for the whole number if it is reserved as a fictional number in arts. *

diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy index a54558d..056d88b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberOfflineGeocoderTest.groovy @@ -28,7 +28,7 @@ class PhoneNumberOfflineGeocoderTest extends Specification { Logger logger = Logger.getLogger(PhoneNumberOfflineGeocoderTest.class.toString()) - boolean LOGONLYUNEXPECTED = true + static final boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index 22aa100..a586226 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * Copyright © 2024 Deutsche Telekom AG (opensource@telekom.de) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,9 +24,9 @@ class NormalizationTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = Logger.getLogger("") + Logger logger = Logger.getLogger(NormalizationTest.class") - boolean LOGONLYUNEXPECTED = true + static final boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() From 440d67614006d708b109f3f857bc7abbb02f8d3f Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 14:41:55 +0200 Subject: [PATCH 092/135] Apply suggestions from code review part 2 Co-authored-by: Kai Kreuzer --- .../PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy | 6 +++--- .../libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index d5dea44..581e5a9 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * Copyright © 2024 Deutsche Telekom AG (opensource@telekom.de) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,9 +32,9 @@ class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = Logger.getLogger("") + Logger logger = Logger.getLogger(IsPossibleNumberWithReasonTest.class) - boolean LOGONLYUNEXPECTED = true + static final boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index d401705..bc8e126 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright © 2023 Deutsche Telekom AG (opensource@telekom.de) + * Copyright © 2024 Deutsche Telekom AG (opensource@telekom.de) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From a9f253e3c33da547c5a5c27849e9aa5cba5ff45d Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 14:43:29 +0200 Subject: [PATCH 093/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German invalid traffic routing 01981xx of mobile Emergency calls --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index d401705..d2efa1b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2458,6 +2458,157 @@ class IsValidNumberTest extends Specification { "+49198153" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isPossibleNumberWithReason for German invalid traffic routing 01981xx of mobile Emergency calls"(String reserve, regionCode, boolean[] expectingFails) { + given: + // 2233 is are code of Hürth + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH, + PhoneNumberUtil.ValidationResult.INVALID_LENGTH] + + when: + PhoneNumberUtil.ValidationResult[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01981 is used for emergency call routing from national mobile operators and are not callable by normal public telephony network users nor by international operators + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it is checked for non A is 2..5 and B is 1..3 - just for DE, for other countries it is INVALID Length which is tested by first 01981 test + // no distinguishing of user and operator needed because those ranges are INVALID for both. + + "0198100" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198101" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198102" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198103" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198104" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198105" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198106" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198107" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198108" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198109" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198110" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198111" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198112" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198113" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198114" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198115" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198116" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198117" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198118" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198119" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198120" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198124" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198125" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198126" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198127" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198128" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198129" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198130" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198134" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198135" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198136" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198137" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198138" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198139" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198140" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198144" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198145" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198146" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198147" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198148" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198149" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198150" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + // 1..3 are valid + "0198154" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198155" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198156" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198157" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198158" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198159" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198160" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198161" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198162" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198163" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198164" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198165" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198166" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198167" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198168" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198169" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198170" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198171" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198172" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198173" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198174" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198175" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198176" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198177" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198178" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198179" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198180" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198181" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198182" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198183" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198184" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198185" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198186" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198187" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198188" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198189" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + + "0198190" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198191" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198192" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198193" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198194" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198195" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198196" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198197" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198198" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198199" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 6ccd556b7b3790d5bac09cc2180c11d0fb585634 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 15:01:45 +0200 Subject: [PATCH 094/135] Apply suggestions from code review part 3 --- .../PhoneNumberValidationResult.java | 67 ++++++++++++++----- .../IsPossibleNumberWithReasonTest.groovy | 5 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 7 +- .../PhoneNumberUtil/NormalizationTest.groovy | 6 +- 4 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java index 6efefba..6154965 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -1,3 +1,18 @@ +/* + * Copyright © 2024 Deutsche Telekom AG (opensource@telekom.de) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package de.telekom.phonenumbernormalizer.numberplans; import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult; @@ -7,24 +22,31 @@ *

* When the PhoneLib is validating a phone number it returns a value of the enum {@link ValidationResult}. *

- * It differentiates two possible positive and five possible negative results. The value {@link ValidationResult#INVALID_LENGTH} is for any negative case, which is not explicitly covered by any of the other four values. - * While most of the values for negative cases are focused on the number length, the value {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focuses on a specific number part - the Country Code. + * It differentiates two possible positive and five possible negative results. The value + * {@link ValidationResult#INVALID_LENGTH} is for any negative case, which is not explicitly covered by any of the other + * four values. + * While most of the values for negative cases are focused on the number length, the value + * {@link ValidationResult#INVALID_COUNTRY_CODE} explicitly focuses on a specific number part - the Country Code. *

- * This wrapper introduces explicit INVALID_ reason codes for currently undifferentiated number parts IDP, NAC and NDC. Lastly there is also {@link PhoneNumberValidationResult#INVALID_DRAMA_NUMBER} reason code for the whole number if it is reserved as a fictional number in arts. + * This wrapper introduces explicit INVALID_ reason codes for currently undifferentiated number parts IDP, NAC and NDC. + * Lastly there is also {@link PhoneNumberValidationResult#INVALID_DRAMA_NUMBER} reason code for the whole number if it + * is reserved as a fictional number in arts. *

- * Furthermore it introduces additional IS_POSSIBLE_ values, to hint for more specific calling restrictions of the validated number besides {@link PhoneNumberValidationResult#IS_POSSIBLE_LOCAL_ONLY}. + * Furthermore it introduces additional IS_POSSIBLE_ values, to hint for more specific calling restrictions of the + * validated number besides {@link PhoneNumberValidationResult#IS_POSSIBLE_LOCAL_ONLY}. *

* @see ValidationResult */ public enum PhoneNumberValidationResult { - /** The number length matches that of valid numbers for this region or used NDC without any identified calling restrictions. */ + /** The number length matches that of valid numbers for this region or used NDC without any identified calling + * restrictions. */ IS_POSSIBLE(ValidationResult.IS_POSSIBLE), /** * The number length/pattern matches that of local numbers for this region only (i.e. numbers that may - * be able to be dialled within an area, but does not have all the information e.g. NDC or is not allowed to be dialled from - * anywhere inside or outside the country). + * be able to be dialled within an area, but does not have all the information e.g. NDC or is not allowed to be + * dialled from anywhere inside or outside the country). */ IS_POSSIBLE_LOCAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), /** @@ -34,24 +56,30 @@ public enum PhoneNumberValidationResult { */ IS_POSSIBLE_NATIONAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), /** - * The number length/pattern matches that of international number for this region only (i.e. number is not allowed to be call from within the region, - * even if CC of the regions is used). + * The number length/pattern matches that of international number for this region only (i.e. number is not allowed + * to be call from within the region, even if CC of the regions is used). */ IS_POSSIBLE_INTERNATIONAL_ONLY(ValidationResult.IS_POSSIBLE), /** - * The number length/pattern matches that of national VPN number for this region only (i.e. number is only allowed to be call from other numbers of same VPN within this region and not by users of the public telephony network). + * The number length/pattern matches that of national VPN number for this region only (i.e. number is only allowed + * to be call from other numbers of same VPN within this region and not by users of the public telephony network). */ IS_POSSIBLE_NATIONAL_VPN_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), /** - * The number length/pattern matches that of VPN number for this region only (i.e. number is only allowed to be call from other numbers of same VPN even internationally but not by users of the public telephony network). + * The number length/pattern matches that of VPN number for this region only (i.e. number is only allowed to be call + * from other numbers of same VPN even internationally but not by users of the public telephony network). */ IS_POSSIBLE_VPN_ONLY(ValidationResult.IS_POSSIBLE), /** - * The number length/pattern matches that of national operator traffic control numbers for this region only (i.e. number is only allowed to be call between national operators for call routing and not directly by users of the public telephony network). + * The number length/pattern matches that of national operator traffic control numbers for this region only + * (i.e. number is only allowed to be call between national operators for call routing and not directly by users of + * the public telephony network). */ IS_POSSIBLE_NATIONAL_OPERATOR_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), /** - * The number length/pattern matches that of operator traffic control numbers for this region only (i.e. number is only allowed to be call between operators for call routing and not directly by users of the public telephony network). + * The number length/pattern matches that of operator traffic control numbers for this region only (i.e. number is + * only allowed to be call between operators for call routing and not directly by users of the public telephony + * network). */ IS_POSSIBLE_OPERATOR_ONLY(ValidationResult.IS_POSSIBLE), /** The number has an invalid international dialing prefix (aka IDP) for this region. */ @@ -74,7 +102,8 @@ public enum PhoneNumberValidationResult { INVALID_LENGTH(ValidationResult.INVALID_LENGTH), /** The number is longer than all valid numbers for this region, or for the used NDC. */ TOO_LONG(ValidationResult.TOO_LONG), - /** The number is matching a drama number range, which simulates valid number for this region only used in movies or other fictional story telling. */ + /** The number is matching a drama number range, which simulates valid number for this region only used in movies or + * other fictional story telling. */ INVALID_DRAMA_NUMBER(ValidationResult.INVALID_LENGTH); /** @@ -91,7 +120,8 @@ public enum PhoneNumberValidationResult { } /** - * Returns best matching corresponding {@link ValidationResult} enum value for an instance of a {@link PhoneNumberValidationResult} enum value + * Returns best matching corresponding {@link ValidationResult} enum value for an instance of a + * {@link PhoneNumberValidationResult} enum value * @return corresponding {@link ValidationResult} enum value */ public ValidationResult getPhoneLibValidationResult() { @@ -103,8 +133,11 @@ public ValidationResult getPhoneLibValidationResult() { * @return boolean true for any IS_POSSIBLE(_xxx) enum value */ public boolean isSomeHowValid() { - return ((this == IS_POSSIBLE) || (this == IS_POSSIBLE_LOCAL_ONLY) - || (this == IS_POSSIBLE_NATIONAL_ONLY) || (this == IS_POSSIBLE_NATIONAL_VPN_ONLY) || (this == IS_POSSIBLE_NATIONAL_OPERATOR_ONLY) + return ( (this == IS_POSSIBLE) + || (this == IS_POSSIBLE_LOCAL_ONLY) + || (this == IS_POSSIBLE_NATIONAL_ONLY) + || (this == IS_POSSIBLE_NATIONAL_VPN_ONLY) + || (this == IS_POSSIBLE_NATIONAL_OPERATOR_ONLY) || (this == IS_POSSIBLE_INTERNATIONAL_ONLY) || (this == IS_POSSIBLE_VPN_ONLY) || (this == IS_POSSIBLE_OPERATOR_ONLY)); diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 581e5a9..837076f 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -18,7 +18,8 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification -import java.util.logging.Logger +import org.slf4j.Logger +import org.slf4j.LoggerFactory // Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 @@ -32,7 +33,7 @@ class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = Logger.getLogger(IsPossibleNumberWithReasonTest.class) + Logger logger = LoggerFactory.getLogger(IsPossibleNumberWithReasonTest.class) static final boolean LOGONLYUNEXPECTED = true diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index d7b54c1..e37e9c1 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -18,7 +18,8 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification -import java.util.logging.Logger +import org.slf4j.Logger +import org.slf4j.LoggerFactory // Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 @@ -32,9 +33,9 @@ class IsValidNumberTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = Logger.getLogger("") + Logger logger = LoggerFactory.getLogger(IsValidNumberTest.class) - boolean LOGONLYUNEXPECTED = true + static final boolean LOGONLYUNEXPECTED = true def "setup"() { this.phoneUtil = PhoneNumberUtil.getInstance() diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index a586226..33c71ac 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -16,15 +16,17 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil +import org.slf4j.Logger +import org.slf4j.LoggerFactory import spock.lang.Specification -import java.util.logging.Logger + class NormalizationTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = Logger.getLogger(NormalizationTest.class") + Logger logger = LoggerFactory.getLogger(NormalizationTest.class) static final boolean LOGONLYUNEXPECTED = true From 6b7bd46878a298edebe910d6316d81f75646780f Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 20 Jan 2024 09:38:29 +0100 Subject: [PATCH 095/135] Use PhoneLib 8.13.28 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 605482d..3341974 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.17-SNAPSHOT + 1.1.17 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.27 + 8.13.28 @@ -147,7 +147,7 @@ com.googlecode.libphonenumber geocoder - 2.221 + 2.222 test From 5cd8f671d8d001eb1fee75ba6b01596aeec20d04 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 20 Jan 2024 10:57:28 +0100 Subject: [PATCH 096/135] Start Snapshot 1.1.18 after release 1.1.17 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3341974..ca254e6 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.17 + 1.1.18-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From bd4f23406083cf3659d0adb2d64406afa61976a6 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Jan 2024 09:55:58 +0100 Subject: [PATCH 097/135] Use PhoneLib 8.13.29 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index ca254e6..9eb4859 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.18-SNAPSHOT + 1.1.18 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.28 + 8.13.29 @@ -147,7 +147,7 @@ com.googlecode.libphonenumber geocoder - 2.222 + 2.223 test From 58e793660e4f5950bc8a366f9b05008938d97138 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Jan 2024 10:08:28 +0100 Subject: [PATCH 098/135] Use PhoneLib 8.13.29 and prepare release --- pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9eb4859..7e1a8cd 100644 --- a/pom.xml +++ b/pom.xml @@ -95,10 +95,13 @@ provided ${lombok.version} + org.springframework spring-context - 5.3.27 + 5.3.31 org.apache.commons From d56f39d9ae595924a7283bed83f055e587c4072e Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Jan 2024 10:43:06 +0100 Subject: [PATCH 099/135] Start Snapshot 1.2.0 after release 1.1.18, which will bring an upgrade in spring context dependency --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7e1a8cd..07a5cf3 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.18 + 1.2.0-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From c06f0c5fe5396f7dc5d0be72def0cd1134bdc94b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 9 Feb 2024 21:17:19 +0100 Subject: [PATCH 100/135] Use PhoneLib 8.13.30 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 07a5cf3..b9aeb33 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.2.0-SNAPSHOT + 1.1.19 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.29 + 8.13.30 @@ -150,7 +150,7 @@ com.googlecode.libphonenumber geocoder - 2.223 + 2.224 test From fca9c97339b34808bf5fde7056b73c0b230c4fc4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 9 Feb 2024 21:23:54 +0100 Subject: [PATCH 101/135] Start Snapshot 1.1.20 after release 1.1.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b9aeb33..482ba77 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.19 + 1.1.20-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From 6d684ce6a6d24333fd20c5140f728d6d45f7b0dd Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 2 Mar 2024 14:52:57 +0100 Subject: [PATCH 102/135] Use PhoneLib 8.13.31 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 482ba77..f787c19 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.20-SNAPSHOT + 1.1.20 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.30 + 8.13.31 @@ -150,7 +150,7 @@ com.googlecode.libphonenumber geocoder - 2.224 + 2.225 test From 2304467b12bc86d02f6a06129df7fe96d7575b70 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 2 Mar 2024 14:56:19 +0100 Subject: [PATCH 103/135] Upgrade Spring-Context version because of CVE-2024-22233 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f787c19..333ec1f 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,7 @@ org.springframework spring-context - 5.3.31 + 5.3.32 org.apache.commons From b3739918ca5ac82116b6f209a982719026033bc0 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 2 Mar 2024 15:01:27 +0100 Subject: [PATCH 104/135] Upgrade Spring-Context version because of CVE-2024-22233 jquery version because of CVE-2007-2379 --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 333ec1f..dbbcae5 100644 --- a/pom.xml +++ b/pom.xml @@ -186,10 +186,11 @@ test + org.webjars jquery - 3.6.4 + 3.7.0 test From ee6236110211c557c84e03c4042030c004b9ffd4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 2 Mar 2024 15:01:54 +0100 Subject: [PATCH 105/135] correct typo --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dbbcae5..4922fb0 100644 --- a/pom.xml +++ b/pom.xml @@ -186,7 +186,7 @@ test - + org.webjars jquery From a04bb567fa49fb629d47c4bba41ba1815d66399b Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 23 Mar 2024 19:17:42 +0100 Subject: [PATCH 106/135] Use PhoneLib 8.13.32 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 4922fb0..4b1a14c 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.20 + 1.1.21 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.31 + 8.13.32 @@ -150,7 +150,7 @@ com.googlecode.libphonenumber geocoder - 2.225 + 2.226 test From 4fd8a5966a45087caffeb3707bdd6e2f278b3f24 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 23 Mar 2024 19:25:53 +0100 Subject: [PATCH 107/135] Start Snapshot 1.2.22 after release 1.2.21 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4b1a14c..e8334ef 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.21 + 1.1.22-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From fb0700f8a33ba30b3d5160ce9e079bfb0bc3af7a Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 27 Mar 2024 13:21:06 +0100 Subject: [PATCH 108/135] Use PhoneLib 8.13.33 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index e8334ef..4151117 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.22-SNAPSHOT + 1.1.22 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.32 + 8.13.33 @@ -150,7 +150,7 @@ com.googlecode.libphonenumber geocoder - 2.226 + 2.227 test From fe82eefe4e81465e86032839de4fd5e4ea15c2c6 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 27 Mar 2024 21:06:17 +0100 Subject: [PATCH 109/135] Start Snapshot 1.1.23 after release 1.1.22 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4151117..1a8eb94 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.22 + 1.1.23-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From 5edf1d8f44daebc6fef5c411f90c95c10c02e350 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 17 Apr 2024 11:51:31 +0200 Subject: [PATCH 110/135] Use PhoneLib 8.13.34 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 1a8eb94..6c0242b 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.23-SNAPSHOT + 1.1.23 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.33 + 8.13.34 @@ -150,7 +150,7 @@ com.googlecode.libphonenumber geocoder - 2.227 + 2.228 test From 8e1a277887eb6bf279b3442ab3e539d2f4a64774 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 17 Apr 2024 12:01:57 +0200 Subject: [PATCH 111/135] Start Snapshot 1.1.24 after release 1.1.23 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6c0242b..9d6ee49 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.23 + 1.1.24-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From 7b9f5deaab8bed08f74e83f48811b8af01436da2 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 19 Apr 2024 13:33:47 +0200 Subject: [PATCH 112/135] Use PhoneLib 8.13.35 and prepare release --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9d6ee49..bef6043 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.24-SNAPSHOT + 1.1.24 jar https://github.com/telekom/phonenumber-normalizer @@ -86,7 +86,7 @@ com.googlecode.libphonenumber libphonenumber - 8.13.34 + 8.13.35 @@ -150,7 +150,7 @@ com.googlecode.libphonenumber geocoder - 2.228 + 2.229 test From 9cf1dcb285eaffa59d4ff16742deea5a03d17bd1 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 19 Apr 2024 13:43:12 +0200 Subject: [PATCH 113/135] Start Snapshot 1.1.25 after release 1.1.24 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bef6043..bc30c2b 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ normalizer Phonenumber Normalizer Library to work with phonenumbers, especially to fix googles PhoneLib ignoring German Landline specifics. - 1.1.24 + 1.1.25-SNAPSHOT jar https://github.com/telekom/phonenumber-normalizer From 386cb762c3c338177075e2432677189511769921 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Wed, 11 Oct 2023 17:17:05 +0200 Subject: [PATCH 114/135] Split Up Test and check isPossibleNumberWithReason against invalid German NDC - currently up to 03423. --- .../PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 837076f..14d7fbc 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -78,6 +78,7 @@ class IsPossibleNumberWithReasonTest extends Specification { // short code for Police (110) is not dial-able internationally nor does it has additional numbers "110" | "DE" | PhoneNumberUtil.ValidationResult.IS_POSSIBLE_LOCAL_ONLY | false "0110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // checked + "0110 556677" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "0203 110555" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true "+49110" | "DE" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true // IS_POSSIBLE_LOCAL_ONLY would also acceptable From 5009542201bc07abd5c34a8b407fad099242f835 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Fri, 26 Apr 2024 17:32:09 +0200 Subject: [PATCH 115/135] Adapting testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German invalid traffic routing 01981xx of mobile Emergency calls Enabled slf4j in testing --- pom.xml | 4 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 212 +++++++++--------- 2 files changed, 103 insertions(+), 113 deletions(-) diff --git a/pom.xml b/pom.xml index bc30c2b..d3686e1 100644 --- a/pom.xml +++ b/pom.xml @@ -139,14 +139,14 @@ 1.3.2 - + com.googlecode.libphonenumber geocoder diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index e37e9c1..5986d96 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2459,7 +2459,7 @@ class IsValidNumberTest extends Specification { "+49198153" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] } - def "check if original lib fixed isPossibleNumberWithReason for German invalid traffic routing 01981xx of mobile Emergency calls"(String reserve, regionCode, boolean[] expectingFails) { + def "check if original lib fixed isValid for German invalid traffic routing 01981xx of mobile Emergency calls"(String reserve, regionCode, boolean[] expectingFails) { given: // 2233 is are code of Hürth String[] numbersToTest = [reserve + "", @@ -2474,23 +2474,13 @@ class IsValidNumberTest extends Specification { reserve + "223344556", reserve + "2233445566"] - PhoneNumberUtil.ValidationResult[] expectedResults = [PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH, - PhoneNumberUtil.ValidationResult.INVALID_LENGTH] + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false] when: - PhoneNumberUtil.ValidationResult[] results = [] + Boolean[] results = [] for (number in numbersToTest) { def phoneNumber = phoneUtil.parse(number, regionCode) - results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + results += phoneUtil.isValidNumber(phoneNumber) } then: @@ -2507,107 +2497,107 @@ class IsValidNumberTest extends Specification { // additionally it is checked for non A is 2..5 and B is 1..3 - just for DE, for other countries it is INVALID Length which is tested by first 01981 test // no distinguishing of user and operator needed because those ranges are INVALID for both. - "0198100" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198101" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198102" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198103" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198104" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198105" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198106" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198107" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198108" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198109" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198110" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198111" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198112" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198113" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198114" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198115" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198116" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198117" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198118" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198119" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198120" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198100" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198101" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198102" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198103" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198104" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198105" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198106" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198107" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198108" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198109" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198110" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198111" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198112" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198113" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198114" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198115" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198116" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198117" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198118" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198119" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198120" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] // 1..3 are valid - "0198124" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198125" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198126" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198127" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198128" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198129" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198130" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198124" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198125" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198126" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198127" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198128" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198129" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198130" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] // 1..3 are valid - "0198134" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198135" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198136" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198137" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198138" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198139" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198140" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198134" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198135" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198136" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198137" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198138" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198139" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198140" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] // 1..3 are valid - "0198144" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198145" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198146" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198147" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198148" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198149" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198150" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198144" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198145" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198146" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198147" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198148" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198149" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198150" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] // 1..3 are valid - "0198154" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198155" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198156" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198157" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198158" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198159" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198160" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198161" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198162" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198163" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198164" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198165" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198166" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198167" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198168" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198169" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198170" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198171" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198172" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198173" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198174" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198175" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198176" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198177" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198178" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198179" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198180" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198181" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198182" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198183" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198184" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198185" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198186" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198187" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198188" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198189" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - - "0198190" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198191" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198192" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198193" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198194" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198195" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198196" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198197" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198198" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] - "0198199" | "DE" | [true, true, true, true, true, true, true, true, true, true, true] + "0198154" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198155" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198156" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198157" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198158" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198159" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198160" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198161" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198162" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198163" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198164" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198165" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198166" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198167" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198168" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198169" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198170" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198171" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198172" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198173" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198174" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198175" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198176" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198177" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198178" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198179" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198180" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198181" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198182" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198183" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198184" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198185" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198186" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198187" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198188" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198189" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + + "0198190" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198191" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198192" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198193" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198194" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198195" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198196" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198197" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198198" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "0198199" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] } From eced56c57ea7dc9b166217749ce19fe2384bf2e5 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 27 Apr 2024 10:48:54 +0200 Subject: [PATCH 116/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01982 of Emergency calls Fix slf4j warn(ing) in testing --- .../IsPossibleNumberWithReasonTest.groovy | 2 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 62 ++++++++++++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 14d7fbc..f5d6f43 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -50,7 +50,7 @@ class IsPossibleNumberWithReasonTest extends Specification { logger.info("isPossibleNumberWithReason is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { - logger.warning("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + logger.warn("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { if (expectingFail) { diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 5986d96..406efa0 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -50,7 +50,7 @@ class IsValidNumberTest extends Specification { logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { - logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + logger.warn("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { if (expectingFail) { @@ -2600,6 +2600,66 @@ class IsValidNumberTest extends Specification { "0198199" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German traffic routing 01982 of Emergency calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults + if ((operator)) { + expectedResults = [false, false, false, + true, // not callable public, but for operators + true, // not callable public, but for operators + true, // not callable public, but for operators + true, // not callable public, but for operators + true, // not callable public, but for operators + false, false, false] + } else { + expectedResults = [false, false, false, + false, // not callable public, but for operators + false, // not callable public, but for operators + false, // not callable public, but for operators + false, // not callable public, but for operators + false, // not callable public, but for operators + false, false, false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01982 is used for emergency call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01981-AB-(NDC 2-5 digits)-CC-XY + // additionally it could be checked if A is 2..5 and B is 1..3 (see own test below) + // additionally only valid NDCs see below could also be checked but that would be more a IsValid check + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01982" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "01982" | true | "DE" | [false, false, false, true, true, true, true, true, false, false, false] + "+491982" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + "+491982" | true | "FR" | [false, false, false, true, true, true, true, true, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 5d7b2213212e9f16cdf18477f16825752dd4bea9 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 27 Apr 2024 13:53:02 +0200 Subject: [PATCH 117/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01986 of public service calls --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 406efa0..37d6e82 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2660,6 +2660,63 @@ class IsValidNumberTest extends Specification { "+491982" | true | "FR" | [false, false, false, true, true, true, true, true, false, false, false] } + def "check if original lib fixed isValid for German traffic routing 01986 of public service calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "1", + reserve + "11", + reserve + "115", + reserve + "1151", + reserve + "11511", + reserve + "115111", + reserve + "222", + reserve + "333", + reserve + "444", + reserve + "555", + reserve + "666", + reserve + "777", + reserve + "888", + reserve + "999", + reserve + "000"] + + Boolean[] expectedResults + if ((operator)) { + expectedResults = [false, false, false, + true, // not callable public, but for operators + false, false, false, + false, false, false, false, false, false, false, false, false] + } else { + expectedResults = [false, false, false, + false, // not callable public, but for operators + false, false, false, + false, false, false, false, false, false, false, false, false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01986 is used for public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01986-115 + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01986" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] + "01986" | true | "DE" | [false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false] + "+491986" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] + "+491986" | true | "FR" | [false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 9f16d957900da947fe7d62ebc7135892d91503f6 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sat, 27 Apr 2024 13:57:31 +0200 Subject: [PATCH 118/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01987 of EU public service calls --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 37d6e82..07e4c5a 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2717,6 +2717,64 @@ class IsValidNumberTest extends Specification { "+491986" | true | "FR" | [false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German traffic routing 01987 of EU public service calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "0", + reserve + "00", + reserve + "000", + reserve + "0000", + reserve + "00000", + reserve + "000000", + reserve + "9", + reserve + "99", + reserve + "999", + reserve + "9999", + reserve + "99999", + reserve + "999999"] + + Boolean[] expectedResults + if ((operator)) { + expectedResults = [false, false, false, + true, // not callable public, but for operators + false, false, false, + false, false, + true, // not callable public, but for operators + false, false, false] + } else { + expectedResults = [false, false, false, + false, // not callable public, but for operators + false, false, false, + false, false, + false, // not callable public, but for operators + false, false, false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01987 is used for EU public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01987-xyz + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01987" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false, false] + "01987" | true | "DE" | [false, false, false, true, false, false, false, false, false, true, false, false, false] + "+491987" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false] + "+491987" | true | "FR" | [false, false, false, true, false, false, false, false, false, true, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From e9a785c4411e6d0a6886a88123a4dc7644b1ea67 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 08:52:28 +0200 Subject: [PATCH 119/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01988 for international free calls --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 07e4c5a..b1e8605 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2775,6 +2775,64 @@ class IsValidNumberTest extends Specification { "+491987" | true | "FR" | [false, false, false, true, false, false, false, false, false, true, false, false, false] } + def "check if original lib fixed isValid for German traffic routing 01988 for international free calls"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "0", + reserve + "00", + reserve + "000", + reserve + "0000", + reserve + "00000", + reserve + "000000", + reserve + "9", + reserve + "99", + reserve + "999", + reserve + "9999", + reserve + "99999", + reserve + "999999"] + + Boolean[] expectedResults + if ((operator)) { + expectedResults = [false, false, + true, // not callable public, but for operators + false, false, false, false, + false, + true, // not callable public, but for operators + false, false, false, false] + } else { + expectedResults = [false, false, + false, // not callable public, but for operators + false, false, false, false, + false, + false, // not callable public, but for operators + false, false, false, false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isPossibleNumberWithReason(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0198 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 01988 is used for EU public service call routing from operators and are not callable by normal public telephony network users (TODO: verfiy it is callable by international operators, which is assumed, because +49 is usable (unlike at 01981) + // 01988-xx TODO: verify called number information is transfered outside the number (no digits after xx) + // for traditional libphone it makes no difference if number is used by public user or operator, so one of it will always fail until it could distinguish it + "01988" | false | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true] + "01988" | true | "DE" | [true, true, false, true, true, true, true, true, false, true, true, true, true] + "+491988" | false | "FR" | [true, true, true, true, true, true, true, true, true, true, true, true, true] + "+491988" | true | "FR" | [true, true, false, true, true, true, true, true, false, true, true, true, true] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 7aafb4c7da0ff0d54f1e71b01b4faaf2c8845b85 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 09:02:52 +0200 Subject: [PATCH 120/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 01989 for Call Assistant --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index b1e8605..97e9c0a 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2833,6 +2833,116 @@ class IsValidNumberTest extends Specification { "+491988" | true | "FR" | [true, true, false, true, true, true, true, true, false, true, true, true, true] } + def "check if original lib fixed isValid for German traffic routing 01989 for Call Assistant"(String number, boolean Operator, regionCode, expectedResult, expectingFail) { + given: + // Operator is currently not usable in original methods (just a preparation) + def phoneNumber = phoneUtil.parse(number, regionCode) + + when: "get number isPossibleNumberWithReason: $number" + + def result = phoneUtil.isValidNumber(phoneNumber) + + then: "is number expected: $expectedResult" + + this.logResult(result, expectedResult, expectingFail, number, regionCode) + + where: + + number | Operator | regionCode | expectedResult | expectingFail + // traffic routing is described in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/118xy/118xyNummernplan.pdf?__blob=publicationFile&v=1 + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | true | "DE" | false | false + "019890" | true | "DE" | false | false + "0198900" | true | "DE" | false | false + "01989000" | true | "DE" | true | true // not callable public, but for operators + "019890000"| true | "DE" | false | false + "019891" | true | "DE" | false | false + "0198910" | true | "DE" | true | true // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | true | "DE" | true | true // not callable public, but for operators + "01989100" | true | "DE" | false | false + "019899" | true | "DE" | false | false + "0198999" | true | "DE" | true | true // not callable public, but for operators + "01989999" | true | "DE" | false | false + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | false | "DE" | false | false + "019890" | false | "DE" | false | false + "0198900" | false | "DE" | false | false + "01989000" | false | "DE" | false | false // not callable public, but for operators + "019890000"| false | "DE" | false | false + "019891" | false | "DE" | false | false + "0198910" | false | "DE" | false | false // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | false | "DE" | false | false // not callable public, but for operators + "01989100" | false | "DE" | false | false + "019899" | false | "DE" | false | false + "0198999" | false | "DE" | false | false // not callable public, but for operators + "01989999" | false | "DE" | false | false + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | true | "DE" | false | false + "019890" | true | "DE" | false | false + "0198900" | true | "DE" | false | false + "01989000" | true | "DE" | true | true // not callable public, but for operators + "019890000"| true | "DE" | false | false + "019891" | true | "DE" | false | false + "0198910" | true | "DE" | true | true // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | true | "DE" | true | true // not callable public, but for operators + "01989100" | true | "DE" | false | false + "019899" | true | "DE" | false | false + "0198999" | true | "DE" | true | true // not callable public, but for operators + "01989999" | true | "DE" | false | false + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "01989" | false | "DE" | false | false + "019890" | false | "DE" | false | false + "0198900" | false | "DE" | false | false + "01989000" | false | "DE" | false | false // not callable public, but for operators + "019890000"| false | "DE" | false | false + "019891" | false | "DE" | false | false + "0198910" | false | "DE" | false | false // not callable public, but for operators + // Call Assistant of Deutsche Telekom + "0198933" | false | "DE" | false | false // not callable public, but for operators + "01989100" | false | "DE" | false | false + "019899" | false | "DE" | false | false + "0198999" | false | "DE" | false | false // not callable public, but for operators + "01989999" | false | "DE" | false | false + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "+491989" | true | "FR" | false | false + "+4919890" | true | "FR" | false | false + "+49198900" | true | "FR" | false | false + "+491989000" | true | "FR" | false | false + "+4919890000"| true | "FR" | false | false + "+4919891" | true | "FR" | false | false + "+49198910" | true | "FR" | false | false + // Call Assistant of Deutsche Telekom + "+49198933" | true | "FR" | false | false + "+491989100" | true | "FR" | false | false + "+4919899" | true | "FR" | false | false + "+49198999" | true | "FR" | false | false + "+491989999" | true | "FR" | false | false + + // prefix 118 is replaced by 01989 and the rest of the general 5 digits long - except if the 4th digit is 0, than it is six digits long + "+491989" | false | "FR" | false | false + "+4919890" | false | "FR" | false | false + "+49198900" | false | "FR" | false | false + "+491989000" | false | "FR" | false | false + "+4919890000"| false | "FR" | false | false + "+4919891" | false | "FR" | false | false + "+49198910" | false | "FR" | false | false + // Call Assistant of Deutsche Telekom + "+49198933" | false | "FR" | false | false + "+491989100" | false | "FR" | false | false + "+4919899" | false | "FR" | false | false + "+49198999" | false | "FR" | false | false + "+491989999" | false | "FR" | false | false + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 5792cb25b4bea360c0f232a077e5637f3312cf51 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 09:15:55 +0200 Subject: [PATCH 121/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German traffic routing 0199 for internal traffic routing --- .../IsPossibleNumberWithReasonTest.groovy | 2 +- .../PhoneNumberUtil/IsValidNumberTest.groovy | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index f5d6f43..e9fbf88 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3168,7 +3168,7 @@ class IsPossibleNumberWithReasonTest extends Specification { "+491989999" | false | "FR" | PhoneNumberUtil.ValidationResult.INVALID_LENGTH | true } - def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 0199 for internal traffic routin"(String reserve, operator,regionCode, boolean[] expectingFails) { + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 0199 for internal traffic routing"(String reserve, operator,regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", reserve + "0", diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 97e9c0a..3e8b2fb 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2943,6 +2943,68 @@ class IsValidNumberTest extends Specification { "+491989999" | false | "FR" | false | false } + def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 0199 for internal traffic routing"(String reserve, operator,regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "0", + reserve + "00", + reserve + "000", + reserve + "0000", + reserve + "00000", + reserve + "000000", + reserve + "0000000", + reserve + "00000000", + reserve + "000000000", + reserve + "0000000000", + reserve + "00000000000", + reserve + "000000000000", + reserve + "9", + reserve + "99", + reserve + "999", + reserve + "9999", + reserve + "99999", + reserve + "999999", + reserve + "9999999", + reserve + "99999999", + reserve + "999999999", + reserve + "9999999999", + reserve + "99999999999", + reserve + "999999999999"] + + Boolean[] expectedResults + // TODO: Assumed 0199 is only valid within a German Operator network + if ((operator) && regionCode == "DE") { + expectedResults = [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true] + } else { + expectedResults = [false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | operator | regionCode | expectingFails + // 0199 is trafic control: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Verkehrslenkungsnummern/start.html + // Number Plan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/Verkehrslenkungsnr/NummernplanVerkehrslenkungsnrn.pdf?__blob=publicationFile&v=1 + // 0199 is not further ruled, so assuming ITU rule of max length 15 with no lower limit, but operator only use + "0199" | false | "DE" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] + "0199" | true | "DE" | [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + "+49199" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] + "+49199" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From b9d48758f75b4164356501772ec273093de02cad Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 09:29:32 +0200 Subject: [PATCH 122/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German personal 700 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 3e8b2fb..8fd4598 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -2943,7 +2943,7 @@ class IsValidNumberTest extends Specification { "+491989999" | false | "FR" | false | false } - def "check if original lib fixed isPossibleNumberWithReason for German traffic routing 0199 for internal traffic routing"(String reserve, operator,regionCode, boolean[] expectingFails) { + def "check if original lib fixed isValid for German traffic routing 0199 for internal traffic routing"(String reserve, operator,regionCode, boolean[] expectingFails) { given: String[] numbersToTest = [reserve + "", reserve + "0", @@ -3005,6 +3005,46 @@ class IsValidNumberTest extends Specification { "+49199" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German personal 700 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, true, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0700 is personal number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0700/0700_node.html + // it has 8-digit long numbers TODO: unclear if those numbers may only be called within Germany (no country code example) + // but general numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // indicates it is callable from outside Germany + + "0700" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49700" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49700" | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From ebe65ea54b892e1ac728b72289f574500e372cde Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 10:57:30 +0200 Subject: [PATCH 123/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German free call 800 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 8fd4598..bd181be 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3045,6 +3045,48 @@ class IsValidNumberTest extends Specification { "+49700" | "FR" | [false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German free call 800 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, true, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0800 is personal number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0800/0800_node.html + // it has 7-digit long numbers TODO: unclear if those numbers may only be called within Germany (no country code example) + // but general numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // indicates it is callable from outside Germany + // numbers could be extended, but that it up to carrier support and might not be supported see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0800/0800_Nummernplan.pdf?__blob=publicationFile&v=1 + // TODO: Need to check if extended numbers should be marked somehow-possible + + "0800" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49800" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49800" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 8ae20cec240afddddb5ca102cb29d35e01d83aee Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 12:19:39 +0200 Subject: [PATCH 124/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German free call 900 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index bd181be..2926deb 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3087,6 +3087,57 @@ class IsValidNumberTest extends Specification { "+49800" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] } + def "check if original lib fixed isValid for German free call 900 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, true, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 0900x is premium number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/0900/start.html + // it has 6-digit long numbers TODO: unclear if those numbers may only be called within Germany (no country code example) + // see https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0900/0900_NummernplanMit.pdf?__blob=publicationFile&v=1 + // but general numberplan https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // indicates it is callable from outside Germany + + // TODO start: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service + // Information + "09001" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+499001" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+499001" | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + // Entertaining + "09003" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+499003" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+499003" | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + // everything else + "09005" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+499005" | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+499005" | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From a0321d53f7273e8d58ca90a9b4d9fd4c71be641e Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 12:29:33 +0200 Subject: [PATCH 125/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German test numbers 031x range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 2926deb..b67b1a8 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3138,6 +3138,91 @@ class IsValidNumberTest extends Specification { "+499005" | "FR" | [false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German test numbers 031x range"(String reserve, regionCode, boolean[] expectingFails, boolean reserverange) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults + if ((reserverange) || (regionCode != "DE")) { + expectedResults = [false, false, false, false, false, false, false, false, false, false, false] + } else { + // if +49 is even not an option inside germany, then this would be IS_POSSIBLE_LOCAL_ONLY + // bit currently it seems it is part of general numberplan with +49 https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + expectedResults = [true, false, false, false, false, false, false, false, false, false, false] + } + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | reserverange | regionCode | expectingFails + // 031 is personal number range: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/031/031_node.html + // it has onl one digit (0 or 1) + // https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/031/Zutregel.pdf?__blob=publicationFile&v=1 + // not callable from outside germany + // TODO: check if inside Germany it is reachable via +49 + // TODO: Check if those test numbers are dropped when no preselection (010x) is possible anymore + + "0310" | false | "DE" | [true, false, false, false, false, false, false, false, false, false, false] + "+49310" | false | "DE" | [true, false, false, false, false, false, false, false, false, false, false] + "+49310" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0311" | false | "DE" | [true, false, false, false, false, false, false, false, false, false, false] + "+49311" | false | "DE" | [true, false, false, false, false, false, false, false, false, false, false] + "+49311" | false | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0312" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49312" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49312" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0313" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49313" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49313" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0314" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49314" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49314" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0315" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49315" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49315" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0316" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49316" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49316" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0317" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49317" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49317" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0318" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49318" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49318" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + + "0319" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49319" | true | "DE" | [false, false, false, false, false, false, false, false, false, false, false] + "+49319" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From c3564b433333f0907a470756166ac3d070653ab6 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 13:51:37 +0200 Subject: [PATCH 126/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German personal numbers 032 range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index b67b1a8..5b1960c 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3223,6 +3223,116 @@ class IsValidNumberTest extends Specification { "+49319" | true | "FR" | [false, false, false, false, false, false, false, false, false, false, false] } + def "check if original lib fixed isValid for German personal numbers 032 range"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, true, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + // (0)32210 is not usable for now + + "032211" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932211" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932211" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032212" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932212" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932212" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032213" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932213" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932213" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032214" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932214" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932214" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032215" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932215" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932215" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032216" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932216" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932216" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032217" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932217" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932217" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032218" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932218" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932218" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032219" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932219" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932219" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + // (0)32220 is not usable for now + + "032221" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932221" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932221" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032222" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932222" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932222" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032223" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932223" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932223" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032224" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932224" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932224" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032225" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932225" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932225" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032226" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932226" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932226" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032227" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932227" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932227" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032228" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932228" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932228" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + + "032229" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932229" | "DE" | [false, false, false, false, true, false, false, true, true, false, false] + "+4932229" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 8e051a43594e84890c54ba5ced98cb59d7cebdfe Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 13:55:05 +0200 Subject: [PATCH 127/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German personal numbers 032 range - low level reserve --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 5b1960c..0507ea0 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3333,6 +3333,48 @@ class IsValidNumberTest extends Specification { "+4932229" | "FR" | [false, false, false, false, true, false, false, true, true, false, false] } + def "check if original lib fixed isValid for German personal numbers 032 range - low level reserve"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + "032210" | "DE" | [false, false, false, false, true, false, true, true, true, false, false] + "+4932210" | "DE" | [false, false, false, false, true, false, true, true, true, false, false] + "+4932210" | "FR" | [false, false, false, false, true, false, true, true, true, false, false] + + "032220" | "DE" | [false, false, false, false, true, false, true, true, true, false, false] + "+4932220" | "DE" | [false, false, false, false, true, false, true, true, true, false, false] + "+4932220" | "FR" | [false, false, false, false, true, false, true, true, true, false, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 1d522f5d05f28115c23549a52485019d25dae144 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 14:11:51 +0200 Subject: [PATCH 128/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German personal numbers 032 range - mid level reserve --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 0507ea0..0bd5244 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3375,6 +3375,75 @@ class IsValidNumberTest extends Specification { "+4932220" | "FR" | [false, false, false, false, true, false, true, true, true, false, false] } + def "check if original lib fixed isValid for German personal numbers 032 range - mid level reserve"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + "03220" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493220" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493220" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + // (0)3221xyyy is in use see above + // (0)3222xyyy is in use see above + + "03223" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493223" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493223" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + "03224" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493224" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493224" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + "03225" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493225" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493225" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + "03226" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493226" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493226" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + "03227" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493227" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493227" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + "03228" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493228" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493228" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + + "03229" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493229" | "DE" | [false, false, false, false, false, true, false, true, true, true, false] + "+493229" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 29f4e358bb54e34b979a6b15dd4db822806a9560 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 14:35:57 +0200 Subject: [PATCH 129/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German personal numbers 032 range - high level reserve --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 0bd5244..498f613 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3444,6 +3444,78 @@ class IsValidNumberTest extends Specification { "+493229" | "FR" | [false, false, false, false, false, true, false, true, true, true, false] } + def "check if original lib fixed isValid for German personal numbers 032 range - high level reserve"(String reserve, regionCode, boolean[] expectingFails) { + given: + String[] numbersToTest = [reserve + "", + reserve + "2", + reserve + "22", + reserve + "223", + reserve + "2233", + reserve + "22334", + reserve + "223344", + reserve + "2233445", + reserve + "22334455", + reserve + "223344556", + reserve + "2233445566"] + + Boolean[] expectedResults = [false, false, false, false, false, false, false, false, false, false, false] + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResults[i], expectingFails[i], numbersToTest[i], regionCode) + } + + where: + reserve | regionCode | expectingFails + // 032 is personal number range:https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/032/032_node.html + // only a view blocks are currently in use https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/032/Zuteilungsregeln032NationaleTeilnehmerrufnummern.pdf?__blob=publicationFile&v=1 + + "0320" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49320" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49320" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0321" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49321" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49321" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + // (0)322 is checked in middle level test see above + + "0323" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49323" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49323" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0324" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49324" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49324" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0325" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49325" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49325" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0326" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49326" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49326" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0327" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49327" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49327" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0328" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49328" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49328" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + + "0329" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49329" | "DE" | [false, false, false, false, false, false, false, false, true, true, true] + "+49329" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 6648ad4b9d2ffbe5536bbce4c1bd09899e75e858 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 14:37:50 +0200 Subject: [PATCH 130/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German explicit drama numbers --- .../IsPossibleNumberWithReasonTest.groovy | 1 - .../PhoneNumberUtil/IsValidNumberTest.groovy | 62 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index e9fbf88..7525ce2 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -3885,7 +3885,6 @@ class IsPossibleNumberWithReasonTest extends Specification { "+49329" | "FR" | [true, true, true, true, true, true, true, true, true, true, true] } - def "check if original lib fixed isPossibleNumberWithReason for German explicit drama numbers"(String testnumber, regionCode, boolean expectingFail) { given: String[] numbersToTest = [testnumber] diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 498f613..b86d645 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3516,6 +3516,68 @@ class IsValidNumberTest extends Specification { "+49329" | "FR" | [false, false, false, false, false, false, false, false, true, true, true] } + def "check if original lib fixed isValid for German explicit drama numbers"(String testnumber, regionCode, boolean expectingFail) { + given: + String[] numbersToTest = [testnumber] + Boolean expectedResult = false + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } + + where: + testnumber | regionCode | expectingFail + // there are some drama numbers definded in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/mittlg148_2021.pdf?__blob=publicationFile&v=1 + + "0152 28817386" | "DE" | true + "+49152 28817386" | "DE" | true + "+49152 28817386" | "FR" | true + + "0152 28895456" | "DE" | true + "+49152 28895456" | "DE" | true + "+49152 28895456" | "FR" | true + + "0152 54599371" | "DE" | true + "+49152 54599371" | "DE" | true + "+49152 54599371" | "FR" | true + + "0172 9925904" | "DE" | true + "+49172 9925904" | "DE" | true + "+49172 9925904" | "FR" | true + + "0172 9968532" | "DE" | true + "+49172 9968532" | "DE" | true + "+49172 9968532" | "FR" | true + + "0172 9973185" | "DE" | true + "+49172 9973185" | "DE" | true + "+49172 9973185" | "FR" | true + + "0172 9973186" | "DE" | true + "+49172 9973186" | "DE" | true + "+49172 9973186" | "FR" | true + + "0172 9980752" | "DE" | true + "+49172 9980752" | "DE" | true + "+49172 9980752" | "FR" | true + + "0174 9091317" | "DE" | true + "+49174 9091317" | "DE" | true + "+49174 9091317" | "FR" | true + + "0174 9464308" | "DE" | true + "+49174 9464308" | "DE" | true + "+49174 9464308" | "FR" | true + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 7712b737f3a03ba432e716731ca49daf110cddaa Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 14:39:04 +0200 Subject: [PATCH 131/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German 2 digit drama number range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index b86d645..9b8a63b 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3578,6 +3578,44 @@ class IsValidNumberTest extends Specification { "+49174 9464308" | "FR" | true } + def "check if original lib fixed isValid for German 2 digit drama number range"(String testnumber, regionCode, boolean expectingFail) { + given: + ArrayList numbersToTest = [] + + for (int i1=0; i1<10; i1++) { + for (int i2=0; i2<10; i2++) { + String s = testnumber + String.valueOf(i1) + String.valueOf(i2) + numbersToTest.add(s) + } + } + + Boolean expectedResult = false + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } + + where: + testnumber | regionCode | expectingFail + // there are some drama number ranges defined in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/mittlg148_2021.pdf?__blob=publicationFile&v=1 + + "0171 39200" | "DE" | true + "+49171 39200" | "DE" | true + "+49171 39200" | "FR" | true + + "0176 040690" | "DE" | true + "+49176 040690" | "DE" | true + "+49176 040690" | "FR" | true + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From 97b399788ad9ac7c38f5bbe28999c924667f2b65 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 14:40:17 +0200 Subject: [PATCH 132/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: German 3 digit drama number range --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 9b8a63b..fb0abd6 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3616,6 +3616,58 @@ class IsValidNumberTest extends Specification { "+49176 040690" | "FR" | true } + def "check if original lib fixed isValid for German 3 digit drama number range"(String testnumber, regionCode, boolean expectingFail) { + given: + ArrayList numbersToTest = [] + + for (int i1=0; i1<10; i1++) { + for (int i2=0; i2<10; i2++) { + for (int i3=0; i3<10; i3++) { + String s = testnumber + String.valueOf(i1) + String.valueOf(i2) + String.valueOf(i3) + numbersToTest.add(s) + } + } + } + + Boolean expectedResult = false + + when: + Boolean[] results = [] + for (number in numbersToTest) { + def phoneNumber = phoneUtil.parse(number, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + then: + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail, numbersToTest[i], regionCode) + } + + where: + testnumber | regionCode | expectingFail + // there are some drama number ranges defined in https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/mittlg148_2021.pdf?__blob=publicationFile&v=1 + + "030 23125" | "DE" | true + "+4930 23125" | "DE" | true + "+4930 23125" | "FR" | true + + "069 90009" | "DE" | true + "+4969 90009" | "DE" | true + "+4969 90009" | "FR" | true + + "040 66969" | "DE" | true + "+4940 66969" | "DE" | true + "+4940 66969" | "FR" | true + + "0221 4710" | "DE" | true + "+49221 4710" | "DE" | true + "+49221 4710" | "FR" | true + + "089 99998" | "DE" | true + "+4989 99998" | "DE" | true + "+4989 99998" | "FR" | true + } + def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { given: From ad0de4897d0f46bc7c6980b61a3fe1bd0dd9aeff Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 16:27:28 +0200 Subject: [PATCH 133/135] Cloning testset from IsPossibleNumberWithReasonTest to IsValidNumberTest: invalid German NDC This is split up into 4 test, because of the 64kB Size limit when adapting them: groovyjarjarasm.asm.MethodTooLargeException The ranges are 010 - 02999; 030 - 039999; 040 - 069; 0700 - 0999 --- .../PhoneNumberUtil/IsValidNumberTest.groovy | 3635 ++++++++++++++++- 1 file changed, 3622 insertions(+), 13 deletions(-) diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index fb0abd6..5444694 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -3668,33 +3668,3642 @@ class IsValidNumberTest extends Specification { "+4989 99998" | "FR" | true } + /* + invalid NDC test has been split into an own file, + because we reach the 64kB Size limit when adapting them: groovyjarjarasm.asm.MethodTooLargeException + */ - def "check if original lib fixed isValidNumber for invalid German NDC"(String number, regionCode, expectedResult, expectingFail) { + def "check if original lib fixed isValid for invalid German NDC 010 - 02999"(String number, regionCode, expectedResult, expectingFail) { given: - def phoneNumber = phoneUtil.parse(number, regionCode) + String[] numbersToTest = [number + "", + number + "5", + number + "55", + number + "556", + number + "5566", + number + "55667", + number + "556677", + number + "5566778", + number + "55667788"] - when: "get number isValidNumber: $number" - def result = phoneUtil.isValidNumber(phoneNumber) + when: + "get number isValid: $number" + Boolean[] results = [] + for (n in numbersToTest) { + def phoneNumber = phoneUtil.parse(n, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + if (expectingFail == true) { + expectingFail = [true, true, true, true, true, true, true, true, true] + } + + if (expectingFail == false) { + expectingFail = [false, false, false, false, false, false, false, false, false] + } + + then: + "is number expected: $expectedResult" + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail[i], numbersToTest[i], regionCode) + } - then: "is number expected: $expectedResult" - this.logResult(result, expectedResult, expectingFail, number, regionCode) where: - number | regionCode | expectedResult | expectingFail - // invalid area code for germany - need to be false - "02040 556677" | "DE" | false | true - "02041 556677" | "DE" | true | false + number | regionCode | expectedResult | expectingFail + // short numbers which are reached internationally are also registered as NDC + // TODO: 010 is operator selection see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/010/010xy_node.html ... will be canceled 31.12.2024 + "010" | "DE" | false | false + // --- + // 0110 is checked in Emergency short codes see above + // --- + "0111" | "DE" | false | false + // --- + // 0112 is checked in Emergency short codes see above + // --- + "0113" | "DE" | false | false + "0114" | "DE" | false | false + // --- + // 0115 is checked in German Government short codes see above + // --- + // --- + // 0116 is checked in EU social short codes see above + // --- + "0117" | "DE" | false | false + // --- + // 0118 is checked in German call assistant services see above + // --- + "0119" | "DE" | false | false + "012" | "DE" | false | false + "0120" | "DE" | false | false + "0121" | "DE" | false | false + "0122" | "DE" | false | false + "0123" | "DE" | false | false + "0124" | "DE" | false | false + "0125" | "DE" | false | false + "0126" | "DE" | false | false + "0127" | "DE" | false | false + "0128" | "DE" | false | false + "0129" | "DE" | false | false + "0130" | "DE" | false | false + "0131" | "DE" | false | false + "0132" | "DE" | false | false + "0133" | "DE" | false | false + "0134" | "DE" | false | false + "0135" | "DE" | false | false + "0136" | "DE" | false | false + // --- + // 0137 is checked in Mass Traffic see above + // --- + "0138" | "DE" | false | [false, false, false, false, true, false, false, false, false] + "0139" | "DE" | false | false + "014" | "DE" | false | false + "0140" | "DE" | false | false + "0141" | "DE" | false | false + "0142" | "DE" | false | false + "0143" | "DE" | false | false + "0144" | "DE" | false | false + "0145" | "DE" | false | false + "0146" | "DE" | false | false + "0147" | "DE" | false | false + "0148" | "DE" | false | false + "0149" | "DE" | false | false + // --- + // 015x is checked in Mobile 15 and 15 voicemail see above + // --- + // --- + // 016x: + // 0160, 0162, 0163 are checked in Mobile 16 and 16 voicemail + // 0161, 0165, 0166, 0167 are checked in Reserve 16 + // 0168, 0169 are checked in eMessage 16 - see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/Funkruf/start.html and https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/np_nummernraum.pdf?__blob=publicationFile&v=1 + // TODO: 0164 eMessage length definition needed + // --- + // --- + // 017x is checked in Mobile 17 and 17 voicemail see above + // --- + // --- + // 0180 is checked in Service Numbers 0180 and its reserve + // --- + // --- + // 0181 is checked in international VPN 0181 + // --- + // --- + // 018(2-9) is checked in German national VPN 018(2-9) range and that it is only reachable nationally + // --- + "0190" | "DE" | false | false // Reserve - previously premium rate numbers, which were relocated to 0900 + // --- + // 019(1-4) is checked in German Online Services 019(1-4) inc. historic + // --- + "0195" | "DE" | false | false // Reserve + "0196" | "DE" | false | false // Reserve + "0197" | "DE" | false | false // Reserve + // --- + // Traffic management numbers are only valid between operators - so not for end customers to call + // --- + "01980" | "DE" | false | false // Reserve + // --- + // 01981 is checked in German traffic routing 01981 of mobile Emergency calls + // --- + // --- + // 01982 is checked in German traffic routing 01982 for emergency calls + // --- + "01983" | "DE" | false | false // Reserve + "01984" | "DE" | false | false // Reserve + "01985" | "DE" | false | false // Reserve + // --- + // 01986 is checked in German traffic routing 01986 for public service calls 115 + // --- + // --- + // 01987 is checked in German traffic routing 01987 for public EU service calls 116xyz + // --- + // --- + // 01988 is checked in German traffic routing 01988 for international freecalls + // --- + // --- + // 01989 is checked in Assistant Service Routing + // --- + // --- + // 0199 is checked in operator internal network traffic routing + // --- + // invalid area code for germany - using Invalid_Lenth, because its neither to long or short, but just NDC is not valid. + "0200" | "DE" | false | false + // 0201 is Essen + // 0202 is Wuppertal + // 0203 is Duisburg + "02040" | "DE" | false | [false, false, true, true, true, true, true, true, true] // 02041 is Bottrop - "02042 556677" | "DE" | false | true + "02042" | "DE" | false | [false, false, true, true, true, true, true, true, true] // 02043 is Gladbeck - "02044 556677" | "DE" | false | true + "02044" | "DE" | false | [false, false, true, true, true, true, true, true, true] // 02045 is Bottrop-Kirchhellen - "02046 556677" | "DE" | false | true + "02046" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02047" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02048" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02049" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02050" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02051 till 02054 are in use + "02055" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02056 is Heiligenhausen + "02057" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02058 is Wülfrath + "02059" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02060" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02061" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02062" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02063" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02064 till 02066 is in use + "02067" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02068" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02069" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0207" | "DE" | false | false + // 0208 & 0209 is in use + "02100" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02101" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02102 till 02104 is in use + "02105" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02106" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02107" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02108" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02109" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // special case 0212 for Solingen also covers 02129 for Haan Rheinl since Solingen may not use numbers starting with 9 + "02130" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02131 till 02133 is in use + "02134" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02135" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02136" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02137 is Neuss-Norf + "02138" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02139" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0214 is Leverkusen + // 02150 till 02154 is in use + "02155" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02156 till 02159 is in use + "02160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02161 till 02166 is in use + "02167" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02168" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02169" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02170" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02171 is Leverkusen-Opladen + "02172" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02173 till 02175 is in use + "02176" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02177" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02178" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02179" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02180" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02181 till 02183 is in use + "02184" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02185" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02186" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02187" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02188" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02189" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02190" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02191 till 02193 is in use + "02194" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02195 till 02196 is in use + "02197" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02198" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02199" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02201" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02202 till 02208 is in use + "02209" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0221 is Köln + "02220" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02221" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02222 till 02228 is in use + "02229" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02230" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02231" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02232 till 02238 is in use + "02239" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02240" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02241 till 02248 is in use + "02249" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02250" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02251 till 02257 is in use + "02258" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02259" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02260" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02261 till 02269 is in use + "02270" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02271 till 02275 is in use + "02276" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02277" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02278" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02279" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0228 is Bonn + "02290" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02291 till 02297 is in use + "02298" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02299" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02300" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02301 till 02309 is in use + // 0231 is Dortmund + "02320" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02321" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02322" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02323 till 02325 is in use + "02326" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02327 is Bochum-Wattenscheid + "02328" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02329" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02330 till 02339 is in use + // 0234 is Bochum + "02350" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02351 till 02355 is in use + "02356" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02357 till 02358 is in use + // 02360 till 02369 is in use + "02370" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02371 till 02375 is in use + "02376" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02377 till 02379 is in use + "02380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02381 till 02385 is in use + "02386" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02387 till 02389 is in use + "02390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02391 till 02395 is in use + "02396" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02397" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02398" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02400" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02401 till 02409 is in use + // 0241 is Aachen + "02420" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02421 till 02429 is in use + "02430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02431 till 02436 is in use + "02437" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02438" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02439" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02440 till 02441 is in use + "02442" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02443 till 02449 is in use + "02450" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02451 till 02456 is in use + "02457" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02458" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02459" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02460" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02461 till 02465 is in use + "02466" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02467" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02468" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02469" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02471 till 02474 is in use + "02475" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02476" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02477" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02478" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02479" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02480" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02481" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02482 is Hellenthal + "02483" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02484 till 02486 is in use + "02487" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02488" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02489" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0249" | "DE" | false | false + "02500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02501 till 02502 is in use + "02503" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02504 till 02509 is in use + // 0251 is Münster + // 02520 till 02529 is in use + "02530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02531" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02532 till 02536 is in use + "02531" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02538 is Drensteinfurt-Rinkerode + "02539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02541 till 02543 is in use + "02544" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02545 till 02548 is in use + "02549" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02550" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02551 till 02558 is in use + "02559" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02560" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02561 till 02568 is in use + "02569" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02570" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02571 till 02575 is in use + "02576" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02577" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02578" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02579" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02580" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02581 till 02588 is in use + "02589" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02590 till 02599 is in use + "02600" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02601 till 02608 is in use + "02609" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0261 is Koblenz am Rhein + // 02620 till 02628 is in use + "02629" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02630 till 02639 is in use + "02640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02641 till 02647 is in use + "02648" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02650" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02651 till 02657 is in use + "02658" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02659" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02660" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02661 till 02664 is in use + "02665" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02666 till 02667 is in use + "02668" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02669" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02670" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02671 till 02678 is in use + "02679" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02680 till 02689 is in use + "02690" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02691 till 02697 is in use + "02698" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02699" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0271 is Siegen + "02720" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02721 till 02725 is in use + "02726" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02727" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02728" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02729" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02731" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02731 till 02739 is in use + "02740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02741 till 02745 is in use + "02746" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02747 is Molzhain + "02748" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02749" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02750 till 02755 is in use + "02756" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02757" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02758 till 02759 is in use + "02760" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02761 till 02764 is in use + "02765" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02766" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02767" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02768" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02769" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02770 till 02779 is in use + "02780" | "DE" | false | false + // 02781 till 02784 is in use + "02785" | "DE" | false | false + "02786" | "DE" | false | false + "02787" | "DE" | false | false + "02788" | "DE" | false | false + "02789" | "DE" | false | false + "0279" | "DE" | false | false + "02790" | "DE" | false | false + "02791" | "DE" | false | false + "02792" | "DE" | false | false + "02793" | "DE" | false | false + "02794" | "DE" | false | false + "02795" | "DE" | false | false + "02796" | "DE" | false | false + "02797" | "DE" | false | false + "02798" | "DE" | false | false + "02799" | "DE" | false | false + "02800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02801 till 02804 is in use + "02805" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02806" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02807" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02808" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02809" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0281 is Wesel + "02820" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02821 till 02828 is in use + "02829" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02830" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02831 till 02839 is in use + "02840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02841 till 02845 is in use + "02846" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02847" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02848" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02849" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02850 till 02853 is in use + "02854" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02855 till 02859 is in use + "02860" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02861 till 02867 is in use + "02868" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02869" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02870" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02871 till 02874 is in use + "02875" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02876" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02877" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02878" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02879" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0288" | "DE" | false | false + "0289" | "DE" | false | false + "02900" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02901" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02902 till 02905 is in use + "02906" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02907" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02908" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02909" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0291 is Meschede + "02920" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02921 till 02925 is in use + "02926" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02927 till 02928 is in use + "02929" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02930" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02931 till 02935 is in use + "02936" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02937 till 02938 is in use + "02939" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02940" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02941 till 02945 is in use + "02946" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02947 till 02948 is in use + "02949" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02950" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02951 till 02955 is in use + "02956" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02957 till 02958 is in use + "02959" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02960" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02961 till 02964 is in use + "02965" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02966" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02967" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02968" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02969" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02970" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02971 till 02975 is in use + "02976" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02977 is Schmallenberg-Bödefeld + "02978" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02979" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02980" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02981 till 02985 is in use + "02986" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02987" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02988" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02989" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02990" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 02991 till 02994 is in use + "02995" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02996" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02997" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02998" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "02999" | "DE" | false | [false, false, true, true, true, true, true, true, true] + } + + def "check if original lib fixed isValid for invalid German NDC 030 - 039999"(String number, regionCode, expectedResult, expectingFail) { + given: + + String[] numbersToTest = [number + "", + number + "5", + number + "55", + number + "556", + number + "5566", + number + "55667", + number + "556677", + number + "5566778", + number + "55667788"] + + + when: "get number isValid: $number" + Boolean[] results = [] + for (n in numbersToTest) { + def phoneNumber = phoneUtil.parse(n, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + if (expectingFail == true) { + expectingFail = [true, true, true, true, true, true, true, true, true] + } + + if (expectingFail == false) { + expectingFail = [false, false, false, false, false, false, false, false, false] + } + + then: "is number expected: $expectedResult" + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail[i], numbersToTest[i], regionCode) + } + + + where: + + number | regionCode | expectedResult | expectingFail + // 030 is Berlin + // --- + // 0310 is checked in German test numbers 031x + // 0311 is checked in German test numbers 031x + // 0312 till 0319 is also checked in German test numbers 031x - TODO: by end of 2024 Call By Call is disabled in Germany, to be checked if Testnumbers are dropped then. + "0312" | "DE" | false | false + "0313" | "DE" | false | false + "0314" | "DE" | false | false + "0315" | "DE" | false | false + "0316" | "DE" | false | false + "0317" | "DE" | false | false + "0318" | "DE" | false | false + "0319" | "DE" | false | false + // --- + // --- + // 032 is checked in multiple 032 test (due to different blocks are only in use currently) see above + // --- + "03300" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03301 till 03304 is in use + "033050" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033051 till 033056 is in use + "033057" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033058" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033059" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03306 till 03307 is in use + // 033080 is Marienthal Kreis Oberhavel + "033081" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033082 till 033089 is in use + "033090" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033091" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033092" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033093 till 033094 is in use + "033095" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033096" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033097" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033098" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033099" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 0331 is Potsdam + // 033200 till 033209 is in use + // 03321 is Nauen Brandenburg + // 03322 is Falkensee + // 033230 till 033235 is in use + "033236" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033237 till 033239 is in use + "03324" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03325" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03326" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03327 till 03329 is in use + "03330" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03331 till 03332 is in use + "033330" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033331 till 033338 is in use + "033339" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03334 till 03335 is in use + "033360" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033361 till 033369 is in use + // 03337 till 03338 is in use + "033390" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033391" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033392" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033393 till 033398 is in use + "033399" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03340" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03341 till 03342 is in use + "033430" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033431" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033432 till 033439 is in use + // 03344 is Bad Freienwalde + "033450" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033451 till 033452 is in use + "033453" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033454 is Wölsickendorf/Wollenberg + "033455" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033456 till 033458 is in use + "033459" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03346 is Seelow + // 033470 is Lietzen + "033471" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033472 till 033479 is in use + // 0335 is Frankfurt (Oder) + "033600" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033601 till 033609 is in use + // 03361 till 03362 is in use + "033630" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033631 till 033638 is in use + "033639" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03364 is Eisenhüttenstadt + "033650" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033651" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033652 till 033657 is in use + "033658" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033659" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03366 is Beeskow + "033670" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033671 till 033679 is in use + "03368" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03369" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "033700" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033701 till 033704 is in use + "033705" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033706" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033707" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033708 is Rangsdorf + "033709" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03371 till 03372 is in use + "033730" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033731 till 033734 is in use + "033735" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033736" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033737" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033738" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033739" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033740" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033741 till 033748 is in use + "033749" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03375 is Königs Wusterhausen + // 33760 is Münchehofe Kreis Dahme-Spreewald + "033761" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033762 till 033769 is in use + // 03377 till 03379 is in use + "03380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03381 till 03382 is in use + // 033830 till 033839 is in use + "033840" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033841 is Belzig + "033842" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033843 till 033849 is in use + // 03385 till 03386 is in use + // 033870 is Zollchow bei Rathenow + "033871" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033872 till 033878 is in use + "033879" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03388" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03389" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03391 is Neuruppin + // 033920 till 033929 is in use + "033930" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033931 till 033933 is in use + "033934" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033935" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033936" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033937" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033938" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033939" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03394 till 03395 is in use + "033960" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033961" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033962 till 033969 is in use + // 033970 till 033979 is in use + "033980" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033981 till 033984 is in use + "033985" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033986 is Falkenhagen Kreis Prignitz + "033987" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "033988" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 033989 is Sadenbeck + "03399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0340 till 0341 is in use + "034200" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034201" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034202 till 034208 is in use + "034209" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03421 is Torgau + "034220" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034221 till 034224 is in use + "034225" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034226" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034227" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034228" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034229" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03423 is Eilenburg + "034240" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034241 till 034244 is in use + "034245" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034246" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034247" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034248" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034249" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03425 is Wurzen + "034260" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034261 till 034263 is in use + "03427" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03428" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "034290" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034291 till 034293 is in use + "03430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03431 is Döbeln + "034320" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034321 till 034322 is in use + "034323" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034324 till 034325 is in use + "034326" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034327 till 034328 is in use + "034329" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03433 is Borna Stadt + "034340" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034341 till 034348 is in use + "034349" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03435 is Oschatz + "034360" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034361 till 034364 is in use + "034365" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034366" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034367" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034368" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034369" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03437 is Grimma + "034380" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034381 till 034386 is in use + "034387" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034388" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034389" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03439" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03440" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03441 is Zeitz + "034420" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034421" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034422 till 034426 is in use + "034427" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034428" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034429" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03443 is Weissenfels Sachsen-Anhalt + "034440" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034441 is Hohenmölsen + "034442" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034443 till 034446 is in use + "034447" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034448" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034449" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03445 is Naumburg Saale + "034460" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034461 till 034467 is in use + "034468" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034469" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03447 till 03448 is in use + "034490" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034491 till 034498 is in use + "034499" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 0345 is Halle Saale + // 034600 toll 034607 is in use + "034608" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034609 is Salzmünde + // 03461 till 03462 is in use + "034630" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034631" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034632 till 034633 is in use + "034634" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034635 till 034639 is in use + // 03464 is Sangerhausen + "034650" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034651 till 034654 is in use + "034655" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034656 is Wallhausen Sachsen-Anhalt + "034657" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034658 till 034659 is in use + // 03466 is Artern Unstrut + "034670" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034671 till 034673 is in use + "034674" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034675" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034676" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034677" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034678" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034679" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03468" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "034690" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034691 till 034692 is in use + "034693" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034694" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034695" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034696" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034697" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034698" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034699" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03471 is Bernburg Saale + "034720" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034721 till 034722 is in use + "034723" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034724" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034725" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034726" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034727" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034728" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034729" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 3473 is Aschersleben Sachsen-Anhalt + "034740" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034741 till 034743 is in use + "034744" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034745 till 034746 is in use + "034747" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034748" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034749" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03475 till 03476 is in use + "034770" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034771 till 034776 is in use + "034777" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034778" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034779 is Abberode + "034780" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034781 till 034783 is in use + "034784" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034785 is Sandersleben + "034786" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034787" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034788" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034789" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03479" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0348" | "DE" | false | false + "034900" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034901 is Roßlau Elbe + "034902" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034903 till 034907 + "034908" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034909 is Aken Elbe + // 03491 till 03494 (yes full 03492x is used, too) is in use + "034950" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034951" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034952" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034953 till 034956 + "034957" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034958" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034959" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03496 is Köthen Anhalt + "034970" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034971" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "034972" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034973 is Osternienburg + "034974" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 034975 till 034979 is in use + "03498" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03499" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03501 is Pirna + "035029" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035030" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035031" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035032 till 035033 is in use + "035034" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035035" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035036" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035038" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035038" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035039" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03504 is Dippoldiswalde + "035050" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035051" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035052 till 035058 + "035059" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03506" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03507" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03508" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03509" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0351 is Dresden + // 03520x till 03525 is in use (inclusive complete 03524x) + "035260" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035261" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035262" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035263 till 035268 + "035269" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03527" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03529 till 03529 is in use + "03530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03531 is Finsterwalde + "035320" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035321" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035322 till 035327 + "035328" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035329 is Dollenchen + // 03533 is Elsterwerda + "035340" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035341 till 035343 + "035344" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035345" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035346" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035347" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035348" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035349" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03535 is Herzberg Elster + "035360" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035361 till 035365 is in use + "035366" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035367" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035369" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035369" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03537 is Jessen Elster + "035380" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035381" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035382" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035383 till 035389 is in use + "03539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03541 till 03542 is in use + "035430" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035431" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035432" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035433 till 035436 is in use + "035437" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035438" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035439 is Zinnitz + // 03544 is Luckau Brandenburg + "035450" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035451 till 035456 is in use + "035457" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035458" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035459" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03546 is Lübben Spreewald + "035470" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035471 till 035478 is in use + "035479" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03548" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03549" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0355 is Cottbus + // 03560x till 03564 is in use + "03565" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03566" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03567" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03568" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "035690" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035691 till 035698 is in use + "035699" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03570" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03571 is Hoyerswerda + "035720" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035721" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035722 till 035728 is in use + "035729" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03573 till 03574 is in use + "035750" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035751 till 035756 is in use + "035757" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035758" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035759" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03576 is Weisswasser + "035770" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035771 till 035775 is in use + "035776" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035777" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035778" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035779" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03578 is Kamenz + "035790" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035791" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035792 till 035793 is in use + "035794" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035795 till 035797 is in use + "035798" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035799" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03580" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03581 is Görlitz + // 035820 is Zodel + "035821" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035822 till 035823 is in use + "035824" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035825 till 035829 is in use + // 03583 is Zittau + "035840" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035841 till 035844 is in use + "035845" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035846" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035847" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035848" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035849" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03585 till 03586 is in use + "035870" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035871" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035872 till 035877 is in use + "035878" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035879" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03588 is Niesky + "035890" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035891 till 0358595 is in use + "035896" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035897" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035898" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035899" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03590" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03591 till 03594 (including total 03593x) is in use + "035950" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035951 till 035955 is in use + "035956" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035957" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035958" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035959" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03596 is Neustadt in Sachsen + "035970" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 035971 till 035975 is in use + "035976" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035977" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035978" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "035979" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03598" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03599" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03600" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03601 till 03603 (including total 03602x) is in use + "036040" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036041 till 036043 is in use + "036044" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036045" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036046" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036047" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036048" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036049" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03605 till 03606 is in use + "036070" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036071 till 036072 is in use + "036073" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036074 till 036077 is in use + "036078" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036079" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036080" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036081 till 036085 is in use + "036086" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036087 is Wüstheuterode + "036088" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036089" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03609" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0361 is Erfurt + // 03620x till 03624 is in use + "036250" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036251" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036252 till 036259 is in use + "03626" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03627" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03628 till 03629 is in use + "03630" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03631 till 03632 is in use + // 036330 till 036338 is in use + "036339" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03634 till 03637x is in use + "03638" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03639" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03641 is Jena + "036420" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036421 till 036428 is in use + "036429" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03643 till 03644 is in use + // 036450 till 036454 is in use + "036455" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036456" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036457" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036458 till 036459 is in use + "036460" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036461 till 036465 is in use + "036466" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036467" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036468" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036469" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03647 is Pößneck + "036480" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036481 till 036484 is in use + "036485" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036486" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036487" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036488" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036489" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0365 is Gera + "036600" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036601 till 036608 is in use + "036609" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03661 is Greiz + "036620" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036621 till 036626 is in use + "036627" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036628 is Zeulenroda + "036629" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03663 is Schleiz + // 036640 is Remptendorf + "036641" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036642 till 036649 is in use + "036650" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036651 till 036653 is in use + "036654" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036655" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036656" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036657" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036658" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036659" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03666" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03667" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03668" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "036690" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036691 till 036695 is in use + "036696" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036697" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036698" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036699" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036700" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036701 till 036705 is in use + "036706" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036707" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036708" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036709" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03671 till 03673x is in use + "036740" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036741 till 03644 is in use + "036745" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036746" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036747" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036748" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036749" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03675 is Heubisch + "036760" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036761 till 036762 is in use + "036763" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036764 is Neuhaus-Schierschnitz + "036765" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036766 is SChalkau + "036767" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036768" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036769" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03677 is Ilmenau Thüringen + "036780" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036781 till 036785 is in use + "036786" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036787" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036788" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036789" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03679 is Suhl + "03680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03681 till 03686 (inlcuding total 03684x) is in use + // 036870 till 036871 is in use + "036872" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036873 till 036875 is in use + "036876" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "036877" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036878 is Oberland + "036879" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03690" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 036891 till 03693 (including total 036892x) is in use + // 0368940 till 0368941 is in use + "036942" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 0368943 till 0368949 is in use + // 03695 is Bad Salzungen + "036960" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 036961 till 036969 is in use + "03697" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03698" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03699" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0370" | "DE" | false | false + // 0371 is Chemnitz Sachsen + // 037200 is Wittgensdorf bei Chemnitz + "037201" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037202 till 03724 is in use + "037205" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037206 till 037209 is in use + // 03721 till 03727 is in use + "03728" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "037290" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037291 till 037298 is in use + "037299" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03731 till 03733 (including total 03732x) is in use + "037340" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037341 till 037344 is in use + "037345" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037346 till 037349 is in use + // 03735 till 03737 (including total 03736x) is in use + "037380" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037381 till 037384 is in use + "037385" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037386" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037387" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037388" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037389" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03739" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03741 is Plauen + "037420" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037421 till 037423 is in use + "037424" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037425" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037426" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037427" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037428" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037429" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03473x till 03745 is in use + "037460" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037461" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037462 till 037465 is in use + "037466" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037467 till 037468 is in use + "037469" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03747" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03748" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03749" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0375 is Zwickau + // 03760x till 03765 is in use + "03766" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03767" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03768" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03769" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03770" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03771 till 03774 is in use + "037750" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037751" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037752 is Eibenstock + "037753" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 037754 till 037757 + "037758" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "037759" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03776" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03777" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03778" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03779" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0378" | "DE" | false | false + "0379" | "DE" | false | false + "0380" | "DE" | false | false + // 0381 is Rostock + "038200" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038201 till 038209 + // 03821 till 03822x + "038230" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038231 till 038234 + "038235" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038236" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038237" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038238" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038239" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03824" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03825" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03826" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03827" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03828" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "038290" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038291" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038292 till 038297 is in use + "038298" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038299" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03830x till 03831 is in use + // 038320 till 038328 is in use + "038329" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038330" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 08331 till 038334 is in use + "038335" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038336" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038337" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038338" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038339" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03834 is Greifswald + "038350" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038351 till 038356 is in use + "038357" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038358" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038359" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03836 till 03838 (including total 03837x) is in use + "038390" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038391 till 038393 is in use + "038394" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038395" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038396" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038397" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038398" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038399" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03841 id Neukloster + "038420" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038421" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038422 till 038429 + // 03843 till 03845x is in use + "038460" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038461 till 038462 is in use + "038463" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038464 is Bernitt + "038465" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038466 is Jürgenshagen + "038467" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038468" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038469" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03847 is Sternberg + "038480" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038481 till 038486 is in use + "038487" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038488 is Demen + "038489" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03849" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0385 is Schwerin + // 03860 till 03861 is in use + "03862" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03863 is Crivitz + "03864" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03865 till 03869 is in use + "03870" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03871 till 03872x is in use + "038730" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038731 till 038733 is in use + "038734" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038735 till 038738 is in use + "038739" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03874 till 03877 (including total 03875x) is in use + // 038780 till 038785 is in use + "038786" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038787 till 038789 is in use + "038790" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038791 till 038794 + "038795" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038796 till 038797 + "038798" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038799" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03880" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03881 is Grevesmühlen + "038820" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038821 till 038828 is in use + "038829" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03883 is Hagenow + "038840" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038841 till 038845 is in use + "038846" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038847 till 038848 is in use + "038849" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038850 till 038856 is in use + "038857" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038858 till 038859 is in use + // 03886 is Gadebusch + "038870" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 038871 till 038876 is in use + "038877" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038878" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "038879" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03888" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03889" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0389" | "DE" | false | false + // 03900x till 03905x (including total 03903x) is in use + "039060" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039061 till 039062 is in use + "039063" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039064" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039065" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039066" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039067" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039068" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039069" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03907 till 03909 (including total 03908x) is in use + // 0391 is Magdeburg + // 03920x till 03921 is in use + "039220" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039221 till 039226 is in use + "039227" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039228" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039229" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03923 is Zerbst + "039240" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039241 till 039248 is in use + "0392498" | "DE" | false | true + // 03925 is Stassfurt + "039260" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039261" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039262 till 039268 is in use + "039269" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03927" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03928 is Schönebeck Elbe + "039290" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039291 till 039298 is in use + "039299" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "03930" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03931 is Stendal + // 039320 till 039325 is in use + "039326" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039327 till 039329 is in use + // 03933 is Genthin + "039340" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039341 till 039349 is in use + // 03935 is Tangerhütte + "039360" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039361 till 039366 is in use + "039367" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039368" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039369" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03937 is Osterburg Altmark + "039380" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039381" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039382 till 039384 is in use + "039385" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039386 till 039389 is in use + // total 03939x is in use + // 03940x till 03941 is in use + "039420" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039421 till 039428 is in use + "039429" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03943 till 03944 is in use + "039450" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039451 till 039459 is in use + // 03946 till 03947 is in use + "039480" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039481 till 039485 is in use + "039486" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039487 till 039489 is in use + // 03949 is Oschersleben Bode + // 0395 is Zwiedorf + // 039600 till 039608 is in use + "039609" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03961 till 03969 is in use + "03970" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03971 is Anklam + "039720" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039721 till 039724 is in use + "039725" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039726 till 039728 is in use + "039729" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03973 till 03974x is in use + "039750" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039751 till 039754 is in use + "039755" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039756" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039757" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039758" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039759" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03976 is Torgelow bei Uckermünde + "039770" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039771 till 039779 is in use + "03980" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03981 to 03982x is in use + "039830" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039831 till 039833 is in use + "039834" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039835" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039836" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039837" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039838" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039839" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03984 is Prenzlau + "039850" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039851 till 039859 is in use + "039860" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039861 till 039863 is in use + "039863" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039864" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039865" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039866" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039867" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039868" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039869" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03987 is Templin + "039880" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039881 till 039889 is in use + "03989" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "03990" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 03991 is Waren Müritz + "039920" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039921 till 039929 is in use + "039930" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039931 till 039934 is in use + "039935" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039936" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039937" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039938" | "DE" | false | [false, true, true, true, true, true, true, true, true] + "039939" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03994 is Malchin + "039950" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039951 till 039957 is in use + "039958" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039959 is Dargun + // 03996 is Teterow + "039970" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039971 till 039973 is in use + "039974" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039975 till 039978 + "039979" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 03998 is Demmin + "039990" | "DE" | false | [false, true, true, true, true, true, true, true, true] + // 039991 till 039999 is in use + } + + def "check if original lib fixed isValid for invalid German NDC 040 - 069"(String number, regionCode, expectedResult, expectingFail) { + given: + + String[] numbersToTest = [number + "", + number + "5", + number + "55", + number + "556", + number + "5566", + number + "55667", + number + "556677", + number + "5566778", + number + "55667788"] + + + when: "get number isValid: $number" + Boolean[] results = [] + for (n in numbersToTest) { + def phoneNumber = phoneUtil.parse(n, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + if (expectingFail == true) { + expectingFail = [true, true, true, true, true, true, true, true, true] + } + if (expectingFail == false) { + expectingFail = [false, false, false, false, false, false, false, false, false] + } + + then: "is number expected: $expectedResult" + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail[i], numbersToTest[i], regionCode) + } + + + where: + + number | regionCode | expectedResult | expectingFail + // 040 is Hamburg + "04100" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04101 till 04109 is in use + "0411" | "DE" | false | false + // total 0412x is in use + "04130" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04131 till 04139 is in use + // 04140 till 04144 is in use + "04145" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04146 is Stade-Bützfleth + "04147" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04148 till 04149 is in use + "04150" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04151 till 04156 is in use + "04157" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04158 till 04159 is in use + "04160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04161 till 04169 is in use + "04170" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04171 till 04179 is in use + // total 0418x is in sue + "04190" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04191 till 04195 is in use + "04196" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04197" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04198" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04199" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04201" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04202 till 04209 is in use + // 0421 is Bremen + "04220" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04221 till 04224 is in use + "04225" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04226" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04227" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04228" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04229" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0423x till 0424x is in use + "04250" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04251 till 04258 is in use + "04259" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0426x is in use + "04270" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04271 till 04277 is in use + "04278" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04279" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04280" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04281 till 04289 is in use + "04290" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04291" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04292 till 04298 is in use + "04299" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04300" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04301" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04302 till 04303 is in use + "04304" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04305 is Westensee + "04306" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04307 till 04308 is in use + "04309" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0431 till 0433x (including total 0432x) is in use + // 04340 is Achterwehr + "04341" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04342 till 04346 is in use + "04350" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04351 till 04358 is in use + "04359" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04360" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04361 till 04367 is in use + "04368" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04369" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04370" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04371 till 04372 is in use + "04373" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04374" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04375" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04376" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04377" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04378" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04379" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04381 till 04385 is in use + "04386" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04387" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04388" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04389" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04391" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04392 till 04394 is in use + "04395" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04396" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04397" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04398" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04400" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04401 till 04409 is in use + // 0441 is Oldenburg (Oldb) + "04420" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04421 till 04423 is in use + "04424" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04425 till 04426 is in use + "04427" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04428" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04429" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04431 till 04435 is in use + "04436" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04437" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04438" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04439" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04440" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04441 till 04447 is in use + "04448" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04449" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04450" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04451 till 04456 is in use + "04457" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04458 is Wiefeldstede-Spohle + "04459" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04460" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04461 till 04469 is in use + "04470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04471 till 04475 is in use + "04476" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04477 till 04479 is in use + // total 0448x is in use + "04490" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04491 till 1199 is in use + "04500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04501 till 04506 is in use + "04507" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04508 till 0459 is in use + // 0451 is Lübeck + "04520" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04521 till 04529 is in use + "04530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04531 till 04537 is in use + "04538" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04539 is Westerau + "04540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04541 till 04547 is in use + "04548" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04549" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0455x is in use + "04560" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04561 till 04564 is in use + "0457" | "DE" | false | false + "0458" | "DE" | false | false + "0459" | "DE" | false | false + "04600" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04601" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04602 till 04609 is in use + // 0461 is Flensburg + "04620" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04621 till 04627 is in use + "04628" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04629" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0463x is in use + "04640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04641 till 04644 is in use + "04645" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04646 is Morkirch + "04647" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04648" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04650" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04651 is Sylt + "04652" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04653" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04654" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04655" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04656" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04657" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04658" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04659" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04660" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04661 till 04668 is in use + "04669" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04670" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04671 till 04674 is in use + "04675" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04676" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04677" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04678" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04679" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04681 till 04684 is in use + "04685" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04686" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04687" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04701" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04702 till 04708 is in use + "04709" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0471 is Bremerhaven + "04720" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04721 till 04725 is in use + "04726" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04727" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04728" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04729" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04731 till 04737 is in use + "04738" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04739" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0474x is in use + "04750" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04751 till 04758 is in use + "04759" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04760" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04761 till 04769 is in use + // total 0477x is in use + "0478" | "DE" | false | false + "04790" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04791 till 04796 is in use + "04800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04801" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04802 till 04806 is in use + "04807" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04808" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04809" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0481 is Heide Holstein + "04820" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04821 till 04829 is in use + // 04830 is Süderhastedt + "04831" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04832 till 04839 is in use + "04840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04841 till 04849 os in use + "04850" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04851 till 04859 is in use + "04860" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04861 till 04865 is in use + "04866" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04867" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04868" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04869" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04870" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04871 till 04877 is in use + "04878" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04879" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04880" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04881 till 04885 is in use + "04886" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04887" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04888" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04889" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04890" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04891" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04892 till 04893 is in use + "04894" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04895" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04896" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04897" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04898" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04899" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04900" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04901" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 04902 till 04903 is in use + "04904" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04905" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04906" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04907" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04908" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "04909" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0491 is Leer Ostfriesland + // total 0492x is in use + "04930" | "DE" | false | [false, false, true, false, false, false, false, false, false] + // 04931 till 04936 is in use + "04937" | "DE" | false | [false, false, true, true, false, false, false, false, false] + // 04938 till 04939 is in use + "04940" | "DE" | false | [false, false, true, false, false, false, false, false, false] + // 04941 till 04948 is in use + "04949" | "DE" | false | [false, false, true, true, false, false, false, false, false] + // total 0495x is in use + "04960" | "DE" | false | [false, false, true, true, false, false, false, false, false] + // 04961 till 04968 is in use + "04969" | "DE" | false | [false, false, true, false, false, false, false, false, false] + "04970" | "DE" | false | [false, false, true, true, false, false, false, false, false] + // 04971 till 04977 is in use + "04978" | "DE" | false | [false, false, true, true, false, false, false, false, false] + "04979" | "DE" | false | [false, false, true, true, false, false, false, false, false] + "0498" | "DE" | false | false + "0499" | "DE" | false | false + "0500" | "DE" | false | false + "0501" | "DE" | false | false + "05020" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05021 till 05028 is in use + "05029" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05030" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05031 till 05037 is in use + "05038" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05039" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05040" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05041 till 05045 is in use + "05046" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05047" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05048" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05049" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05050" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05051 till 05056 is in use + "05057" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05058" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05058" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05060 is Bodenburg + "05061" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05062 till 05069 is in use + "05070" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05071 till 05074 is in use + "05075" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05076" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05077" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05078" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05079" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05080" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05081" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05082 till 05086 is in use + "05087" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05088" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05089" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0509" | "DE" | false | false + "05100" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05101 till 05103 is in use + "05104" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05105 is Barsinghausen + "05106" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05107" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05108 till 05109 is in use + // 0511 is Hannover + "05120" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05121 is Hildesheim + "05122" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05123 is Schellerten + "05124" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05125" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05126 till 05129 is in use + // 05130 till 05132 is in use + "05133" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05134" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05135 till 05139 is in use + "05140" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05141 till 05149 is in use + "05150" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05151 till 05159 is in use + "05160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05161 till 05168 is in use + "05169" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05170" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05171 till 05177 is in use + "05178" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05179" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05180" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05181 till 05187 is in use + "05188" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05189" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0519x is in use + "05200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05201 till 05209 is in use + // 0521 is Bielefeld + "05220" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05221 till 05226 is in use + "05227" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05228 is Vlotho-Exter + "05229" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05230" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05231 till 05238 is in use + "05239" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05240" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05241 till 0522 is in use + "05243" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05244 till 05248 is in use + "05249" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05250 till 05255 is in use + "05256" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05257 till 05259 is in use + "05260" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05261 till 05266 is in use + "05267" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05268" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05269" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05270" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05271 till 05278 is in use + "05279" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05280" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05281 till 05286 is in use + "05287" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05288" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05289" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05290" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05291" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05292 till 05295 is in use + "05296" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05297" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05298" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05299" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0530x is in use + // 0531 is Braunschweig + // total 0532x is in use + "05330" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05331 till 05337 is in use + "05338" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05339 is Gielde + "05340" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05341 is Salzgitter + "05342" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05343" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05344 till 05347 is in use + "05348" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05349" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05350" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05351 till 05358 is in use + "05359" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05360" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05361 till 05368 is in use + "05369" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05370" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05371 till 05379 is in use + "05380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05381 till 05384 is in use + "05385" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05386" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05387" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05388" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05389" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0539" | "DE" | false | false + "05400" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05401 till 05407 is in use + "05408" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05409 is Hilter am Teutoburger Wald + // 0541 Osnabrück + "05420" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05421 till 05429 is in use + "05430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05431 till 05439 is in use + "05440" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05441 till 05448 is in use + "05449" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05450" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05451 till 05459 is in use + "05460" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05461 till 05462 is in use + "05463" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05464 till 05468 is in use + "05469" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05471 till 05476 is in use + "05477" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05478" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05479" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05480" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05481 till 05485 is in use + "05486" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05487" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05488" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05489" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05490" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05491 till 05495 is in use + "05496" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05497" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05498" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05499" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05501" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05502 till 05509 is in use + // 0551 is Göttingen + // 05520 till 05525 is in use + "05526" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05527 till 05529 is in use + "05530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05531 till 05536 is in use + "05537" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05538" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05541 till 05546 is in use + "05547" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05548" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05549" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05550" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05551 till 05556 is in use + "05557" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05558" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05559" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05560" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05561 till 05565 is in use + "05566" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05567" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05568" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05569" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05570" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05571 till 05574 is in use + "05575" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05576" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05577" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05578" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05579" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05580" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05581" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05582 till 05586 is in use + "05587" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05588" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05589" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05590" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05591" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05592 till 05594 is in use + "05595" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05596" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05597" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05598" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05599" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05600" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05601 till 05609 is in use + // 0561 is Kassel + "05620" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05621 till 05626 is in use + "05627" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05628" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05629" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05630" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05631 till 05636 is in use + "05637" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05638" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05639" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05641 till 05648 is in use + "05649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0565x is in use + "05660" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05661 till 05665 is in use + "05666" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05667" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05668" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05669" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05670" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05671 till 05677 is in use + "05678" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05679" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05681 till 05686 + "05687" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05690" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05691 till 05696 is in use + "05697" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05698" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05699" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05701" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05702 till 05707 is in use + "05708" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05709" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0571 is Minden Westfalen + "05720" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05721 till 05726 is in use + "05727" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05728" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05729" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05731 till 05734 is in use + "05735" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05736" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05737" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05738" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05739" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05741 till 05746 is in use + "05747" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05748" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05749" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05750" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05751 till 05755 is in use + "05756" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05757" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05758" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05759" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05760" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05761 is Stolzenau + "05762" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05763 till 05769 is in use + "05770" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05771 till 05777 is in use + "05778" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05779" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0578" | "DE" | false | false + "0579" | "DE" | false | false + "05800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05801" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05802 till 05808 is in use + "05809" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0581 is Uelzen + // total 0582x is in use + "05830" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05831 till 05839 is in use + // 05840 till 05846 is in use + "05847" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05848 till 05849 is in use + // 05850 till 05855 is in use + "05856" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05857 till 05859 is in use + "05860" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05861 till 05865 is in use + "05866" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05867" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05868" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05869" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05870" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05871" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 5872 till 5875 is in use + "05876" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05877" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05878" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05879" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05880" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05881" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05882 till 05883 is in use + "05884" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05885" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05886" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05887" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05888" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05889" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0589" | "DE" | false | false + "05900" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05901 till 05909 is in use + // 0591 is Lingen (ems) + "05920" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05921 till 05926 is in use + "05927" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05928" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05929" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05930" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05931 till 05937 is in use + "05938" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05939 is Sustrum + "05940" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05941 till 05948 is in use + "05949" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05950" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05951 till 05957 is in use + "05958" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05959" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05960" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05961 till 05966 is in use + "05967" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05968" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05969" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "05970" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05971 is Rheine + "05972" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05973 is Neuenkirchen Kreis Steinfurt + "05974" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 05975 till 05978 is in use + "05979" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0598" | "DE" | false | false + "0599" | "DE" | false | false + "06000" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06001" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06002 till 06004 is in use + "06005" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06006" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06007 till 06008 is in use + "06009" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0601" | "DE" | false | false + // 06020 till 06024 is in use + "06025" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06026 till 06029 is in use + "06030" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06031 till 06036 is in use + "06037" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06038" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06039 is Karben + "06040" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06041 till 06049 is in use + // total 0605x is in use + "06060" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06061 till 06063 is in use + "06064" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06065" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06066 is Michelstadt-Vielbrunn + "06067" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06068 is Beerfelden + "06070" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06071 is Dieburg + "06072" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06073 till 06074 is in use + "06075" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06076" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06077" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06078 is Gross-Umstadt + "06079" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06080" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06081 till 06087 is in use + "06088" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06089" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06090" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06091" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06092 till 06096 is in use + "06097" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06098" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06099" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06100" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06101 till 06109 is in use + // 0611 is Wiesbaden + // 06120 is Aarbergen + "06121" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06122 till 06124 is in use + "06125" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06126 till 06129 is in use + // 06130 till 06136 is in use + "06137" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06138 till 06139 is in use + "06140" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06141" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06142 is Rüsselsheim + "06143" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06144 till 06147 is in use + "06148" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06149" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06150 till 06152 is in use + "06153" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06154 till 06155 is in use + "06156" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06157 till 06159 is in use + "06160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06161 till 06167 is in use + "06168" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06169" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06170" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06171 till 06175 is in use + "06176" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06177" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06178" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06179" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06180" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06181 till 06188 is in use + "06189" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06190 is Hattersheim am Main + "06191" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06192 is Hofheim am Taunus + "06193" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06194" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06195 till 06196 is in use + "06197" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06198 is Eppstein + "06199" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06201 till 06207 is in use + "06208" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06209 is Mörlenbach + // 0621 is Mannheim + // 06220 till 06224 is in use + "06225" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06226 till 06229 is in use + "06230" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06231 till 06239 is in use + "06240" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06241 till 06247 is in use + "06248" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06249 is Guntersblum + "06250" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06251 till 06258 is in use + "06259" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06260" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06261 till 06269 is in use + "06270" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06271 till 06272 is in use + "06273" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06274 till 06276 is in use + "06277" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06278" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06279" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06280" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06281 till 06287 is in use + "06288" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06289" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06290" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06291 till 06298 is in use + "06299" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06300" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06301 till 06308 is in use + "06309" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0631 is Kauserslautern + "06320" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06321 till 06329 is in use + "06330" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06331 till 06339 is in use + // total 0634x is in use + "06350" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06351 till 06353 is in use + "06354" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06355 till 06359 is in use + "06360" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06361 till 06364 is in use + "06365" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06366" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06367" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06368" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06369" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06370" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06371 till 06375 is in use + "06376" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06377" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06378" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06379" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06381 till 06837 is in use + "06388" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06389" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06391 till 06398 is in use + "06399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0640x till 0642x is in use + // 06431 till 06436 is in use + "06437" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06438 till 06439 is in use + // total 0644x is in use + "06450" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06451 till 06458 is in use + "06459" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06460" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06461 till 06462 is in use + "06463" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06464 till 06468 is in use + "06469" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06471 till 06479 is in use + "06480" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06481" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06482 till 06486 is in use + "06487" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06488" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06489" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0649" | "DE" | false | false + // 0650x till 0651 is in use + "06520" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06521" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06522 till 06527 is in use + "06528" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06529" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06531 till 06536 is in use + "06537" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06538" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06541 till 06545 is in use + "06546" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06547" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06548" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06549" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0655x is in use + "06560" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06561 till 06569 is in use + "06570" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06571 till 06575 is in use + "06576" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06577" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06578 is Salmtal + "06579" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0658x is in use + "06590" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06591 till 06597 is in use + "06598" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06599 is Wiedenbach bei Gerolstein + "0660" | "DE" | false | false + // 0661 till 0662x is in use + // 06630 till 06631 is in use + "06632" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06633 till 06639 is in use + "06640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06641 till 06648 is in use + "06649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0665x is in use + // 06660 till 06661 is in use + "06662" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06663 till 06669 is in use + // 06670 is Ludwigsau Hessen + "06671" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06672 till 06678 is in use + "06679" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06681 till 06684 is in use + "06685" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06686" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06687" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06690" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06691 till 06698 is in use + "06699" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06701 is Sprendlingen Rheinhessen + "06702" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06703 till 06704 is in use + "06705" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06706 till 06709 is in use + // 0671 is Bad Kreuznach + "06720" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06721 till 06728 is in use + "06729" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06731 till 06737 is in use + "06738" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06739" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06741 till 06747 is in use + "06748" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06749" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06750" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06751 till 06758 is in use + "06759" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06760" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06761 till 06766 is in use + "06767" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06768" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06769" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06770" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06771 till 06776 is in use + "06777" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06778" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06779" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06780" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06781 to 06789 is in use + "0679" | "DE" | false | false + "06800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06801" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06802 till 06806 is in use + "06807" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06808" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06809 is Grossrosseln + // 0681 is Saarbrücken + "06820" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06821 is Neunkirchen Saar + "06822" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06823" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06824 till 06827 is in use + "06828" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06829" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06830" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06831 till 06838 is in use + "06839" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06841 till 06844 is in use + "06845" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06846" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06847" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06848 till 06849 is in use + "06850" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06851 till 06858 is in use + "06859" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06860" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06861 is Merzig + "06862" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06863" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06864 till 06869 is in use + "06870" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06871 till 06876 is in use + "06877" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06878" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06879" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06880" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06881 is Lebach + "06882" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06883" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06884" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06885" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06886" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06887 rill 06888 is in use + "06889" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06890" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06891" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06892" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06893 till 06894 is in use + "06895" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "06896" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 06897 till 06898 is in use + "06899" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 069 is Frankfurt am Mai } + def "check if original lib fixed isValid for invalid German NDC 0700 - 0999"(String number, regionCode, expectedResult, expectingFail) { + given: + + String[] numbersToTest = [number + "", + number + "5", + number + "55", + number + "556", + number + "5566", + number + "55667", + number + "556677", + number + "5566778", + number + "55667788"] + + + when: "get number isValid: $number" + Boolean[] results = [] + for (n in numbersToTest) { + def phoneNumber = phoneUtil.parse(n, regionCode) + results += phoneUtil.isValidNumber(phoneNumber) + } + + if (expectingFail == true) { + expectingFail = [true, true, true, true, true, true, true, true, true] + } + + if (expectingFail == false) { + expectingFail = [false, false, false, false, false, false, false, false, false] + } + + then: "is number expected: $expectedResult" + for (int i = 0; i < results.length; i++) { + this.logResult(results[i], expectedResult, expectingFail[i], numbersToTest[i], regionCode) + } + + where: + + number | regionCode | expectedResult | expectingFail + // --- + // 0700 is checked in personal number 0700 see above + // --- + "0701" | "DE" | false | false + "07020" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 7021 till 7026 is in use + "07027" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07028" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07029" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07030" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07031 till 07034 is in use + "07035" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07036" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07037" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07038" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07039" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07040" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07041 till 07046 is in use + "07047" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07048" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07049" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07050" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07051 till 07056 is in use + "07057" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07058" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07059" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07060" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07061" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07062 till 07063 is in use + "07064" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07065" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07066 is Bad Rappenau-Bonfeld + "07067" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07068" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07069" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07070" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07071 till 07073 is in use + "07074" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07075" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07076" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07077" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07078" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07079" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07080" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07081 till 07085 is in use + "07086" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07087" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07088" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07089" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0709" | "DE" | false | false + "0710" | "DE" | false | false + // 0711 is Stuttgart + "07120" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07121 till 07129 is in use + // 07130 till 07136 is in use + "07137" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07138 till 07139 is in use + "07140" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07141 till 07148 is in use + "07149" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07150" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07150 till 07154 is in use + "07155" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07156 till 07159 is in use + "07160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07161 till 07166 is in use + "07167" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07168" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07169" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07170" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07171 till 07176 is in use + "07177" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07178" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07179" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07180" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07181 till 07184 is in use + "07185" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07186" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07187" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07188" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07189" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07190" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07191 till 07195 + "07196" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07197" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07198" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07199" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07201" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07202 till 07204 is in use + "07205" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07206" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07207" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07208" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07209" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0721 is Karlsbad + // total 0722x is in use + "07230" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07231 till 07237 is in use + "07238" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07239" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07240 is Pfinztal + "07241" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07242 till 07249 is in use + // 0725x till 0726x is in use + "07270" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07271 till 07277 is in use + "07278" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07279" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0728" | "DE" | false | false + "0729" | "DE" | false | false + // 07300 is Roggenburg + "07301" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0732 till 0739 is in use + // 0731 is Ulm Donau + "07320" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07321 till 07329 is in use + "07330" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07331 till 07337 is in use + "07338" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07339" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07340 is Neenstetten + "07341" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07342" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07343 till 07348 is in use + "07349" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07350" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07351 till 07358 is in use + "07359" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07360" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07361 till 07367 is in use + "07368" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07369" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07370" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07371 is Riedlingen Württemberg + "07372" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07373 till 07376 is in use + "07377" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07378" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07379" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07381 till 07389 is in use + "07390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07391 till 07395 is in use + "07396" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07397" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07398" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07400" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07401" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07402 till 07404 is in use + "07405" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07406" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07407" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07408" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07409" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0741 is Deisslingen + // 07420 is Schramberg + // 07421 till 07429 is in use + "07430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07431 till 07436 is in use + "07437" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07438" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07439" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0744x is in use + "07450" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07451 till 07459 is in use + "07460" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07461 till 07467 is in use + "07468" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07469" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07471 till 07478 is in use + "07479" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07480" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07481" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07482 till 07486 is in use + "07487" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07488" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07489" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0749" | "DE" | false | false + "07500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07501" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07502 till 07506 is in use + "07507" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07508" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07509" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0751 Ravensburg + // 07520 is Bodnegg + "07521" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07522 is Wangen im Allgäu + "07523" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07524 till 07525 is in use + "07526" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07527 till 07529 is in use + "07530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07531 till 07534 is in use + "07535" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07536" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07537" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07538" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07541 till 07546 is in use + "07547" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07548" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07549" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07550" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07551 till 07558 is in use + "07559" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07560" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07561 till 07569 is in use + // total 0757x is in use + "07580" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07581 till 07587 is in use + "07588" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07589" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0759" | "DE" | false | false + "07600" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07601" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07602 is Oberried Breisgau + "07603" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07604" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07605" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07606" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07607" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07608" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07609" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0761 Freiburg im Breisgau + // total 0762x is in use + "07630" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07631 till 07636 is in use + "07637" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07638" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07639" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07641 till 07646 + "07647" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07648" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07650" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07651 till 07657 is in use + "07658" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07659" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0766x is in use + "07670" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07671 till 07676 is in use + "07677" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07678" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07679" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 076781 till 07685 is in use + "07686" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07687" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0769" | "DE" | false | false + "07700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07701" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07702 till 07709 is in use + // 0771 is Donaueschingen + // total 0772x is in use + "07730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07731 till 07736 is in use + "07737" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07738 till 07339 is in use + "07740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07741 till 07748 is in use + "07749" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07750" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07751 is Waldshut + "07752" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07753 till 07755 is in use + "07756" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07757" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07758" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07759" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07770" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07771 is Stockach + "07772" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07773 till 07775 is in use + "07776" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07777 is Sauldorf + "07778" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07779" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0778" | "DE" | false | false + "0779" | "DE" | false | false + "07800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07801" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07802 till 07808 is in use + "07809" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0781 is Offenburg + "07820" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07821 till 07826 is in use + "07827" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07828" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07829" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07830" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07831 till 07839 is in use + "07840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07841 till 07844 is in use + "07845" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07846" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07847" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07848" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07849" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07850" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07851 till 07854 is in use + "07855" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07856" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07857" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07858" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07859" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0786" | "DE" | false | false + "0787" | "DE" | false | false + "0788" | "DE" | false | false + "0789" | "DE" | false | false + "07900" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07901" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07902" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07903 till 07907 is in use + "07908" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07909" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0791 is Schwäbisch Hall + "0792" | "DE" | false | false + // total 0793x till 0794x is in use + // 07950 till 07955 is in use + "07956" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07957 till 07959 is in use + "07960" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07961 till 07967 is in use + "07968" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07969" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07970" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 07971 till 07977 is in use + "07978" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "07979" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0798" | "DE" | false | false + "0799" | "DE" | false | false + // --- + // 0800 is checked with free call 800 range see above + // --- + "0801" | "DE" | false | false + // total 0802x is in use + "08030" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08031 till 08036 is in use + "08037" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08038 till 08039 is in use + "08040" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08041 till 08043 is in use + "08044" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08045 till 08046 is in use + "08047" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08048" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08049" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08050" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08051 till 08057 is in use + "08058" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08059" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08060" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08061 till 08067 is in use + "08068" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08069" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08070" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08071 till 08076 is in use + "08077" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08078" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08079" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08080" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08081 till 08086 is in use + "08087" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08088" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08089" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08090" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08091 till 08095 is in use + "08096" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08097" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08098" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08099" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08100" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08101" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08102 is Höhenkirchen-Siegertsbrunn + "08103" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08104 till 08106 is in use + "08107" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08108" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08109" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0811 is Halbergmoos + "08120" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08121 till 08124 is in use + "08125" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08126" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08127" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08128" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08129" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08130" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08131 is Dachau + "08132" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08133 till 08139 is in use + "08140" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08141 till 08146 is in use + "08147" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08148" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08149" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08150" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08151 till 08153 is in use + "08154" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08155" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08156" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08157 till 08158 is in use + "08159" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08161 is Freising + "08162" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08163" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08164" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08165 till 08168 is in use + "08169" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08170 till 08171 is in use + "08172" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08173" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08174" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08175" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08176 till 08179 is in use + "0818" | "DE" | false | false + "08190" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08191 till 08196 is in use + "08197" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08198" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08199" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08201" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08202 till 08208 is in use + "08209" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0821 is Augsburg + "08220" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08221 till 08226 is in use + "08227" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08228" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08229" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08230 till 08234 is in use + "08235" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08236 till 08239 is in use + "08240" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08241 is Buchloe + "08242" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08243 is Fuchstal + "08244" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08245 till 08249 is in use + // 08250 till 08254 is in use + "08255" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08256" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08257 till 08259 is in use + "08260" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08261 till 08263 is in use + "08264" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08265 till 08269 is in use + "08270" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08271 till 08274 is in use + "08275" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08276 is Baar Schwaben + "08277" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08278" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08279" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08280" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08281 till 08285 is in use + "08286" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08287" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08288" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08289" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08290" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08291 till 08296 is in use + "08297" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08298" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08299" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08300" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08301" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08302 till 08304 is in use + "08305" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08306 is Ronsberg + "08307" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08308" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08309" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0831 is Kempten Allgäu + // 08320 till 08328 is in use + "08329" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08330 till 08338 is in use + "08339" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0834x is in use + "0835" | "DE" | false | false + "08360" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08361 till 08369 is in use + // 08370 is Obergünzburg + "08371" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08372 till 08379 is in use + // total 0838x is in use + "08390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08391" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08392 till 08395 is in use + "08396" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08397" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08398" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08400" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08401" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08402 till 08407 is in use + "08408" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08409" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0841 is Ingolstadt Donau + "08420" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08421 till 08424 is in use + "08425" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08426 till 08427 is in use + "08428" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08429" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08431 till 08435 is in use + "08436" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08437" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08438" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08439" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08440" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08441 till 08446 is in use + "08447" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08448" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08449" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08450 is Ingoldstadt-Zuchering + "08451" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08452 till 08454 is in use + "08455" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08456 till 08459 is in use + // total 0846x is in use + "0847" | "DE" | false | false + "0848" | "DE" | false | false + "0849" | "DE" | false | false + "08500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08501 till 08507 is in use + "08508" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08509 is Ruderting + // 0851 is Passau + "0852" | "DE" | false | false + "08530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08531 till 08538 is in use + "08539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08541 till 08549 is in use + // 08550 till 08558 is in use + "08559" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08560" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08561 till 08565 is in use + "08566" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08567" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08568" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08569" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08570" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08571 till 08574 is in use + "08575" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08576" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08577" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08578" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08579" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08580" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08581 till 08586 is in use + "08587" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08588" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08589" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08590" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08591 till 08593 is in use + "08594" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08595" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08596" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08597" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08598" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08599" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0860" | "DE" | false | false + // 0861 is Traunstein + "08620" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08621 till 08624 is in use + "08625" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08626" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08627" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08628 till 08629 is in use + // 08630 till 08631 is in use + "08632" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08633 till 08639 is in use + // 08640 till 08642 is in use + "08643" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08644" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08645" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08646" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08647" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08648" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08649 is Schleching + // 08650 till 08652 is in use + "08653" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08654 Freilassing + "08655" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08656 till 08657 is in use + "08658" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08659" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08660" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08661 till 08667 is in use + "08668" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08669 is Traunreut + // 08670 till 08671 is in use + "08672" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08673" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08674" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08675" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08676" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08677 till 086779 is in use + "08680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08681 till 08687 is in use + "08688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0869" | "DE" | false | false + "08700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08701" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08702 till 08709 is in use + // 0871 is Landshut + "08720" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08721 till 08728 is in use + "08729" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08731 till 08735 is in use + "08736" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08737" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08738" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08739" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08741 till 08745 is in use + "08746" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08747" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08748" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08749" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08750" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08751 till 08754 is in use + "08755" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08756 is Nandlstadt + "08757" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08758" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08759" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08760" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08761 till 08762 is in use + "08763" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08764 till 08766 is in use + "08767" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08768" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08769" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08770" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08771 till 08774 is in use + "08775" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08776" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08777" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08778" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08779" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08780" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08781 till 08785 is in use + "08786" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08787" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08788" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08789" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0879" | "DE" | false | false + "08800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08801 till 08803 is in use + "08804" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08805 till 08809 is in use + // 0881 is Weilheim in Oberbayern + "08820" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08821 till 08826 is in use + "08827" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08828" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08829" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0883" | "DE" | false | false + "08840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08841 is Murnau am Staffelsee + "08842" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08843" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08844" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08845 till 08847 is in use + "08848" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08849" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08850" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08851 is Kochel am See + "08852" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08853" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08854" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08855" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08856 till 08858 is in use + "08859" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08860 till 08862 is in use + "08863" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08864" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08865" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "08866" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 08867 till 08869 is in use + "0887" | "DE" | false | false + "0888" | "DE" | false | false + "0889" | "DE" | false | false + // 089 is München + // --- + // TODO start: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service + "09000" | "DE" | false | false + // 09001 Information Service checked in 0900 range test + "09002" | "DE" | false | false + // 09003 Entertainment Service checked in 0900 range test + "09004" | "DE" | false | false + // 09005 other premium services checked in 0900 range test + "09006" | "DE" | false | false + "09007" | "DE" | false | false + "09008" | "DE" | false | false + // TODO end: by Dec 1st of 2024 the ranges 9000 till 09008 will be possible for premium service + // --- + "09009" | "DE" | false | [false, false, false, false, false, false, false, true, false] // see https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Nummerierung/09009/9009_node.html removed block + "0901" | "DE" | false | false + "0902" | "DE" | false | false + "0903" | "DE" | false | false + "0904" | "DE" | false | false + "0905" | "DE" | false | false + // 0906 is Donauwörth + // 09070 till 09078 is in use + "09079" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0908x is in use + // 09090 till 0904 is in use + "09095" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09096" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09097 is Marxheim + "09098" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09099 is Kaisheim + "09100" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09101 till 09107 is in use + "09108" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09109" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0911 is Nürnberg + // 09120 is Leinburg + "09121" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09122 till 09123 is in use + "09124" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09125" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09126 till 09129 is in use + "09130" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09131 till 09135 is in use + "09136" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09137" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09138" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09139" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09140" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09141 till 09149 is in use + "09150" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09151 till 09158 is in use + "09159" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09160" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09161 till 09167 is in use + "09168" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09169" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0917x till 0919x is in use + "09200" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09201 till 09209 is in use + // 0921 is Bayreuth + // 09220 till 09223 is in use + "09224" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09225 is Stadtsteinach + "09226" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09227 till 09229 is in use + "09230" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09231 till 09236 is in use + "09237" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09238 is Röslau + "09239" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09240" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09241 till 09246 is in use + "09247" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09248" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09249" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09250" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09251 till 09257 is in use + "09258" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09259" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0926x till 0928x is in use + "09290" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09291" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09292 till 09295 is in use + "09296" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09297" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09298" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09300" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09301" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09302 till 09303 is in use + "09304" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09305 till 09307 is in use + "09308" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09309" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0931 is Würzburg + "09320" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09321 is Kitzingen + "09322" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09323 till 09326 is in use + "09327" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09328" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09329" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09330" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09331 till 09339 is in use + // 0934x till 0935x is in use + // 09360 is Thüngen + "09361" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09362" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09363 till 09367 is in use + "09368" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09369 is Uettingen + "09370" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09371 till 09378 is in use + "09379" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09380" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09381 till 09386 is in use + "09387" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09388" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09389" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09390" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09391 till 09398 is in use + "09399" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09400" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09401 till 09409 is in use + // 0941 is Regensburg + // 09420 till 09424 is in use + "09425" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09426 till 09429 is in use + "09430" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09431 is Schwandorf + "09432" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09433 till 09436 is in use + "09437" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09438 till 09439 is in use + "09440" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09441 till 09448 is in use + "09449" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09450" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09451 till 09454 is in use + "09455" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09456" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09457" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09458" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09459" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09460" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09461 till 09649 is in use + "09470" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09471 till 09474 is in use + "09475" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09476" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09477" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09478" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09479" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09480 till 09482 is in use + "09483" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09484 is Brennberg + "09485" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09486" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09487" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09488" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09489" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09490" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09491 till 09493 is in use + "09494" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09495 is Breitenbrunn Oberfalz + "09496" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09497 till 09499 is in use + "09500" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09501" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09502 till 09505 is in use + "09506" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09507" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09508" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09509" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0951 is Bamberg + "09520" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09521 till 09529 is in use + "09530" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09531 till 09536 is in use + "09537" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09538" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09539" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09540" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09541" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09542 till 09549 is in use + "09550" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09551 till 09556 is in use + "09557" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09558" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09559" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // total 0956x is in use + "09570" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09571 till 09576 is in use + "09577" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09578" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09579" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0958" | "DE" | false | false + "0959" | "DE" | false | false + "09600" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09601" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09602 till 09608 is in use + "09609" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0961 is Weiden in der Oberfalz + "09620" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09621 till 09622 is in use + "09623" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09624 till 09628 is in use + "09629" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09630" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09631 till 09639 is in use + "09640" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09641 till 09648 is in use + "09649" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09650" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09651 till 09659 is in use + "09660" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09661 till 09666 is in use + "09667" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09668" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09669" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09670" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09671 till 09677 is in use + "09678" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09679" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09680" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09681 till 09683 is in use + "09684" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09685" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09686" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09687" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09688" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09689" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0969" | "DE" | false | false + "09700" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09701 is Sandberg Unterfranken + "09702" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09703" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09704 is Euerdorf + "09705" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09706" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09707" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09708 is Bad Bocklet + // total 0972x is in use + "09730" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09731" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09732 till 09738 is in use + "09739" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09740" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09741 till 09742 is in use + "09743" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09744 till 09749 is in use + "0975" | "DE" | false | false + "09760" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09761 till 09766 is in use + "09767" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09768" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09769" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09770" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09771 till 09779 is in use + "0978" | "DE" | false | false + "0979" | "DE" | false | false + "09800" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09801" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09802 till 09805 + "09806" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09807" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09808" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09809" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0981 is Ansbach + // 09820 is Lehrberg + "09821" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09822 till 09829 is in use + "09830" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09831 till 09837 s in use + "09838" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09839" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09840" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09841 till 09848 is in use + "09849" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09850" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09851 till 09857 is in use + "09858" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09859" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09860" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09861 is Rothenburg ob der Tauber + "09862" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09863" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09864" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09865 is Adelshofen Mittelfranken + "09866" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09867 till 09869 is in use + "09870" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09871 till 09876 is in use + "09877" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09878" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09879" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0988" | "DE" | false | false + "0989" | "DE" | false | false + "09900" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09901 is Hengersberg Bayern + "09902" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09903 till 09908 is in use + "09909" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 0991 is Deggendorf + // total 0992x is in use + "09930" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09931 till 09933 is in use + "09934" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09935 till 09938 is in use + "09939" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09940" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09941 till 09948 is in use + "09949" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09950" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09951 till 09956 is in use + "09957" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09958" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09959" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09960" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09961 till 09966 is in use + "09967" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09968" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09969" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "09970" | "DE" | false | [false, false, true, true, true, true, true, true, true] + // 09971 till 09978 is in use + "09979" | "DE" | false | [false, false, true, true, true, true, true, true, true] + "0998" | "DE" | false | false + "0999" | "DE" | false | false + } } \ No newline at end of file From cb2fc705179d37bc8cf03c2c5aaf5178174baa29 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Sun, 28 Apr 2024 17:50:19 +0200 Subject: [PATCH 134/135] Optimizing PhoneNumberValidationResult definition --- .../PhoneNumberValidationResult.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java index 6154965..c108a3d 100644 --- a/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java +++ b/src/main/java/de/telekom/phonenumbernormalizer/numberplans/PhoneNumberValidationResult.java @@ -43,55 +43,68 @@ public enum PhoneNumberValidationResult { /** The number length matches that of valid numbers for this region or used NDC without any identified calling * restrictions. */ IS_POSSIBLE(ValidationResult.IS_POSSIBLE), + /** * The number length/pattern matches that of local numbers for this region only (i.e. numbers that may * be able to be dialled within an area, but does not have all the information e.g. NDC or is not allowed to be * dialled from anywhere inside or outside the country). */ IS_POSSIBLE_LOCAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** * The number length/pattern matches that of national numbers for this region only (i.e. numbers that may * be able to be dialled within an area or the region itself, but is not allowed to be dialled from * anywhere outside the country using CC). */ IS_POSSIBLE_NATIONAL_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** * The number length/pattern matches that of international number for this region only (i.e. number is not allowed * to be call from within the region, even if CC of the regions is used). */ IS_POSSIBLE_INTERNATIONAL_ONLY(ValidationResult.IS_POSSIBLE), + /** * The number length/pattern matches that of national VPN number for this region only (i.e. number is only allowed * to be call from other numbers of same VPN within this region and not by users of the public telephony network). */ IS_POSSIBLE_NATIONAL_VPN_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** * The number length/pattern matches that of VPN number for this region only (i.e. number is only allowed to be call * from other numbers of same VPN even internationally but not by users of the public telephony network). */ IS_POSSIBLE_VPN_ONLY(ValidationResult.IS_POSSIBLE), + /** * The number length/pattern matches that of national operator traffic control numbers for this region only * (i.e. number is only allowed to be call between national operators for call routing and not directly by users of * the public telephony network). */ IS_POSSIBLE_NATIONAL_OPERATOR_ONLY(ValidationResult.IS_POSSIBLE_LOCAL_ONLY), + /** * The number length/pattern matches that of operator traffic control numbers for this region only (i.e. number is * only allowed to be call between operators for call routing and not directly by users of the public telephony * network). */ IS_POSSIBLE_OPERATOR_ONLY(ValidationResult.IS_POSSIBLE), + /** The number has an invalid international dialing prefix (aka IDP) for this region. */ INVALID_INTERNATIONAL_DIALING_PREFIX(ValidationResult.INVALID_LENGTH), - /** The number has an invalid national destination code (aka NDC) for this region. */ + + /** The number has an invalid country calling code (aka CC). */ INVALID_COUNTRY_CODE(ValidationResult.INVALID_COUNTRY_CODE), + /** The number has an invalid national access code (aka NAC). */ INVALID_NATIONAL_ACCESS_CODE(ValidationResult.INVALID_LENGTH), - /** The number has an invalid country calling code (aka CC). */ + + /** The number has an invalid national destination code (aka NDC) for this region. */ INVALID_NATIONAL_DESTINATION_CODE(ValidationResult.INVALID_LENGTH), + /** The number is shorter than all valid numbers for this region or used NDC. */ TOO_SHORT(ValidationResult.TOO_SHORT), + /** * The number is longer than the shortest valid numbers for this region or used NDC, shorter than the * longest valid numbers for this region or used NDC, and does not itself have a number length that matches @@ -100,8 +113,10 @@ public enum PhoneNumberValidationResult { * for this region or used NDC while none of the other INVALID values would match. */ INVALID_LENGTH(ValidationResult.INVALID_LENGTH), + /** The number is longer than all valid numbers for this region, or for the used NDC. */ TOO_LONG(ValidationResult.TOO_LONG), + /** The number is matching a drama number range, which simulates valid number for this region only used in movies or * other fictional story telling. */ INVALID_DRAMA_NUMBER(ValidationResult.INVALID_LENGTH); @@ -143,4 +158,16 @@ public boolean isSomeHowValid() { || (this == IS_POSSIBLE_OPERATOR_ONLY)); } + /** + * Returns if the validation result identifies a possible number regardless of calling limitations + * @return boolean true for any IS_POSSIBLE(_xxx) enum value except ending with _OPERATOR_ONLY or _VPN_ONLY + */ + public boolean isPubliclyValid() { + return ( (this == IS_POSSIBLE) + || (this == IS_POSSIBLE_LOCAL_ONLY) + || (this == IS_POSSIBLE_NATIONAL_ONLY) + || (this == IS_POSSIBLE_INTERNATIONAL_ONLY)); + + } + } From 8f95b036786a16ee853cfdc781b07691a50d58c4 Mon Sep 17 00:00:00 2001 From: Emil Thies Date: Mon, 29 Apr 2024 17:42:44 +0200 Subject: [PATCH 135/135] Logging for testing --- pom.xml | 4 ++-- .../PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy | 8 +++----- .../PhoneNumberUtil/IsValidNumberTest.groovy | 7 +++---- .../PhoneNumberUtil/NormalizationTest.groovy | 7 ++++--- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index d3686e1..bc30c2b 100644 --- a/pom.xml +++ b/pom.xml @@ -139,14 +139,14 @@ 1.3.2 - + com.googlecode.libphonenumber geocoder diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy index 7525ce2..fb78f75 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsPossibleNumberWithReasonTest.groovy @@ -18,9 +18,7 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification -import org.slf4j.Logger -import org.slf4j.LoggerFactory - +import java.util.logging.Logger // Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 // NDC with labels: https://www.itu.int/dms_pub/itu-t/oth/02/02/T02020000510006PDFE.pdf @@ -33,7 +31,7 @@ class IsPossibleNumberWithReasonTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = LoggerFactory.getLogger(IsPossibleNumberWithReasonTest.class) + Logger logger = Logger.getLogger(IsPossibleNumberWithReasonTest.class.toString()) static final boolean LOGONLYUNEXPECTED = true @@ -50,7 +48,7 @@ class IsPossibleNumberWithReasonTest extends Specification { logger.info("isPossibleNumberWithReason is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { - logger.warn("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + logger.warning("isPossibleNumberWithReason is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { if (expectingFail) { diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy index 5444694..8687095 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/IsValidNumberTest.groovy @@ -18,8 +18,7 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil import spock.lang.Specification -import org.slf4j.Logger -import org.slf4j.LoggerFactory +import java.util.logging.Logger // Plain Number Format: https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/NP_Nummernraum.pdf?__blob=publicationFile&v=6 @@ -33,7 +32,7 @@ class IsValidNumberTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = LoggerFactory.getLogger(IsValidNumberTest.class) + Logger logger = Logger.getLogger(IsValidNumberTest.class.toString()) static final boolean LOGONLYUNEXPECTED = true @@ -50,7 +49,7 @@ class IsValidNumberTest extends Specification { logger.info("isValidNumber is still not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { - logger.warn("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") + logger.warning("isValidNumber is suddenly not correctly validating $number to $expectedResult for region $regionCode, by giving $result") } } else { if (expectingFail) { diff --git a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy index 33c71ac..9c8489f 100644 --- a/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy +++ b/src/test/groovy/de/telekom/phonenumbernormalizer/extern/libphonenumber/PhoneNumberUtil/NormalizationTest.groovy @@ -16,8 +16,9 @@ package de.telekom.phonenumbernormalizer.extern.libphonenumber.PhoneNumberUtil import com.google.i18n.phonenumbers.PhoneNumberUtil -import org.slf4j.Logger -import org.slf4j.LoggerFactory + +import java.util.logging.Logger + import spock.lang.Specification @@ -26,7 +27,7 @@ class NormalizationTest extends Specification { PhoneNumberUtil phoneUtil - Logger logger = LoggerFactory.getLogger(NormalizationTest.class) + Logger logger = Logger.getLogger(NormalizationTest.class.toString()) static final boolean LOGONLYUNEXPECTED = true