Last updated: 30 October 2025 | Change log
Validate your customer's CVC before processing it.
To integrate the validation feature you must create an implementation of an AccessCheckoutCardValidationListener. Initialize the validation using the AccessCheckoutValidationInitialiser by passing in the android UI element in a CvcValidationConfig.
You can see an example of the CVC validation integration here.
To receive validation results of your customer's CVC you must create your own implementation of the AccessCheckoutCvcValidationListener.
package com.worldpay.access.checkout.sample.code
import com.worldpay.access.checkout.client.validation.listener.AccessCheckoutCvcValidationListener
class CvcValidationListener : AccessCheckoutCvcValidationListener {
    override fun onCvcValidated(isValid: Boolean) {
        //TODO: handle the cvc validation result
    }
    override fun onValidationSuccess() {
        //TODO: handle the form when the validation is complete i.e. all fields are valid
    }
}| Method | Description | 
|---|---|
onCvcValidated | This method is called with the validity of the CVC field. isValid indicates whether the field is in a valid or invalid state. | 
onValidationSuccess | This method is called when all fields are in a valid state. You would typically used this to enable the submit button. | 
After implementing the AccessCheckoutCvcValidationListener, you must initialize the validation for your view. To do this, create a CvcValidationConfig using the builder as shown below. Then use this to initialize the validation.
package com.worldpay.access.checkout.sample.code
// android library imports omitted
import com.worldpay.access.checkout.client.validation.AccessCheckoutValidationInitialiser
import com.worldpay.access.checkout.client.validation.config.CvcValidationConfig
class MainActivity : AppCompatActivity() {
    // fields omitted
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val cvcAccessCheckoutView: AccessCheckoutEditText = findViewById<AccessCheckoutEditText>(R.id.card_flow_text_cvc);
        // other view references omitted
        val cvcValidationListener = CvcValidationListener()
        val cvcValidationConfig = CvcValidationConfig.Builder()
                .cvc(cvcAccessCheckoutView)
                .validationListener(cvcValidationListener)
                .lifecycleOwner(this)
                .build()
        AccessCheckoutValidationInitialiser.initialise(cvcValidationConfig)
        //TODO: generate session here
    }
}Next steps