Solved luhn in Bash
This commit is contained in:
55
bash/luhn/luhn.sh
Normal file
55
bash/luhn/luhn.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Strip all spaces from input
|
||||
input=$(echo $1 | tr -d ' ')
|
||||
|
||||
# Check input length
|
||||
if [ ${#input} -le 1 ]
|
||||
then
|
||||
echo "false"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check for non-digit characters
|
||||
if [[ $input =~ [^[:digit:]] ]]
|
||||
then
|
||||
echo "false"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Double every second digit from the right
|
||||
doubled_input=""
|
||||
for (( i=${#input}-1; i>=0; i-- ))
|
||||
do
|
||||
# Checks if the current digit is a second digit
|
||||
if [ $(((${#input}-i) % 2)) -eq 0 ]
|
||||
then
|
||||
doubled_digit=$(( ${input:$i:1} * 2 ))
|
||||
if [ $doubled_digit -gt 9 ]
|
||||
then
|
||||
doubled_digit=$(( doubled_digit - 9 ))
|
||||
fi
|
||||
# Adds the new digit to the left of "doubled_input"
|
||||
doubled_input="${doubled_digit}${doubled_input}"
|
||||
# If is not a second digit, copy it to the new string.
|
||||
else
|
||||
doubled_input="${input:$i:1}${doubled_input}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Calculate the sum of all digits
|
||||
sum=0
|
||||
for (( i=0; i<${#doubled_input}; i++ ))
|
||||
do
|
||||
sum=$(( sum + ${doubled_input:$i:1} ))
|
||||
done
|
||||
|
||||
# Check if sum is divisible by 10
|
||||
if [ $(( sum % 10 )) -eq 0 ]
|
||||
then
|
||||
echo "true"
|
||||
else
|
||||
echo "false"
|
||||
fi
|
||||
Reference in New Issue
Block a user