2

出于测试目的,我需要生成一些有效的随机 ABN(澳大利亚商业号码)。

以下是我能够找到的一些链接,讨论如何验证 ABN,但我不清楚如何生成值。

skorks.com/2011/08/even-boring-form-data-can-be-interesting-for-a-developer

ato.gov.au/businesses/content.aspx?doc=/content/13187.htm

abr.business.gov.au

search.cpan.org/~adamk/Business-AU-ABN-1.09/lib/Business/AU/ABN.pm

4

2 回答 2

13

从您的链接http://web.archive.org/web/20130405011257/http://www.ato.gov.au/businesses/content.aspx?doc=/content/13187.htm在我看来您可以:

  1. 选择九个任意(随机)数字。

    例如,假设我们选择 004085616。

  2. 将 10 放在这些数字前面(只是暂时的)。

    这给了我们 10004085616。

  3. 按照http://web.archive.org/web/20130405011257/http://www.ato.gov.au/businesses/content.aspx?doc=/content/13187.htm中的描述应用加权因子。

    这给了我们 402。

  4. 计算除以 89 时的余数。

    余数为 46。

  5. 从 89 中减去余数。

    结果是 43。

  6. 将该结果加 10 以获得新的最左边的数字。

    现在我们有 53。将其插入 004085616 的前面得到 53004085616。

于 2013-03-19T15:47:49.403 回答
3

在不了解它的情况下,您可以暴力破解它。如果它是一次性的夹具一代,这很好。不知道测试编号是否有任何约定,您必须假设生成的许多测试编号可能代表真实的业务实体。

use strictures;
use Business::AU::ABN "validate_abn";

my $desired = 10; # 1_000;
my $abn = 12_004_044_937; # Example from BAA Pod.
my @abn;
until ( not $desired )
{
    next unless my $valid = validate_abn( $abn++ );
    $desired--;
    push @abn, $valid;
}

print join($/, @abn), $/;

__END__
12 004 044 937
12 004 044 969
12 004 045 391
12 004 045 440
12 004 045 472
12 004 045 521
12 004 045 553
12 004 045 585
12 004 045 602
12 004 045 634
于 2013-03-19T15:31:37.110 回答