또 심심해서 bash에서 만들 수 있는 프로그램 목록을 찾아보고, CC(신용카드) 유효성 검사기를 만들어 보려고 합니다. 유효성을 검사하려면 문자를 배열로 분할해야 하는데, 뭔가 잘못하고 있는 것 같습니다. 나는 코딩에 능숙하지 않아서 내 코드가 무엇을 잘못하고 있는지 실제로 이해하지 못합니다.
암호:
#!/bin/bash
getchecknumber(){ # get the last digit of the cc number
str=$1
checknum=$(echo {str: -1})
}
getrest(){ # get the rest of the numbers in the sequence
sequence=$(echo {str%?})
}
doubleeveryother(){ # double every other number
# split characters into an array
arr=()
i=0
while [ "$i" -lt "${#str}" ]; do
arr+=(${str:$i:1})
i=$((i+1))
done
for ((i=1; i<=15; i++))
do {
char=$(echo "$i-1" | bc)
double=$(echo "${arr[$char]} * 2" | bc)
if (( $i % 2 == 0 )) ; then #check if number is 'every other' (divisible by 2)
foo=bar #do nothing
else
arr[$char]=$double #replace the number in the array
fi
}
done
}
adddigitsum() { #split a two digit number into two numbers and add them
NUMSPLIT=(0 0)
for ((a=0; a<=14; a++))
do {
number=$(echo ${arr[$a]})
if ((number>=10)) ; then
for ((b=0; b<=1; b++))
do
NUMSPLIT[$b]=$( echo ${number:$n:1} )
done
addeddigit=$( echo "${NUMSPLIT[0]} + ${NUMSPLIT[1]}" | bc )
arr[$a]=$addeddigit # replace the number in the array
fi
}
done
}
addall(){ #add all the digits
sum=$( IFS="+"; bc <<< "${arr[*]}" )
}
multiply(){ #multiply by 9
result=$( echo "$sum * 9" | bc )
}
validate(){ #see if the last number of 'result' is equal to the checknum
resultchecknum=$(echo {string%?})
if [[ $resultchecknum == $checknum ]] ; then
echo "CC Number is valid!"
else
echo "CC Number is not valid."
fi
}
getchecknumber
getrest
doubleeveryother
adddigitsum
addall
multiply
validate
산출:
./cc-validator.sh 4000000000000000
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error
CC Number is not valid.