////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////
:documentationPath: /plugins/transforms/
:language: en_US
:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/plugins/transforms/creditcardvalidator/src/main/doc/creditcardvalidator.adoc
= Credit card validator

== Description

The Credit card validator transform will help you check the following:

* The validity of a credit card number. This uses a LUHN10 (MOD-10) algorithm.
* The credit card vendor that handles the number: VISA, MasterCard, Diners Club, EnRoute, American Express (AMEX),...


== Options


* transform name: the transform name, unique in a pipeline
* Credit card field: the name of the input field that will contain the credit card number during execution
* Get only digits? : Enable this option if you want to strip all non-numeric characters from the (String) input field
* Output Fields
  ** Result fieldname: the name of the (Boolean) output field indicating the validity of the number
  ** Credit card type field: the name of the output field that will hold the credit card type (vendor)
  ** Not valid message: the name of the output field that will hold the error message.
