Bonjour,
J’essaye d’implémenter l’algorithme de Luhn utilisé, par exemple, pour vérifier la validité d’une carte bancaire. L’algorithme est le suivant :
Voici ce que j’ai tenté :
bool checksum(std::vector<unsigned>);
int main()
{
std::vector<unsigned> sequence{ 5, 2, 0, 5, 5, 9, 7, 2, 3, 1, 1, 4, 7, 9, 0, 8 };
if (checksum(sequence))
std::cout << "The credit card is valid." << std::endl;
else
std::cout << "The credit card is not valid." << std::endl;
}
bool checksum(std::vector<unsigned> seq)
{
for (auto it{ seq.rbegin() }; it != seq.rend(); it += 2) {
*it *= 2;
if (*it > 9) *it -= 9;
}
return std::accumulate(seq.begin(), seq.end(), 0) % 10 == 0;
}
Mon problème est que je ne respecte pas la condition "en commençant par l’avant dernier" car je ne vois pas comment le faire en utilisant les itérateurs. Ce qui implique que ma fonction me retourne un résultat erroné.
Comment parcourir une collection en partant de l’avant dernier élément ?
Merci pour votre aide !
+0
-0