# 🇳🇬 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.