simujs
Version:
A simple JavaScript utility for identifying Tanzanian mobile network operators based on phone numbers, using prefix data regulated by TCRA.
111 lines (97 loc) • 2.73 kB
text/typescript
import { PhoneNumberUtil } from "google-libphonenumber";
import { Operator } from "./types";
export enum Operators {
Vodacom = "Vodacom Tanzania",
Yas = "Yas Tanzania",
Airtel = "Airtel Tanzania",
Halotel = "Halotel",
TTCL = "TTCL",
Smile = "Smile",
Zantel = "Zantel",
Mkulima = "Mkulima",
Wiafrica = "Wiafrica",
MO = "MO Mobile",
}
const operators: Operator[] = [
{
name: Operators.Vodacom,
codes: ["74", "75", "76"],
company: "Vodacom Tanzania PLC",
financialService: "M-Pesa",
},
{
name: Operators.Yas,
codes: ["71", "65", "67"],
company: "Honora Tanzania PLC",
financialService: "Mixx by Yas"
},
{
name: Operators.Airtel,
codes: ["78", "68", "68"],
company: "Airtel Tanzania PLC",
financialService: "Airtel Money"
},
{
name: Operators.Halotel,
codes: ["61", "62"],
company: "Viettel Tanzania PLC",
financialService: "HaloPesa"
},
{
name: Operators.TTCL,
codes: ["73"],
company: "Tanzania Telecommunications Corporation Limited",
financialService: "T-Pesa"
},
{
name: Operators.Smile,
codes: ["66"],
company: "Smile Tanzania PLC",
financialService: null
},
{
name: Operators.Zantel,
codes: ["77"],
company: "Zantel Tanzania PLC",
financialService: null
},
{
name: Operators.Mkulima,
codes: ["63"],
company: "Mkulima Tanzania PLC",
financialService: null
},
{
name: Operators.Wiafrica,
codes: ["64"],
company: "Wiafrica Tanzania PLC",
financialService: null
},
{
name: Operators.MO,
codes: ["72"],
company: "MO Mobile Tanzania PLC",
financialService: null
}
]
export const format = (phone: string): number | undefined => {
const phoneUtil = PhoneNumberUtil.getInstance();
const DEFAULT_REGION = 'TZ';
const COUNTRY_CODE_TZ = 255;
try {
const parsed = phoneUtil.parseAndKeepRawInput(phone, DEFAULT_REGION);
if (!phoneUtil.isValidNumber(parsed)) return undefined;
if (parsed.getCountryCode() !== COUNTRY_CODE_TZ) return undefined;
return parsed.getNationalNumber();
} catch {
return undefined;
}
};
export default function simu(phone: string): Operator | undefined {
const nationalNumber = format(phone);
if (!nationalNumber) return undefined;
const numberStr = nationalNumber.toString();
return operators.find(operator =>
operator.codes.some(code => numberStr.startsWith(code))
);
}