Introduction
The Vault Transform secrets engine handles secure data transformation and tokenization against provided input value. The secret engine currently supports fpe
, masking
and tokenization
as data transformation types. Note, the Transform secrets engine requires Vault Enterprise with the Advanced Data Protection Transfrom module. While the documentation explains the use case of number transformation, this article we will be going through the process of how to perform text transformation for alphanumeric values.
Prerequistes
Transform secrets engine setup:
- Enable the
transform
secrets engine - Create a role containing the transformations that it can perform
- Create an alphabet defining a set of characters to use for format-preserving encryption (FPE) if not using the built-in alphabets.
- Create a template defining the rules for value matching if not using the built-in template
- Create a transformation to specify the nature of the data manipulation
- Determine min limit input length (L):
Major consideration before performing encode/decode operations on a text, we need to calculate a minimum input limit length of the text. The alphanumeric transformation will be carried out using the alphabet:“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
In the following steps we will observe how to calculate the minimum length of input text:
As per the information available on [transform-input-limits](https://www.vaultproject.io/docs/secrets/transform#input-limits)
The minimum input length formula is as below
Given an alphabet of length A, an input length L is valid if:
L >= 2,
AL >= 1,000,000
and L <= 2 * floor(logA(296)).
In your case A= 62 ( alphabet=“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
L is the length of the input for encode/decode operations.
Note, as per our formula above. L >= 2, AL >= 1,000,000 Thus, A=62 (<-- Alphabet Resource length defined in Transform) A to power L = 62 ^ 3 = 238328 A to power L = 62^ 4 = 14776336 AL = 62^3 = 238328. (doesn't meet the AL >=1,000,000 requirement)
AL = 524 = 7311616 ( meets AL >= 1,000,000 requirement)
So, the MIN char length limit is 4. (L=4)
Procedure
The followings steps will update configuration for the transform secret engine to transform alphanumeric text:
- Enable the
transform
secrets engine :vault secrets enable transform
- Create a role and transformation:
$ vault write transform/role/alphabets transformations=text-transformations
-
List the transformation role created:
$ vault list transform/role
- Create an alphabet:
$ vault list transform/rolevault write transform/alphabet/LowerUpperNumber alphabet="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- Create a custom template:
$ vault write transform/template/text-alpha type=regex \
pattern="^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*$|^[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*[^a-zA-Z0-9]*([0-9a-zA-Z]{1})[^a-zA-Z0-9]*([0-9a-zA-Z]{1}).{0,18}$" \
alphabet=loweruppernumber - Write the transformation:
$ vault write transform/transformations/text-transformations \
template=“text-alpha” \
tweak_source=internal \
allowed_roles=alphabets - Verify the transformation:
$ vault list transform/transformations/fpe
Keys
----
card-number
ccn-fpe
text-transformations - Read the transformation:
$ vault read transform/transformations/fpe/text-transformations
Key Value
--- -----
allowed_roles [alphabets]
template text-alpha
templates [text-alpha]
tweak_source internal
type fpe - Perform encode operation for alphanumeric text:
$ vault write transform/encode/alphabets transformation=text-transformations value="H3lp"
Key Value
--- -----
encoded_value PaOa - Perform decode operation for the encoded text:
$ vault write transform/decode/alphabets transformation=text-transformations value="PaOa"
Key Value
--- -----
decoded_value H3lp
The text transformation is performed with the instructions above, as we have found that for alphanumeric text, the minimum input length is "4", if you try to perform transform encode/decode on the text below minimum length you will get the error "Invalid input length"
Reference Links: