Номер Sheba: структура и проверка
Что такое номер Sheba, из каких частей он состоит и как проверить его корректность? Практическое руководство по структуре иранского IBAN и отсеву неверных номеров.
Sheba (номер банковского счета Ирана) — иранская версия международного стандарта IBAN. Задача простая: единый уникальный идентификатор для каждого банковского счета в стране вместо номеров счетов, которые каждый банк выдавал по своим правилам и которые между банками ничего не значили.
Для обменного пункта Sheba — не просто поле в форме. Ошибка в нем означает, что перевод вернется (в лучшем случае) или уйдет на чужой счет (в худшем). Это руководство — то, что должна знать ваша команда.
Структура Sheba
Иранский Sheba состоит из 26 символов: двух букв IR и затем 24 цифр. Ни на один больше. Ни на один меньше.
- Код страны: всегда
IR. - Контрольные цифры: две цифры, которые математически рассчитываются из остального номера. У них одна задача: ловить опечатки. Если вы ошибетесь в одной цифре, эти две цифры уже не сойдутся.
- Код банка: три цифры, определяющие банк.
- Идентификатор счета: 19 цифр, которые назначает сам банк. Если номер счета короче, он дополняется нулями слева — и эти нули являются частью Sheba, а не украшением.
Практическая деталь: код банка говорит вам, перевод внутрибанковский (тот же банк, мгновенно и без комиссии) или межбанковский (PAYA/SATNA, другое время и комиссия). Одно это определение создает разницу между «дошло сейчас» и «дошло завтра».
Примеры часто используемых банковских кодов
| Код | Банк |
|---|---|
| 012 | Меллат |
| 015 | Сепах |
| 016 | Кешаварзи |
| 017 | Мелли Иран |
| 018 | Теджарат |
| 019 | Садерат Иран |
| 021 | Пост Банк |
| 054 | Парсиан |
| 055 | Эгтесад Новин |
| 056 | Саман |
| 057 | Пасаргад |
Это не полный список, и он тоже меняется — слияния банков выводят некоторые коды из обращения. Берите справочник у Центрального банка, а если он у вас захардкожен в софте, обновляйте его раз в год.
Валидация: до любого запроса проверяйте сами
Контрольные цифры Sheba строятся по стандартному алгоритму MOD-97-10 (из ISO 7064). Суть хороша тем, что для проверки не нужен ни сервис, ни интернет — это можно сделать даже на бумаге:
- Возьмите первые четыре символа (
IR+ две контрольные цифры) и перенесите их в конец номера. - Преобразуйте буквы в числа:
A=10,B=11, …I=18, …R=27, …Z=35. ЗначитIRпревращается в1827. - Теперь у вас очень большое число. Посчитайте остаток от деления на 97.
- Если остаток ровно 1, Sheba структурно корректен. Любое другое число означает ошибку.
Поскольку число больше обычного диапазона целых чисел, на практике идут цифра за цифрой:
function shebaValid(string $sheba): bool
{
$s = strtoupper(preg_replace('/[\s-]/', '', $sheba));
if (! preg_match('/^IR[0-9]{24}$/', $s)) {
return false; // неверная длина или формат
}
$re = substr($s, 4).substr($s, 0, 4); // первые четыре символа в конец
$num = '';
foreach (str_split($re) as $ch) {
$num .= ctype_alpha($ch) ? (string) (ord($ch) - 55) : $ch;
}
$rem = 0; // mod 97 по цифрам
foreach (str_split($num) as $d) {
$rem = ($rem * 10 + (int) $d) % 97;
}
return $rem === 1;
}
Эти десять строк кода ловят большинство опечаток до того, как вы заплатите. Если вы используете платный сервис проверки, всегда сначала делайте эту проверку; отправлять в сервис криво набранный Sheba — это платить за ответ «ошибка».
Но обратите внимание: корректный означает «этот номер может быть Sheba», а не «этот счет существует». Можно составить полностью корректный Sheba, который не привязан ни к какому счету. Чтобы узнать наличие счета и его владельца, другого пути кроме запроса нет.
Что показывает запрос по Sheba?
Запрос обычно возвращает три вещи:
- Имя владельца счета — самая важная часть.
- Название банка — подтверждение кода банка.
- Возможность приема средств — некоторые счета (заблокированные, неактивные или специальные типы) не принимают зачисления. Знать это до отправки — минус один возврат.
Для обменного пункта имя владельца счета — не просто удобство. Это реальный контроль:
- Сверка имени с клиентом. Если клиент — «Реза Ахмади», а Sheba оформлен на другого человека, нужен вопрос. Иногда ответ простой и правильный (счет супруги, счет компании). Иногда нет.
- Тихие ошибки. Sheba, у которого структура правильная, но который принадлежит другому человеку, не даст никакой ошибки. Деньги уйдут, и вернуть их — уже не техническая задача, а юридическая.
- След комплаенса. Запись о том, что «на момент оформления этого перевода Sheba был на имя такого-то», — часть вашего KYC-досье. Через три месяца, когда кто-то спросит, почему этот перевод был проведен, у вас есть ответ.
Пять ошибок, из-за которых чаще всего возвращаются переводы
- Потерянные начальные нули. Если эти 19 цифр начинаются с нуля и Sheba был набран в Excel, Excel «почистит» нули, и Sheba сломается. Храните Sheba всегда как текст, а не как число. (Здесь Excel тоже тихо портит данные.)
- Персидские и арабские цифры. Клиент копирует с телефона, и приходит
۱۲۳, а не123. Для глаза одно и то же; для банковской системы это две совершенно разные вещи. Всегда нормализуйте ввод в латинские цифры. IRпропущен или продублирован. Некоторые системы сами добавляютIR, и клиент тоже добавил:IRIR…. Нормализуйте ввод, не отклоняйте его сразу.- Пробелы, дефисы и невидимые символы. Копирование из WhatsApp часто приносит еще и управляющие символы направления (RTL/LTR), которые не видны, но ломают строку. Удаляйте все, кроме
0-9иIR. Iвместо1иOвместо0. Когда Sheba читают с бумаги или с фотографии. Валидация MOD-97 это поймает — при условии, что вы ее запускаете.
Общее правило: нормализуйте ввод, потом валидируйте, потом делайте запрос. Именно в таком порядке. Большинство «ошибок Sheba» на самом деле являются ошибками нормализации, а не ошибками клиента.
Можно ли преобразовать номер счета в Sheba?
Наполовину. У каждого банка свое правило построения 19 цифр из номера счета, и эти правила не являются официальными и стабильными. Онлайн-конвертеры обычно работают на основе обратной инженерии и для некоторых типов счетов дают ошибку.
Практическая рекомендация: берите Sheba у самого клиента (он доступен в банковском приложении и в карточных переводах), а затем делайте запрос. Строить Sheba по формуле и отправлять по нему деньги — риск, который того не стоит.
Здесь нет места ручной работе
Проверка Sheba должна выполняться тихо и в правильном месте, а не так, чтобы оператор открывал другую вкладку и копировал-вставлял.
В Nexto, когда в форме банковского перевода вы выходите из поля Sheba, в этот же момент выполняется локальная валидация, и если номер корректный, уходит запрос, а имя владельца счета и банк заполняются автоматически — с зеленой или красной подсказкой. Оператор ничего не делает, кроме как смотрит. А поскольку результат кэшируется, повторный запрос того же Sheba тем же обменным пунктом не стоит денег.
Практический итог: контроль, который выполняется автоматически, выполняется всегда. Контроль, который делается вручную, пропускается ровно в самый загруженный день — в день, когда он важнее всего.
Кратко
У Sheba три слоя, и нужны все три: нормализация (лишние символы и нелатинские цифры), валидация (MOD-97, бесплатно и офлайн) и запрос (существование и владелец счета, единственный способ понять, куда уйдут деньги).
Первые два вы можете добавить в свою систему уже сегодня и без каких-либо затрат. Третий стоит немного, а взамен снижает возвраты, дорогие ошибки и вопросы комплаенса без ответа.
Для мгновенной проверки владельца Sheba используйте инструмент проверки Sheba.
Посмотрите всё это в Nexto
Полноценный приватный экземпляр с демо-данными — без установки, без банковской карты.