nigerian-mobile-validator
Version:
The most rigorous, up-to-date library for validating Nigerian mobile numbers. Fully NCC-compliant, and security-focused, with enterprise-grade features to prevent the business risks of validation failures in regulated industries.
44 lines (43 loc) • 2.17 kB
JavaScript
// src/numbering-plan/telco-number-allocation.ts
import { NetworkAccessCodeUtil } from './network-access-code';
import { MobileNumberRange } from './mobile-number-range';
/**
* Represents a specific number range assigned to a mobile network operator
* e.g. 08030000000-08039999999.
*/
export class TelcoNumberAllocation {
/**
* Create a TelcoNumberAllocation
*
* @param networkAccessCode The network access code (e.g. 803)
* @param telco The telco operator (e.g. MTN)
* @param subscriberNumberLowerbound Lower bound of subscriber numbers (without network code)
* @param subscriberNumberUpperbound Upper bound of subscriber numbers (without network code)
*/
constructor(networkAccessCode, telco, { subscriberNumberLowerbound, subscriberNumberUpperbound }) {
this.networkAccessCode = networkAccessCode;
this.telco = telco;
const localNumberLowerbound = this.subscriberNumberToLocalNumber(networkAccessCode, subscriberNumberLowerbound);
const localNumberUpperbound = this.subscriberNumberToLocalNumber(networkAccessCode, subscriberNumberUpperbound);
this.localNumberRange = new MobileNumberRange(localNumberLowerbound, localNumberUpperbound);
// Validate that this range is within the network code's range
const networkRange = NetworkAccessCodeUtil.getLocalNumberRange(networkAccessCode);
if (!networkRange.isSubset(this.localNumberRange)) {
throw new Error(`Number range ${this.localNumberRange.lowerBound}-${this.localNumberRange.upperBound} ` +
`is not within the range for network code ${networkAccessCode}`);
}
}
/**
* Compare this allocation with another one for sorting
*/
compareTo(other) {
return this.localNumberRange.compareTo(other.localNumberRange);
}
/**
* Convert a subscriber number to a local number by adding the network code
*/
subscriberNumberToLocalNumber(networkAccessCode, subscriberNumber) {
const networkRange = NetworkAccessCodeUtil.getLocalNumberRange(networkAccessCode);
return networkRange.lowerBound + subscriberNumber;
}
}