UNPKG

nigeria-validator

Version:

Validate and format common Nigerian data: phone numbers, BVNs, bank codes, etc.

158 lines (113 loc) β€’ 4.5 kB
# πŸ‡³πŸ‡¬ nigeria-validator [![npm version](https://img.shields.io/npm/v/nigeria-validator.svg)](https://www.npmjs.com/package/nigeria-validator) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Node.js](https://img.shields.io/badge/node-%3E%3D14.0.0-brightgreen.svg)](https://nodejs.org) [![Made in Nigeria](https://img.shields.io/badge/made%20in-Nigeria-green)](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.