0

次のような(19桁の)連番を生成していました:

seq 1234496713247997000 1234496713247998000 > seq_numbers.txt

次に、luhn チェッカーを使用してオンラインで検証します。2段階のアプローチを行う代わりに、たとえばbashスクリプトのようにこれをすべて一度に実行し、有効な数値のみをファイルに出力するにはどうすればよいですか?

4

2 に答える 2

1

私は以下の luhn チェッカー アルゴリズムの真実性を主張しません。このRosetta Codeページからの参照です。

として使用できます

#!/bin/bash

function luhn_validate
{
    num=$1
    shift 1

    len=${#num}
    is_odd=1
    sum=0
    for((t = len - 1; t >= 0; --t)) {
        digit=${num:$t:1}

        if [[ $is_odd -eq 1 ]]; then
            sum=$(( sum + $digit ))
        else
            sum=$(( $sum + ( $digit != 9 ? ( ( 2 * $digit ) % 9 ) : 9 ) ))
        fi

        is_odd=$(( ! $is_odd ))
    }

    # NOTE: returning exit status of 0 on success
    return $(( 0 != ( $sum % 10 ) ))
}


for i in $(seq 1234496713247997000 1234496713247998000)
do
    if luhn_validate "$i"; then
        echo "$i is valid"
    else
        echo "$i is not valid"
    fi
done

としてスクリプトに入れ、script.sh実行権限を設定して次のように実行できchmod +x script.shます

$ ./script.sh

私はそれを動作させることができましたがGNU bash, version 4.3.46(2)-release (x86_64-pc-msys)、他のシステムではテストしていません。

PS: 自己責任で使用してください。

于 2017-01-03T05:55:49.600 に答える