Bangladesh Mobile Operator Codes and Number Prefixes
Send a recharge with the wrong operator code and it fails, or worse, succeeds against the wrong network. This is the full list.
| Operator | Code | Prefixes |
|---|---|---|
| Grameenphone | GP | 017, 013 |
| Robi | RB | 018 |
| Banglalink | BL | 019, 014 |
| Airtel | AT | 016 |
| Teletalk | TT | 015 |
| Skitto | SK | 017 (a subset) |
Skitto is Grameenphone's digital brand. Numbers use GP prefixes, so a prefix table alone cannot tell them apart. Sending a Skitto number as GP is the most common recharge integration bug in Bangladesh.
There is no reliable way to detect it from the number. Ask the customer, or offer Skitto as a separate choice in your interface.
Bangladeshi mobile numbers are eleven digits starting 01, then an operator digit of 3 to 9.
^01[3-9][0-9]{8}$
Accept the ways people actually type them and normalise before validating:
function normalise($n) {
$n = preg_replace('/[^0-9]/', '', $n);
if (strlen($n) === 13 && substr($n, 0, 3) === '880') { $n = '0' . substr($n, 3); }
if (strlen($n) === 10 && $n[0] === '1') { $n = '0' . $n; }
return preg_match('/^01[3-9][0-9]{8}$/', $n) ? $n : false;
}
That handles +8801712345678, 8801712345678, 1712345678, and numbers typed with spaces or dashes.
function operator($n) {
$p = substr($n, 0, 3);
$map = ['013'=>'GP','017'=>'GP','018'=>'RB','019'=>'BL',
'014'=>'BL','016'=>'AT','015'=>'TT'];
return $map[$p] ?? null; // Skitto still needs asking
}
MNP has existed in Bangladesh since 2018, so a customer can move networks and keep their number. In practice volumes are low and prefix lookup is right the overwhelming majority of the time — but it is not a guarantee. If a recharge fails on a number that looks correct, portability is worth checking before you assume a system fault.