Introduction:
The vault Transform secrets engine handles secure data transformation and tokenization against provided input value. The secret engine currently performs masking, tokenization and fpe operations.
While the documentation explains the use case of number transformation, in this article we will be going through the process of how to perform text transformation for alphanumeric values.
Workflow of Transform secrets engine
Transform secrets engine configuration workflow:
- 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
How to find the 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)
How it works:
In the followings steps we will update on how to configure the transform secret engine to transform an alphanumeric text:
- Enable the
transform
secrets engine :vault secrets enable transform
- Create a role and transformation for the text transformation:
vault write transform/role/alphabets transformations=text-transformations
List the transformation role created:vault list transform/role
-
Create an alphabet:
vault write transform/alphabet/LowerUpperNumber alphabet="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
List newly created alphabetvault list transform/alphabet
- 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 \
Verify the Transformation:
template=“text-alpha” \
tweak_source=internal \
allowed_roles=alphabets
vault list transform/transformations/fpe
Read the transformation:
Keys
----
card-number
ccn-fpe
text-transformations
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: