#!/usr/bin/perl # taipoweracctchecksum -- 計算台灣電力公司之客戶電號之檢算號 # Compute Taiwan Power Company customer account / meter number checksums # Copyright : https://www.gnu.org/licenses/gpl.html # Author : 積丹尼 Dan Jacobson -- https://www.jidanni.org/comp/checksums/ # Created On : Jan 2005 # Last Modified On: Wed Jul 24 10:49:56 2019 # Update Count : 105 # 使用例子 Usage example: $ echo 1111111111 | taipoweracctchecksum # 11111111115 use strict; use warnings FATAL => 'all'; my $limit = 21; while (<>) { chomp; die "$_: 請輸入未冠檢號之電號共十碼如 1234567890 或 12-34-5678-90" unless /^(\d)(\d)-(\d)(\d)-(\d)(\d)(\d)(\d)-(\d)(\d)$/ || /^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/; die "$_: 前 \"$1$2\" 大於 $limit" if "$1$2" > $limit; my ( $c, $f ); for ( @{^CAPTURE} ) { map $c += $_, split '', $_ * ( 1 + ( $f = !$f ) ); } printf "$_" . ( /-/ ? "-" : "" ) . "%d\n", $c % 10; }