github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/validators/luhn-algorithm.go (about)

     1  /* For license and copyright information please see LEGAL file in repository */
     2  
     3  package validators
     4  
     5  // LuhnAlgorithm validate strings with the luhn (mod-10) algorithm!
     6  // https://en.wikipedia.org/wiki/Luhn_algorithm
     7  func LuhnAlgorithm(pan string) bool {
     8  	/* Validate string with Luhn (mod-10) */
     9  	var alter bool
    10  	var checksum int
    11  
    12  	for position := len(pan) - 1; position > -1; position-- {
    13  		digit := int(pan[position] - 48)
    14  		if alter {
    15  			digit = digit * 2
    16  			if digit > 9 {
    17  				digit = (digit % 10) + 1
    18  			}
    19  		}
    20  		alter = !alter
    21  		checksum += digit
    22  	}
    23  	return checksum%10 == 0
    24  }