stripe_card_validator.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "stripe/stripe_card.h"
  9. #include <vector>
  10. #include <optional>
  11. class QDate;
  12. namespace Stripe {
  13. enum class ValidationState {
  14. Invalid,
  15. Incomplete,
  16. Valid,
  17. };
  18. struct CardValidationResult {
  19. ValidationState state = ValidationState::Invalid;
  20. CardBrand brand = CardBrand::Unknown;
  21. bool finished = false;
  22. };
  23. [[nodiscard]] CardValidationResult ValidateCard(const QString &number);
  24. struct ExpireDateValidationResult {
  25. ValidationState state = ValidationState::Invalid;
  26. bool finished = false;
  27. };
  28. [[nodiscard]] ExpireDateValidationResult ValidateExpireDate(
  29. const QString &date,
  30. const std::optional<QDate> &overrideExpireDateThreshold);
  31. [[nodiscard]] ValidationState ValidateParsedExpireDate(
  32. quint32 month,
  33. quint32 year,
  34. const std::optional<QDate> &overrideExpireDateThreshold);
  35. struct CvcValidationResult {
  36. ValidationState state = ValidationState::Invalid;
  37. bool finished = false;
  38. };
  39. [[nodiscard]] CvcValidationResult ValidateCvc(
  40. const QString &number,
  41. const QString &cvc);
  42. [[nodiscard]] std::vector<int> CardNumberFormat(const QString &number);
  43. } // namespace Stripe