nigeria-validator
Version:
Validate and format common Nigerian data: phone numbers, BVNs, bank codes, etc.
158 lines (113 loc) β’ 4.5 kB
Markdown
# π³π¬ nigeria-validator
[](https://www.npmjs.com/package/nigeria-validator)
[](LICENSE)
[](https://nodejs.org)
[](https://github.com/yourusername)
> A developer-friendly Node.js package for validating and formatting Nigerian data like phone numbers, BVNs, NINs, bank codes, states, and LGAs.
## β¨ Features
- π Phone number validation & formatting (`+234` or local)
- π¦ Bank code validation & name lookup
- π BVN validation (11-digit check)
- π NIN validation (11-digit national ID)
- ποΈ Validate Nigerian states and LGAs
- π‘ Detect which telecom network a Nigerian phone number belongs to
- π Supports both local and international formats
## π¦ Installation
```bash
npm install nigeria-validator
```
## π§ Usage
```js
const ngv = require('nigeria-validator');
// β
Phone Numbers
ngv.isValidPhone("08034567890"); // true
ngv.formatPhone("+2348034567890"); // "08034567890"
ngv.formatPhone("08034567890", "intl"); // "+2348034567890"
// β
BVN
ngv.isValidBVN("22345678901"); // true
// β
NIN
ngv.isValidNIN("12345678901"); // true
// β
Bank Codes
ngv.isValidBankCode("057"); // true
ngv.getBankName("057"); // "Zenith Bank"
// β
States and LGAs
ngv.isValidState("Lagos"); // true
ngv.getLGAs("Abia"); // [ 'Aba North', 'Aba South', ... ]
ngv.isValidLGA("Abia", "Umuahia North"); // true
// β
Which Network
ngv.getNigerianNetwork("08034567890"); // "MTN"
```
## π API Reference
### π Phone Numbers
| Function | Description |
|----------|-------------|
| `isValidPhone(phone)` | Validates Nigerian mobile numbers (MTN, Airtel, Glo, 9mobile, etc.) |
| `formatPhone(phone, format)` | Converts phone to `'local'` (080...) or `'intl'` (+234...) |
### π BVN
| Function | Description |
|----------|-------------|
| `isValidBVN(bvn)` | Validates a Bank Verification Number (must be 11 digits) |
### π NIN
| Function | Description |
|----------|-------------|
| `isValidNIN(nin)` | Validates a National Identification Number (11-digit check) |
### π¦ Bank Codes
| Function | Description |
|----------|-------------|
| `isValidBankCode(code)` | Checks if a 3-digit bank code is valid |
| `getBankName(code)` | Returns the bank name (e.g., "058" β "GTBank") |
### ποΈ States and LGAs
| Function | Description |
|----------|-------------|
| `isValidState(state)` | Returns `true` if the state exists |
| `getLGAs(state)` | Returns an array of LGAs for the state |
| `isValidLGA(state, lga)` | Returns `true` if LGA exists in the given state |
### π‘ Which Network
| Function | Description |
|----------|-------------|
| `getNigerianNetwork(phone)` | Detects if the phone number is MTN, Glo, Airtel, or 9mobile |
## π Nigerian States Coverage
- β
Includes all 20 states and the FCT, covering 413+ Local Government Areas (LGAs).
- Example states: **Abia, Adamawa, Akwa Ibom, Anambra, Bauchi, Bayelsa, ...**
## π Which Network Function
```js
function getNigerianNetwork(phone) {
const cleaned = phone.replace(/\D/g, "");
let normalized = cleaned;
if (cleaned.startsWith("234")) {
normalized = "0" + cleaned.slice(3);
}
const prefix = normalized.slice(0, 4);
const mtnPrefixes = [
"0803", "0806", "0703", "0706", "0810", "0813", "0814", "0816",
"0903", "0906", "0913", "0916"
];
const gloPrefixes = ["0805", "0705", "0811", "0815", "0905", "0915"];
const airtelPrefixes = [
"0802", "0808", "0708", "0812", "0701", "0902", "0907", "0901", "0912"
];
const etisalatPrefixes = ["0809", "0817", "0818", "0909", "0908"];
if (mtnPrefixes.includes(prefix)) return "MTN";
if (gloPrefixes.includes(prefix)) return "Glo";
if (airtelPrefixes.includes(prefix)) return "Airtel";
if (etisalatPrefixes.includes(prefix)) return "9mobile";
return "Unknown Network";
}
```
## π¨πΎβπ» Author
**Your Name**
GitHub: [@milytoh](https://github.com/milytoh)
## π License
MIT License. Free to use, modify, and contribute.
## π Contributions
PRs and suggestions are welcome! π³π¬
Want to add full 36-state LGA support? Letβs do it together.