新西兰银行帐户格式显示

时间:2013-06-04 23:49:01

标签: account string.format bank

我将在报告中显示新西兰和澳大利亚银行账户,并根据用户提供的自定义格式进行格式化。例如,新西兰银行账户可以是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。

可以理解我总是可以测试银行账户的长度并执行switch语句,但格式是用户定义的。

以下确保正确放置破折号且后缀正确无误:

// 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 个答案:

答案 0 :(得分:0)

您没有提到您使用的编程语言。无论如何,似乎你使用了一个数组。这可能很棘手。

在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,那么至少会给出一些提示。