2017-01-03 5 views
0

私はこのような(19桁)連番生成していました:Luhn Sequential番号を生成してLinuxに保存するには?

seq 1234496713247997000 1234496713247998000 > seq_numbers.txt 

をし、その後のLuhnチェッカーを使用してオンラインそれらを検証します。 2段階アプローチをとるのではなく、どうやって同じようなbashスクリプトで実行すればいいですか?そして、有効な数値だけをファイルに出力しますか?

+1

コマンドラインで 'luhn'チェッカーを呼び出す方法は? – Inian

+0

わからない、上の質問を書き直してbashファイル – Hopelessone

+0

と書いてみました。何を試しましたか?私たちの多くは、あなたのコードを改善するのを手伝ってくれることを喜んでしますが、短期間の未払いのプログラミングスタッフとしての幸せはありません。これまでの作業を[MCVE](http://stackoverflow.com/help/mcve)に見せて、あなたが期待していた結果と得られた結果をお見せしましょう。 – ghoti

答えて

1

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

あなたが、私はそれを動作させることができたあなたはscript.shとしてスクリプトにそれを置くと権限chmod +x script.shを実行する設定と

$ ./script.sh 

として実行することができます

#!/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 

として使用することができますGNU bash, version 4.3.46(2)-release (x86_64-pc-msys)にあり、他のシステムではテストしていません。

P.S .:自己責任で使用してください。

+0

実際にこのコードをテストしましたか?それは私にとってはうまくいかない。 Google検索のヒットしそうなヒットから単純にコピーして貼り付けたようです。 :-P – ghoti

+0

@ほてい:うん、それは私のためにうまくいった、私はテスト結果を投稿することができます、それは一見長いです。 – Inian

+0

@ghoti:これは、最初に大きな免責事項を追加した理由です。 – Inian

関連する問題