From 6990d052d5e95295e729aae28a0d30bfdcb98573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Thu, 11 Jan 2018 16:57:47 +0100 Subject: [XYZ-6] Add sampledata platform command (#8027) * Add fake dependency * [XYZ-6] Add sampledata platform command * Creating EMOJI_NAME_MAX_LENGTH as a constant and using it where needed --- vendor/github.com/icrowley/fake/credit_cards.go | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 vendor/github.com/icrowley/fake/credit_cards.go (limited to 'vendor/github.com/icrowley/fake/credit_cards.go') diff --git a/vendor/github.com/icrowley/fake/credit_cards.go b/vendor/github.com/icrowley/fake/credit_cards.go new file mode 100644 index 000000000..47d6ca726 --- /dev/null +++ b/vendor/github.com/icrowley/fake/credit_cards.go @@ -0,0 +1,69 @@ +package fake + +import ( + "strings" + + "strconv" +) + +type creditCard struct { + vendor string + length int + prefixes []int +} + +var creditCards = map[string]creditCard{ + "visa": {"VISA", 16, []int{4539, 4556, 4916, 4532, 4929, 40240071, 4485, 4716, 4}}, + "mastercard": {"MasterCard", 16, []int{51, 52, 53, 54, 55}}, + "amex": {"American Express", 15, []int{34, 37}}, + "discover": {"Discover", 16, []int{6011}}, +} + +// CreditCardType returns one of the following credit values: +// VISA, MasterCard, American Express and Discover +func CreditCardType() string { + n := len(creditCards) + var vendors []string + for _, cc := range creditCards { + vendors = append(vendors, cc.vendor) + } + + return vendors[r.Intn(n)] +} + +// CreditCardNum generated credit card number according to the card number rules +func CreditCardNum(vendor string) string { + if vendor != "" { + vendor = strings.ToLower(vendor) + } else { + var vendors []string + for v := range creditCards { + vendors = append(vendors, v) + } + vendor = vendors[r.Intn(len(vendors))] + } + card := creditCards[vendor] + prefix := strconv.Itoa(card.prefixes[r.Intn(len(card.prefixes))]) + num := []rune(prefix) + for i := 0; i < card.length-len(prefix); i++ { + num = append(num, genCCDigit(num)) + } + return string(num) +} + +func genCCDigit(num []rune) rune { + sum := 0 + for i := len(num) - 1; i >= 0; i-- { + n := int(num[i]) + if i%2 != 0 { + sum += n + } else { + if n*2 > 9 { + sum += n*2 - 9 + } else { + sum += n * 2 + } + } + } + return rune(((sum/10+1)*10 - sum) % 10) +} -- cgit v1.2.3-1-g7c22