Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: PhoneNumberValidator #62

Closed
wants to merge 87 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
bea290e
Prepare new class PhoneNumberValidator - currently just reusing Phone…
Anrufliste May 1, 2024
b61cf95
Providing Ludwigshafen besides Mannheim for NDC 621 based on the star…
Anrufliste May 4, 2024
3f8031b
Use PhoneLib 8.13.36 and prepare release (#64)
Anrufliste May 4, 2024
bfc5f2b
Update copyright year of initial setting
Anrufliste May 1, 2024
82ba37c
Initial testing 5 separated cases
Anrufliste May 4, 2024
caf0d11
Prepare new class PhoneNumberValidator - currently just reusing Phone…
Anrufliste May 1, 2024
4354081
Update copyright year of initial setting
Anrufliste May 1, 2024
35936ba
Initial testing 5 separated cases
Anrufliste May 4, 2024
389e372
Merge branch 'Validator' of https://github.com/telekom/phonenumber-no…
Anrufliste May 5, 2024
2ba7425
Create Area Code Extractor (NDC) for Germany.
Anrufliste May 20, 2024
4c82ff0
Extend Number Plan to provide multi dimensional short code information.
Anrufliste May 20, 2024
de892a4
Starting Validator.
Anrufliste May 20, 2024
0bc33c5
Include Mobile NDCs into generator script for GermanAreaCodeExtractor…
Anrufliste May 21, 2024
f2119be
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 22, 2024
c0536dc
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 30, 2024
a8a82d9
Merge branch 'main' into Validator
Anrufliste May 30, 2024
84c7974
Use PhoneLib 8.13.38 and prepare release (removed NAC from MX numberp…
Anrufliste May 30, 2024
af0b626
Starting Snapshot 1.2.4 (#69)
Anrufliste May 30, 2024
6e0694d
Introducing INVALID_PREFIX_OF_SUBSCRIBER_NUMBER and reorganize expect…
Anrufliste Jun 3, 2024
7f0e476
Adapted 115 Goverment shor code, which is different to 110 & 112 shor…
Anrufliste Jun 3, 2024
2d1afff
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 3, 2024
3fa14e2
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 4, 2024
0995185
Adding todo in Validation Code to support not yet supported PhoneNumb…
Anrufliste Jun 4, 2024
5203340
Update Comments on 110 & 112 & 115 number checks to explain reason an…
Anrufliste Jun 8, 2024
2795da5
Adding Validation test for 116xxx social service short codes. Adaptin…
Anrufliste Jun 9, 2024
e153c1b
Use PhoneLib 8.13.39 and prepare release (#70)
Anrufliste Jun 14, 2024
39e7232
Starting Snapshot 1.2.5 (#71)
Anrufliste Jun 15, 2024
7f8726f
Issue for +49115 resubmitted
Anrufliste Jun 21, 2024
40a5013
Adding Validation test for 118(y)xx call assitant. Adapting Validatio…
Anrufliste Jun 23, 2024
b073729
Use PhoneLib 8.13.40 and prepare release (#72)
Anrufliste Jun 29, 2024
0565225
Starting Snapshot 1.2.6 (#73)
Anrufliste Jun 29, 2024
a11dfd3
libphonenumber 8.13.43 made change to German mobile 017x number range…
Anrufliste Sep 1, 2024
08fe3bb
Starting Snapshot 1.2.7 (#75)
Anrufliste Sep 1, 2024
d3ae0bc
Added reported issue to google for last versions test adaptions. (#76)
Anrufliste Sep 6, 2024
a6b4e04
Start Snapshot 1.2.8 (#77)
Anrufliste Sep 6, 2024
0d4d7b6
Prepare new class PhoneNumberValidator - currently just reusing Phone…
Anrufliste May 1, 2024
b21413c
Update copyright year of initial setting
Anrufliste May 1, 2024
9f1b5aa
Initial testing 5 separated cases
Anrufliste May 4, 2024
22f0319
Create Area Code Extractor (NDC) for Germany.
Anrufliste May 20, 2024
93c4805
Extend Number Plan to provide multi dimensional short code information.
Anrufliste May 20, 2024
5e1f063
Starting Validator.
Anrufliste May 20, 2024
a7366c8
Include Mobile NDCs into generator script for GermanAreaCodeExtractor…
Anrufliste May 21, 2024
f43537d
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 22, 2024
b0f4461
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 30, 2024
24c1479
Introducing INVALID_PREFIX_OF_SUBSCRIBER_NUMBER and reorganize expect…
Anrufliste Jun 3, 2024
7044eba
Adapted 115 Goverment shor code, which is different to 110 & 112 shor…
Anrufliste Jun 3, 2024
ccc65c9
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 3, 2024
13a7d1b
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 4, 2024
354a9af
Adding todo in Validation Code to support not yet supported PhoneNumb…
Anrufliste Jun 4, 2024
c7a1ec6
Update Comments on 110 & 112 & 115 number checks to explain reason an…
Anrufliste Jun 8, 2024
24540be
Adding Validation test for 116xxx social service short codes. Adaptin…
Anrufliste Jun 9, 2024
b6b9372
Issue for +49115 resubmitted
Anrufliste Jun 21, 2024
e9262be
Adding Validation test for 118(y)xx call assitant. Adapting Validatio…
Anrufliste Jun 23, 2024
c89d2ae
Use PhoneLib 8.13.46 and prepare release (#78)
Anrufliste Sep 25, 2024
6c816be
Start Snapshot 1.2.9 after release 1.2.8 (#79)
Anrufliste Sep 25, 2024
c2c4ada
Merge branch 'Validator' of https://github.com/telekom/phonenumber-no…
Anrufliste Sep 28, 2024
7112e1e
Use PhoneLib 8.13.47 and prepare release (#80)
Anrufliste Oct 4, 2024
740dfd7
Start Snapshot 1.2.10 after release 1.2.9 (#81)
Anrufliste Oct 4, 2024
4b0b2c0
Dependency updates >>> 1.3.0 (#82)
Anrufliste Oct 5, 2024
089d082
Prepare new class PhoneNumberValidator - currently just reusing Phone…
Anrufliste May 1, 2024
69723aa
Update copyright year of initial setting
Anrufliste May 1, 2024
6355b11
Initial testing 5 separated cases
Anrufliste May 4, 2024
c2f8c87
Create Area Code Extractor (NDC) for Germany.
Anrufliste May 20, 2024
2dc301f
Extend Number Plan to provide multi dimensional short code information.
Anrufliste May 20, 2024
472f50c
Starting Validator.
Anrufliste May 20, 2024
76d6e0a
Include Mobile NDCs into generator script for GermanAreaCodeExtractor…
Anrufliste May 21, 2024
f154231
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 22, 2024
10b312e
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 30, 2024
02b0c4d
Introducing INVALID_PREFIX_OF_SUBSCRIBER_NUMBER and reorganize expect…
Anrufliste Jun 3, 2024
567068d
Adapted 115 Goverment shor code, which is different to 110 & 112 shor…
Anrufliste Jun 3, 2024
994ad5f
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 3, 2024
cda0aa7
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 4, 2024
118baae
Adding todo in Validation Code to support not yet supported PhoneNumb…
Anrufliste Jun 4, 2024
6ac8c1d
Update Comments on 110 & 112 & 115 number checks to explain reason an…
Anrufliste Jun 8, 2024
7550ad4
Adding Validation test for 116xxx social service short codes. Adaptin…
Anrufliste Jun 9, 2024
fed7097
Issue for +49115 resubmitted
Anrufliste Jun 21, 2024
668144e
Adding Validation test for 118(y)xx call assitant. Adapting Validatio…
Anrufliste Jun 23, 2024
9de73db
Initial testing 5 separated cases
Anrufliste May 4, 2024
6d942c3
Initial testing 5 separated cases
Anrufliste May 4, 2024
fe590b5
Extend Number Plan to provide multi dimensional short code information.
Anrufliste May 20, 2024
2efe1d6
Short Code 110 and 112 are not valid start for fixed line numbers (ND…
Anrufliste May 30, 2024
9a62b8a
Adapted 115 Goverment shor code, which is different to 110 & 112 shor…
Anrufliste Jun 3, 2024
89416ff
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 3, 2024
91d05cc
Optimize Validation Code by moving duplicate code structure into chec…
Anrufliste Jun 4, 2024
93c5ca1
Update Comments on 110 & 112 & 115 number checks to explain reason an…
Anrufliste Jun 8, 2024
a71e245
Adding Validation test for 116xxx social service short codes. Adaptin…
Anrufliste Jun 9, 2024
ad9c050
Merging 1.3.1 with Validator A
Anrufliste Oct 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Optimize Validation Code by moving duplicate code structure into chec…
…kExitCodeUsingNumber method
Anrufliste committed Sep 8, 2024
commit 13a7d1b3b68b785064f607301ffa28a5e932e9f2
Original file line number Diff line number Diff line change
@@ -58,6 +58,58 @@ private PhoneNumberValidationResult checkShortCodeOverlapping(NumberPlan numberp
}


private PhoneNumberValidationResult checkExitCodeUsingNumber(PhoneLibWrapper wrapper, NumberPlan numberplan, String numberWithoutInitalExitCode,
ShortCodeUseable mainSetIDPCC, ShortCodeUseable oppositeSetIDPCC,
ShortCodeUseable mainSetIDPCCNDC, ShortCodeUseable oppositeSetIDPCCNDC,
PhoneNumberValidationResult invalidInitialExitCode,
PhoneNumberValidationResult mainSetResult){
if (numberplan!=null) {

PhoneNumberValidationResult isShortCodeDirectlyAfterInitalExitCode = checkShortCodeOverlapping(numberplan, numberWithoutInitalExitCode,
mainSetIDPCC, oppositeSetIDPCC,
invalidInitialExitCode, mainSetResult, null);

if (isShortCodeDirectlyAfterInitalExitCode!=null) {
return isShortCodeDirectlyAfterInitalExitCode;
}

// Check for NDC after InitalExitCode:
String ndc = numberplan.getNationalDestinationCodeFromNationalSignificantNumber(numberWithoutInitalExitCode);

if (Objects.equals(ndc, "")) {
return PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE; // TODO: What about a Numberplan without NDCs?
}

String numberWithoutNationDestinationCode = numberWithoutInitalExitCode.substring(ndc.length());
// Check for Shortnumber after NDC if NDC is Optional (<=> Fixline)
if (numberplan.isNDCOptional(ndc)) {

PhoneNumberValidationResult isShortCodeDirectlyAfterInitalExitCodeandNDC = checkShortCodeOverlapping(numberplan, numberWithoutNationDestinationCode,
mainSetIDPCCNDC, oppositeSetIDPCCNDC,
PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE, mainSetResult, PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER);

if (isShortCodeDirectlyAfterInitalExitCodeandNDC!=null) {
return isShortCodeDirectlyAfterInitalExitCodeandNDC;
}

// when NDC is optional, then number must not start with NAC again.
String nac = wrapper.getNationalAccessCode();
if (numberWithoutNationDestinationCode.startsWith(nac)) {
return PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER;
}
}

if (numberplan.isNumberTooShortForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_SHORT;
}
if (numberplan.isNumberTooLongForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_LONG;
}
}
return null;
}


@Override
public PhoneNumberValidationResult isPhoneNumberPossibleWithReason(String number, String regionCode) {

@@ -82,105 +134,31 @@ public PhoneNumberValidationResult isPhoneNumberPossibleWithReason(String number

String numberWithoutCountryCode = wrapper.removeIDP().substring(numberCountryCode.length());

// using IDP as initial Exit Code
PhoneNumberValidationResult isIDPNumberValid;

if (regionCountryCode.equals(numberCountryCode)) {
// Calling within the country

if (numberplan!=null) {

PhoneNumberValidationResult isShortCodeDirectlyAfterCC = checkShortCodeOverlapping(numberplan, numberWithoutCountryCode,
ShortCodeUseable.WITH_IDP_AND_CC_FROM_INSIDE, ShortCodeUseable.WITH_IDP_AND_CC_FROM_OUTSIDE,
PhoneNumberValidationResult.INVALID_COUNTRY_CODE, PhoneNumberValidationResult.IS_POSSIBLE_NATIONAL_ONLY, null);

if (isShortCodeDirectlyAfterCC!=null) {
return isShortCodeDirectlyAfterCC;
}

// Check for NDC after CC:
String ndc = numberplan.getNationalDestinationCodeFromNationalSignificantNumber(numberWithoutCountryCode);

if (Objects.equals(ndc, "")) {
return PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE; // TODO: What about a Numberplan without NDCs?
}

String numberWithoutNationDestinationCode = numberWithoutCountryCode.substring(ndc.length());
// Check for Shortnumber after NDC if NDC is Optional (<=> Fixline)
if (numberplan.isNDCOptional(ndc)) {

PhoneNumberValidationResult isShortCodeDirectlyAfterCCandNDC = checkShortCodeOverlapping(numberplan, numberWithoutNationDestinationCode,
ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_INSIDE, ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_OUTSIDE,
PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE, PhoneNumberValidationResult.IS_POSSIBLE_NATIONAL_ONLY, PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER);

if (isShortCodeDirectlyAfterCCandNDC!=null) {
return isShortCodeDirectlyAfterCCandNDC;
}

// when NDC is optional, then number must not start with NAC again.
String nac = wrapper.getNationalAccessCode();
if (numberWithoutNationDestinationCode.startsWith(nac)) {
return PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER;
}
}

if (numberplan.isNumberTooShortForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_SHORT;
}
if (numberplan.isNumberTooLongForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_LONG;
}
}

isIDPNumberValid = checkExitCodeUsingNumber(wrapper, numberplan, numberWithoutCountryCode,
ShortCodeUseable.WITH_IDP_AND_CC_FROM_INSIDE, ShortCodeUseable.WITH_IDP_AND_CC_FROM_OUTSIDE,
ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_INSIDE, ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_OUTSIDE,
PhoneNumberValidationResult.INVALID_COUNTRY_CODE,
PhoneNumberValidationResult.IS_POSSIBLE_NATIONAL_ONLY);
} else {

// replacing the number plan by the one specified by the number's CC
numberplan = NumberPlanFactory.INSTANCE.getNumberPlan(DeviceContextLineType.UNKNOWN, numberCountryCode);
// calling from outside the country
if (numberplan!=null) {

PhoneNumberValidationResult isShortCodeDirectlyAfterCC = checkShortCodeOverlapping(numberplan, numberWithoutCountryCode,
ShortCodeUseable.WITH_IDP_AND_CC_FROM_OUTSIDE, ShortCodeUseable.WITH_IDP_AND_CC_FROM_INSIDE,
PhoneNumberValidationResult.INVALID_COUNTRY_CODE, PhoneNumberValidationResult.IS_POSSIBLE_INTERNATIONAL_ONLY, null);

if (isShortCodeDirectlyAfterCC!=null) {
return isShortCodeDirectlyAfterCC;
}

// Check for NDC after CC:
String ndc = numberplan.getNationalDestinationCodeFromNationalSignificantNumber(numberWithoutCountryCode);

if (Objects.equals(ndc, "")) {
return PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE; // TODO: What about a Numberplan without NDCs?
}

String numberWithoutNationDestinationCode = numberWithoutCountryCode.substring(ndc.length());
// Check for Shortnumber after NDC if NDC is Optional (<=> Fixline)
if (numberplan.isNDCOptional(ndc)) {

PhoneNumberValidationResult isShortCodeDirectlyAfterCCandNDC = checkShortCodeOverlapping(numberplan, numberWithoutNationDestinationCode,
ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_OUTSIDE, ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_INSIDE,
PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE, PhoneNumberValidationResult.IS_POSSIBLE_INTERNATIONAL_ONLY, PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER);

if (isShortCodeDirectlyAfterCCandNDC!=null) {
return isShortCodeDirectlyAfterCCandNDC;
}

// when NDC is optional, then number must not start with NAC again.
String nac = wrapper.getNationalAccessCode();
if (numberWithoutNationDestinationCode.startsWith(nac)) {
return PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER;
}
}

if (numberplan.isNumberTooShortForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_SHORT;
}

if (numberplan.isNumberTooLongForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_LONG;
}
}
isIDPNumberValid = checkExitCodeUsingNumber(wrapper, numberplan, numberWithoutCountryCode,
ShortCodeUseable.WITH_IDP_AND_CC_FROM_OUTSIDE, ShortCodeUseable.WITH_IDP_AND_CC_FROM_INSIDE,
ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_OUTSIDE, ShortCodeUseable.WITH_IDP_AND_CC_AND_NDC_FROM_INSIDE,
PhoneNumberValidationResult.INVALID_COUNTRY_CODE,
PhoneNumberValidationResult.IS_POSSIBLE_INTERNATIONAL_ONLY);
}

if (isIDPNumberValid != null) {
return isIDPNumberValid;
}

// return wrapper.validate();
} else {
// No Country Exit Code has been used, so no CC is following.
if (Objects.equals(wrapper.getNationalAccessCode(), "")) {
@@ -194,51 +172,18 @@ public PhoneNumberValidationResult isPhoneNumberPossibleWithReason(String number
if (numberplan!=null) {
// check if a shortnumber is used directly after NAC and if that is allowed

PhoneNumberValidationResult isShortCodeDirectlyAfterNAC = checkShortCodeOverlapping(numberplan, numberWithOutNac,
// using NAC as initial Exit Code
PhoneNumberValidationResult isNACNumberValid = checkExitCodeUsingNumber(wrapper, numberplan, numberWithOutNac,
ShortCodeUseable.WITH_NAC, null,
PhoneNumberValidationResult.INVALID_NATIONAL_ACCESS_CODE, PhoneNumberValidationResult.IS_POSSIBLE_NATIONAL_ONLY, null);
ShortCodeUseable.WITH_NAC_AND_NDC, null,
PhoneNumberValidationResult.INVALID_NATIONAL_ACCESS_CODE,
PhoneNumberValidationResult.IS_POSSIBLE_NATIONAL_ONLY);

if (isShortCodeDirectlyAfterNAC!=null) {
return isShortCodeDirectlyAfterNAC;
if (isNACNumberValid != null) {
return isNACNumberValid;
}


// Check for NDC after Nac:
String ndc = numberplan.getNationalDestinationCodeFromNationalSignificantNumber(numberWithOutNac);

if (Objects.equals(ndc, "")) {
return PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE; // TODO: What about a Numberplan without NDCs?
}
String numberWithoutNationDestinationCode = numberWithOutNac.substring(ndc.length());
// Check for Shortnumber after NDC if NDC is Optional (<=> Fixline)
if (numberplan.isNDCOptional(ndc)) {

PhoneNumberValidationResult isShortCodeDirectlyAfterNACandNDC = checkShortCodeOverlapping(numberplan, numberWithoutNationDestinationCode,
ShortCodeUseable.WITH_NAC_AND_NDC, null,
PhoneNumberValidationResult.INVALID_NATIONAL_DESTINATION_CODE, PhoneNumberValidationResult.IS_POSSIBLE_NATIONAL_ONLY, PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER);

if (isShortCodeDirectlyAfterNACandNDC!=null) {
return isShortCodeDirectlyAfterNACandNDC;
}

// when NDC is optional, then number must not start with NAC again.
String nac = wrapper.getNationalAccessCode();
if (numberWithoutNationDestinationCode.startsWith(nac)) {
return PhoneNumberValidationResult.INVALID_PREFIX_OF_SUBSCRIBER_NUMBER;
}
}

if (numberplan.isNumberTooShortForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_SHORT;
}
if (numberplan.isNumberTooLongForNationalDestinationCode(ndc,numberWithoutNationDestinationCode)) {
return PhoneNumberValidationResult.TOO_LONG;
}

}



// As fallback check by libPhone
PhoneNumberValidationResult fallBackResult = wrapper.validate();