Sha256: e98413dc02900d471a33a1349d5458a15e47f4bbeb966d07bb9ac3dad87d5415

Contents?: true

Size: 1.07 KB

Versions: 396

Compression:

Stored size: 1.07 KB

Contents

module.exports = class Luhn
  constructor: (number) ->
    @checkDigit = number % 10
    @addends = @calculateAddends(number)
    @checksum = @calculateChecksum(@addends)
    @valid = @determineIfValid(@checksum)

  calculateAddends: (number) ->

    numberAsString = "" + number + ""
    numbers = numberAsString.split('')

    addends = (@calculateAddend(i,numbers) for i in [0..numbers.length-1])
    addends.reverse()

  calculateAddend: (i,numbers) ->
    index = numbers.length - 1 - i

    currentAddend = parseInt(numbers[index])

    if (i + 1) % 2 == 0
      currentAddend = currentAddend * 2
      if currentAddend > 10
        currentAddend = currentAddend - 9

    currentAddend

  calculateChecksum: (numbers) ->
    numbers.reduce (x,y) -> x + y

  determineIfValid: (sum) ->
    (sum % 10 == 0)


  @create = (number) ->
    finalNumber = number * 10
    luhnNumber = new Luhn(finalNumber)
    index = 0

    while(!luhnNumber.valid)
      finalNumber = number * 10 + index
      luhnNumber = new Luhn(finalNumber)
      break if luhnNumber.valid
      index += 1

    finalNumber

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.138 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.137 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.136 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.135 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.134 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.133 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.132 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.131 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.130 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.129 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.128 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.127 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.126 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.125 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.124 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.123 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.122 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.121 tracks/coffeescript/exercises/luhn/example.coffee
trackler-2.2.1.120 tracks/coffeescript/exercises/luhn/example.coffee