{"templateId":"markdown","versions":[{"version":"v1","label":"v1","link":"/products/checkout/ios/v1/card-validator","default":false,"active":false,"folderId":"bfac8b17"},{"version":"v2","label":"v2","link":"/products/checkout/ios/v2/card-validator","default":false,"active":false,"folderId":"bfac8b17"},{"version":"v3","label":"v3","link":"/products/checkout/ios/v3/card-validator","default":false,"active":false,"folderId":"bfac8b17"},{"version":"v4","label":"v4","link":"/products/checkout/ios/v4/card-validator","default":false,"active":false,"folderId":"bfac8b17"},{"version":"v5","label":"v5 (Latest)","link":"/products/checkout/ios/card-validator","default":true,"active":true,"folderId":"bfac8b17"}],"sharedDataIds":{"sidebar":"sidebar-products/checkout/ios/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["partial","admonition"]},"custom_product":"Checkout","type":"markdown"},"seo":{"title":"Card validation","description":"Worldpay for Developers - docs, code examples, resources and tools. Everything you need to build your omnichannel payment solution.","siteUrl":"https://docs.worldpay.com/access","image":"/access/assets/worldpay-logo-light.21b7daf79984773a9fcd7d4fbcb07ae5289dfffd6023c4c3dca720c7058e53dc.33f780a6.svg","keywords":"documentation, api, openapi, sdks, developer, payments, json, payouts, 3ds","jsonLd":{"@context":"https://schema.org","@type":"Organization","url":"https://docs.worldpay.com/access","name":"Worldpay"},"meta":[{"name":"google-site-verification","content":"zjziIKaP3ImsqsfhYnEBnq1R85UabiSwl7HTXuwtZuo"},{"name":"doc_product","content":"Access"},{"name":"doc_category","content":"Documentation"}],"llmstxt":{"hide":false,"sections":[{"title":"Payments API","description":"Payment orchestration API combining fraud assessment, 3ds authentication, SCA exemptions, Worldpay Token creation and a card or wallet based payment.","includeFiles":["products/payments/@20240601/**/*"],"excludeFiles":[]},{"title":"Payment Queries API","description":"Querying your payments data, based on a variety of parameters.","includeFiles":["products/payment-queries/@v1/**/*"],"excludeFiles":[]},{"title":"Card BIN Data API","description":"Provides detailed information about a card.","includeFiles":["products/card-bin/@v1/**/*"],"excludeFiles":[]},{"title":"3DS Authentication API","description":"Request 3DS authentication to protect against fraud, be SCA compliant and to shift liability using this standalone API.","includeFiles":["products/3ds/@v3/**/*"],"excludeFiles":[]},{"title":"FraudSight API","description":"Request a risk assessment and receive a response with an outcome (e.g. lowRisk) using this standalone API.","includeFiles":["products/fraudsight/@v1/**/*"],"excludeFiles":[]},{"title":"Checkout SDK","description":"Integrate using our clientside SDKs for both web and native devices. Benefit from SAQ-A/PCI-SSF compliance.","includeFiles":["products/checkout/web/@v2/**/*","products/checkout/ios/@v4/**/*","products/checkout/android/@v4/**/*","products/checkout/react-native/@v3/**/*","products/checkout/flutter/@v1/**/*"],"excludeFiles":[]},{"title":"Tokens API","description":"Minimizes the exposure of sensitive card details and increases the security of your customer's card details.","includeFiles":["products/tokens/@v3/**/*"],"excludeFiles":[]},{"title":"Card Payments API","description":"Request a card payment using this standalone API, requires separate requests for 3DS, Fraud assessment etc.","includeFiles":["products/card-payments/@v7/**/*"],"excludeFiles":[]},{"title":"Card Verifications API","description":"Verify your customer's card to maximize your authentication rates.","includeFiles":["products/card-verifications/@v6/**/*"],"excludeFiles":[]},{"title":"Account Payouts API","description":"Send funds to your customer's bank accounts and search for payouts using parameters.","includeFiles":["products/account-payouts/@20250101/**/*"],"excludeFiles":[]},{"title":"APMs","description":"Pay using eWallets, bank transfers, direct debits, local card schemes, Postpay and eInvoice/ Buy Now Pay Later.","includeFiles":["products/apms/@20240701/**/*"],"excludeFiles":[]},{"title":"Balance API","description":"Request your account details for a single account or all accounts under an entity.","includeFiles":["products/balance/@20250101/**/*"],"excludeFiles":[]},{"title":"Card Payouts API","description":"Send funds to your customer's cards.","includeFiles":["products/card-payouts/@v4/**/*"],"excludeFiles":[]},{"title":"Events (Webhooks)","description":"Receive status updates from Access Worldpay by setting up a webhook.","includeFiles":["products/events/@v1/**/*"],"excludeFiles":[]},{"title":"FX API","description":"Manage Foreign Exchange (FX) on your payments.","includeFiles":["products/fx/@v1/**/*"],"excludeFiles":[]},{"title":"Hosted Payment Pages (HPP) API","description":"Our low-code option to take payments securely at the lowest PCI compliance level - SAQ A.","includeFiles":["products/hosted-payment-pages/@v1/**/*"],"excludeFiles":[]},{"title":"Money Transfers API","description":"Money Transfer OCTs (Original Credit Transaction) allow funds to be pushed to an eligible card in 30 minutes or less.","includeFiles":["products/money-transfers/@v1/**/*"],"excludeFiles":[]},{"title":"Parties API","description":"Create parties, manage your payout instruments and beneficial owners and carry out identity verification checks.","includeFiles":["products/parties/@20250101/**/*"],"excludeFiles":[]},{"title":"SCA Exemptions API","description":"Maximize a frictionless checkout experience by using issuer data insights to apply exemptions.","includeFiles":["products/sca-exemptions/@v1/**/*"],"excludeFiles":[]},{"title":"Split Payments API","description":"Divide funds from a single payment amongst yourself and your parties/sellers.","includeFiles":["products/split-payments/@20250625/**/*"],"excludeFiles":[]},{"title":"Statements API","description":"Retrieve your account statement and see individual entries for all credits and debits.","includeFiles":["products/statements/@20250101/**/*"],"excludeFiles":[]},{"title":"Transfers API","description":"Transfer funds from source account to target account.","includeFiles":["products/transfers/@20250101/**/*"],"excludeFiles":[]},{"title":"Verified Tokens API","description":"Verified Tokens ensures that your customer's payment details are valid and CIT compliant when creating a token.","includeFiles":["products/verified-tokens/@v3/**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Last updated"]},": 30 October 2025 | ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/checkout/ios/changelog/"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Change log"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"card-validation","__idx":0},"children":["Card validation"]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Validate your customer's card details before processing them."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The validation does not check if your customer's card details are correct."," ","The validation only checks the format of the entered details."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"get-started","__idx":1},"children":["Get started"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before you begin, ensure:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You have added the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutSDK"]}," to your project as a Cocoapods dependency"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You have added an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["import AccessCheckoutSDK"]}," at the top of your swift file"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The key components for this integration are:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A reference to your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutUITextField"]},"'s for PAN, expiry date and CVC"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutCardValidationDelegate"]}," designed to receive validation events"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An instance of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CardValidationConfig"]}," containing all the information required for the initialization of the validation"," ","flow, including references to the UI components to enable validation for"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutClient"]}," responsible for initializing the validation flow"]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Full sample integration"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can see an example of the card validation integration ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/Worldpay/access-checkout-ios/tree/master/AccessCheckoutDemo"},"children":["here"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reference-your-ui-components","__idx":2},"children":["Reference your UI components"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You must reference your UI components for PAN, expiry date, and CVC, as these are required for card validation."," ","Instructions can be found ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/checkout/ios/card-only#reference-your-ui-components"},"children":["here"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"implement-the-validation-listener","__idx":3},"children":["Implement the validation listener"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To receive validation events and card brand updates as your customer enters their card details,"," ","you are required to create your own implementation of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutCardValidationDelegate"]}," protocol."," ","Each function of this protocol is optional, giving you the flexibility to listen only to the events that are relevant"," ","to your application."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"swift","header":{"controls":{"copy":{}}},"source":"extension ViewController: AccessCheckoutCardValidationDelegate {\n\n    // This event handler is notified when the card brand detected by the SDK has changed\n    func cardBrandsChanged(cardBrands: [CardBrand]) {\n        // The cardBrands list may contain one brand, or multiple brands for a co-branded card\n        // CardBrand objects contains a name and optionally an array of of image objects\n        // with a URL and a type (either image/png or image/svg+xml)\n\n        // You might want to display the brand name of the first card brand returned\n        // or in the case of a co-branded card, you may want to prompt shoppers with a choice\n        // of brands to pay with\n\n        // Don't forget to use the UI thread to update your views\n    }\n\n    // This event handler is notified when the PAN becomes valid or invalid\n    func panValidChanged(isValid: Bool) {\n        // You might want to change the text color\n        panAccessCheckoutView.textColor = isValid ? nil : UIColor.red\n\n        if !valid {\n            // You might want to disable a submit button which would normally be clicked on when all fields are valid\n            submitButton.isEnabled = false\n        }\n    }\n\n    // This event handler is notified when the expiry date becomes valid or invalid\n    func expiryDateValidChanged(isValid: Bool) {\n        // You might want to change the text color\n        expiryDateAccessCheckoutView.textColor = isValid ? nil : UIColor.red\n\n        if !valid {\n            // You might want to disable a submit button which would normally be clicked on when all fields are valid\n            submitButton.isEnabled = false\n        }\n    }\n\n    // This event handler is notified when the CVC becomes valid or invalid\n    func cvcValidChanged(isValid: Bool) {\n        // You might want to change the text color\n        cvcAccessCheckoutView.textColor = isValid ? nil : UIColor.red\n\n        if !valid {\n            // You might want to disable a submit button which would normally be clicked on when all fields are valid\n            submitButton.isEnabled = false\n        }\n    }\n\n    // This event handler is notified when the PAN, expiry date and CVC are all valid\n    func validationSuccess() {\n        // You might want to enable a submit button when all fields are valid\n        submitButton.isEnabled = true\n    }\n}\n","lang":"swift"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"function-and-parameter-descriptions","__idx":4},"children":["Function and parameter descriptions"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Method"},"children":["Method"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cardBrandsChanged"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["This method is called with card brand(s) detected from the card number your customer is entering. The array contains the identified card brand(s), starting with the global brand, followed by the domestic brand if a co-branded card is in use. ",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}," If the card brand(s) can't be identified, the method is called with an empty array.",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}," Use this method to:",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"• display the appropriate card brand logo using the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://access.worldpay.com/access-checkout/cardTypes.json"},"children":["hosted images"]}," - PNG/SVG formats available (only global brand contains image resources)",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"• detect co-branded cards and prompt customers to select their preferred brand for the payment (see our ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/checkout/ios/co-branded-cards"},"children":["co-branded cards"]}," documentation)",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"• comply with the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://eur-lex.europa.eu/eli/reg/2015/751"},"children":["European Union (EU) Interchange Fee Regulation (IFR) 2015/751"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["panValidChanged"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["This method is called with the validity of the pan field. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["isValid"]}," indicates whether the field is in a valid or invalid state."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expiryDateValidChanged"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["This method is called with the validity of the expiry date field. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["isValid"]}," indicates whether the field is in a valid or invalid state."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cvcValidChanged"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["This method is called with the validity of the CVC field. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["isValid"]}," indicates whether the field is in a valid or invalid state."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validationSuccess"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["This method is called when all fields are in a valid state. You typically use this to enable the submit button."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"initialize-the-accesscheckoutclient-and-validation","__idx":5},"children":["Initialize the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutClient"]}," and validation"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Recommendation"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We highly recommend to do this in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["viewDidLoad()"]}," handler of your UIViewController."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You must first initialize the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutClient"]}," using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutClientBuilder"]},","," ","providing your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["accessBaseUrl"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkoutId"]},"."," ","Instructions can be found ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/checkout/ios/card-only#initialize-the-accesscheckoutclient"},"children":["here"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After implementing the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutCardValidationDelegate"]},","," ","initialize validation for your views by creating a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CardValidationConfig"]}," ","using the builder and passing it to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["initialiseValidation"]}," method of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccessCheckoutClient"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"swift","header":{"controls":{"copy":{}}},"source":"import AccessCheckoutSDK\n\nclass MyViewController: UIViewController {\n    private let accessBaseUrl = \"TARGET_BASE_URL\"\n    private let checkoutId = \"YOUR_CHECKOUT_ID\"\n\n    @IBOutlet weak var panAccessCheckoutView: AccessCheckoutUITextField!\n    @IBOutlet weak var expiryDateAccessCheckoutView: AccessCheckoutUITextField!\n    @IBOutlet weak var cvcAccessCheckoutView: AccessCheckoutUITextField!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // other fields omitted\n\n        do {\n            // Initialize the AccessCheckoutClient\n            let accessCheckoutClient = try AccessCheckoutClientBuilder()\n                .accessBaseUrl(accessBaseUrl)\n                .checkoutId(checkoutId)\n                .build()\n\n            // Create the validation configuration\n            let validationConfig = try CardValidationConfig.builder()\n                .pan(panAccessCheckoutView)\n                .expiryDate(expiryDateAccessCheckoutView)\n                .cvc(cvcAccessCheckoutView)\n                .validationDelegate(self)\n                .build()\n\n            // Initialize validation using the client\n            accessCheckoutClient.initialiseValidation(validationConfig)\n        } catch {\n            // Handle initialization error (e.g., log or show alert)\n        }\n    }\n}\n\n","lang":"swift"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"card-validation-rules","__idx":6},"children":["Card validation rules"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The validation logic in the SDK, is based off a set of default rules for any card type. Specific brand rules are fetched"," ","from a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CardTypes"]}," JSON file, which holds the validation rules and card brand logos for each brand. The icons"," ","are available in both ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SVG"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PNG"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"validation-rules","__idx":7},"children":["Validation rules"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The table below shows the rules that our SDK uses to validate your customer's card details."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Card name"},"children":["Card name"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"BIN range"},"children":["BIN range"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"PAN length"},"children":["PAN length"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"CVC length"},"children":["CVC length"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Amex"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["34, 37"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["15"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Diners"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["300-305, 3095, 36, 38, 39"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["14, 16, 19"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Discover"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["6011, 644 - 649, 65"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["16, 19"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JCB"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2131, 1800, 3088 - 3094, 3096 - 3102, 3112 - 3120, 3158 - 3159, 3337 - 3349, 3528 - 3589"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["16, 17, 18, 19"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Maestro"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["493698, 500000 - 506698, 506779 - 508999, 56 - 59, 63, 67, 6"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["12, 13, 14, 15, 16, 17, 18, 19"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["MasterCard"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["51 - 55, 2221 - 2229, 223 - 229, 23 - 26, 270 - 271, 2720: optimized using 22 - 27"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["16"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Visa"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["13, 16, 18, 19"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"additional-configuration-options","__idx":8},"children":["Additional configuration options"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"card-brand-restriction","__idx":9},"children":["Card brand restriction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK enables you to optionally provide a list of card brands that you support."," ","This means that if you do not support a certain card brand,"," ","the SDK notifies your code of an invalid PAN if an unsupported brand is recognized."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By default, the SDK allows cards from any brand. If you do not wish to restrict the card brands that you accept then you"," ","do not need to pass any configuration."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"example-configuration","__idx":10},"children":["Example configuration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To restrict the card brands that you accept, simply pass in an array of the brands that you ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["do"]}," wish to accept when"," ","initializing the SDK."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following validation configuration restricts the SDK to accept only American Express, Visa or Mastercard BIN ranges."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"swift","header":{"controls":{"copy":{}}},"source":"let validationConfig = try! CardValidationConfig.builder()\n    ...\n    .acceptedCardBrands([\"visa\", \"mastercard\", \"AMEX\"])\n    ...\n    .build()\n","lang":"swift"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"currently-supported-card-brands","__idx":11},"children":["Currently supported card brands"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The table below shows the card brands recognized by our SDK."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Brand"},"children":["Brand"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Code"},"children":["Code"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["American Express"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"amex\""]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Diners"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"diners\""]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Discover"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"discover\""]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JCB"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"jcb\""]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Maestro"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"maestro\""]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Mastercard"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"mastercard\""]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Visa"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"visa\""]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the SDK does not recognize a PAN as one of the above brands, it will be permitted as long as it meets the usual"," ","criteria for a valid PAN."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pan-formatting","__idx":12},"children":["PAN formatting"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK allows PAN formatting as the customer types. This feature is disabled by default."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The PAN is formatted in the following way:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Card type"},"children":["Card type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Formatting"},"children":["Formatting"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Visa, Mastercard, JCB, Discover, Diners, Maestro"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["XXXX XXXX XXXX XXXX"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Amex"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["XXXX XXXXXX XXXXX"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"enabling-pan-formatting","__idx":13},"children":["Enabling PAN formatting"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To enable the PAN formatting behavior, simply call the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["enablePanFormatting"]}," method on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CardValidationConfig"]}," builder."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"swift","header":{"controls":{"copy":{}}},"source":"let validationConfig = try! CardValidationConfig.builder()\n    ...\n    .enablePanFormatting()\n    ...\n    .build()\n","lang":"swift"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next steps"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/checkout/ios/card-only"},"children":["Create a session to pay with a card"]}," or ",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/checkout/ios/card-and-cvc"},"children":["Create sessions to pay with a card and CVC"]}]}]},"headings":[{"value":"Card validation","id":"card-validation","depth":1},{"value":"Get started","id":"get-started","depth":2},{"value":"Reference your UI components","id":"reference-your-ui-components","depth":2},{"value":"Implement the validation listener","id":"implement-the-validation-listener","depth":2},{"value":"Function and parameter descriptions","id":"function-and-parameter-descriptions","depth":3},{"value":"Initialize the AccessCheckoutClient and validation","id":"initialize-the-accesscheckoutclient-and-validation","depth":2},{"value":"Card validation rules","id":"card-validation-rules","depth":3},{"value":"Validation rules","id":"validation-rules","depth":4},{"value":"Additional configuration options","id":"additional-configuration-options","depth":2},{"value":"Card brand restriction","id":"card-brand-restriction","depth":3},{"value":"Example configuration","id":"example-configuration","depth":4},{"value":"Currently supported card brands","id":"currently-supported-card-brands","depth":4},{"value":"PAN formatting","id":"pan-formatting","depth":3},{"value":"Enabling PAN formatting","id":"enabling-pan-formatting","depth":4}],"frontmatter":{"breadcrumbs":{"hide":true},"seo":{"title":"Card validation"}},"lastModified":"2025-11-26T14:54:42.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/checkout/ios/card-validator","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}