Отображение формата банковского счета в Новой Зеландии

Я должен отображать счета в банках Новой Зеландии и Австралии в отчетах, отформатированных в соответствии с пользовательским форматом, предоставленным пользователем. Например, банковские счета в Новой Зеландии могут быть 00-0000-0000000-000, причем последняя цифра (суффикс банковского счета) является необязательной. Есть две части формата:

  • Размещение штрихов
  • 2-значный префикс

Образцы отформатированных банковских счетов могут быть 01-1234-1234567-55 и 01-1234-1234567-002. Банковские счета хранятся в базе данных без какого-либо форматирования. Когда я пытался использовать String.Format("{0:00-0000-0000000-00#}",121234123456712), он не возвращает ожидаемый 12-1234-1234567-12, но 01-2123-4123456-712.

Понятно, что я всегда мог проверить длину банковского счета и сделать заявление о переключении, но формат определяется пользователем.

Следующее гарантирует, что тире размещены правильно и суффикс правильный:

// ensure there is a format to use and a bank account is present
if (bankaccountformat != "" && bankaccountformat.Contains('-') && bankaccount != "")
{
  int i = 0;
  foreach (char dash in bankaccountformat)
  {
    // add dash in bank account, if bank account is long enough
    if (dash == '-' && bankaccount.Length > i)
    {
      bankaccount = bankaccount.Insert(i, "-");
    }
    i++;
  }
}

Проблема не в том, действительна ли учетная запись или нет, а в форматировании. Пожалуйста, дайте мне знать, как лучше отформатировать учетную запись.

1 ответ

Вы не упоминаете, какой язык программирования вы используете. Во всяком случае, кажется, вы используете массив. Это может быть сложно.

В BASH я бы использовал манипуляции со строками, как в этом скрипте (fmat):

#!/bin/bash

#only numbers allowed
[[ ! "$1" =~ ^[0-9]+$ ]] && echo "Error: enter numbers only" && exit

s=$1
l=${#s}
r=l-13

#minimal number of digits is 13, maximum 16
[[ r -lt 0 || r -gt 3 ]] && echo "Error: enter 13-16 digits" && exit

#first 13 digits
a=${s:0:2}"-"${s:2:4}"-"${s:6:7}

#when 14-16 digits
a=$a"-"${s:13:r}

echo $a

fmat 011234123456755 дает 01-1234-1234567-55

fmat 0112341234567002 дает 01-1234-1234567-002

fmat 0112341234567 дает 01-1234-1234567

Если вы используете что-то еще, кроме BASH, то, по крайней мере, это дает некоторые подсказки.

Другие вопросы по тегам