<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sharif</title>
    <description>The latest articles on DEV Community by Sharif (@vipxieliang).</description>
    <link>https://dev.to/vipxieliang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066701%2Faa86de16-4445-4b90-8dfe-ebdb824b942c.png</url>
      <title>DEV Community: Sharif</title>
      <link>https://dev.to/vipxieliang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vipxieliang"/>
    <language>en</language>
    <item>
      <title>Simple, Elegant, Reliable - 90+ ready-to-use validators for Chinese business scenarios</title>
      <dc:creator>Sharif</dc:creator>
      <pubDate>Fri, 07 Aug 2026 03:20:22 +0000</pubDate>
      <link>https://dev.to/vipxieliang/simple-elegant-reliable-90-ready-to-use-validators-for-chinese-business-scenarios-59g7</link>
      <guid>https://dev.to/vipxieliang/simple-elegant-reliable-90-ready-to-use-validators-for-chinese-business-scenarios-59g7</guid>
      <description>&lt;h2&gt;
  
  
  📑 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Why We Created ValidX?&lt;/li&gt;
&lt;li&gt;Why Choose ValidX?&lt;/li&gt;
&lt;li&gt;5-Minute Quick Start&lt;/li&gt;
&lt;li&gt;Multilingual Support&lt;/li&gt;
&lt;li&gt;Important: Null/Empty String Handling&lt;/li&gt;
&lt;li&gt;Thread Safety&lt;/li&gt;
&lt;li&gt;
Supported Validation Annotations

&lt;ul&gt;
&lt;li&gt;Quick Reference Table&lt;/li&gt;
&lt;li&gt;Basic Validation&lt;/li&gt;
&lt;li&gt;Identity Validation&lt;/li&gt;
&lt;li&gt;Financial Validation&lt;/li&gt;
&lt;li&gt;Education/Professional Qualification&lt;/li&gt;
&lt;li&gt;Network Validation&lt;/li&gt;
&lt;li&gt;China-Specific Validation&lt;/li&gt;
&lt;li&gt;Automotive Validation&lt;/li&gt;
&lt;li&gt;Book-Related Validation&lt;/li&gt;
&lt;li&gt;Mobile Device Validation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;More Validation Annotations&lt;/li&gt;
&lt;li&gt;Contribution&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;ValidX is an open-source Java validation library focused on Chinese business scenarios, making validation simple, elegant, and reliable. Built on JSR-380 standards with 90+ specialized annotations for Chinese identity cards, phone numbers, bank cards, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why We Created ValidX?
&lt;/h2&gt;

&lt;p&gt;When developing applications for Chinese users, we frequently encountered these challenges:&lt;/p&gt;

&lt;h3&gt;
  
  
  Pain Point 1: Java Has Too Few Built-in Validation Rules, Far Less Than Other Language Frameworks
&lt;/h3&gt;

&lt;p&gt;If you've used web frameworks in other languages, such as PHP's ThinkPHP or JavaScript's Validator.js, you'll notice they come with incredibly rich built-in validation rules: &lt;code&gt;mobile&lt;/code&gt;, &lt;code&gt;idcard&lt;/code&gt;, &lt;code&gt;zip&lt;/code&gt;, &lt;code&gt;alphaNum&lt;/code&gt;, etc.—ready to use out of the box, simple and convenient.&lt;/p&gt;

&lt;p&gt;But in the Java world, standard Bean Validation only provides a handful of generic annotations like &lt;code&gt;@Email&lt;/code&gt; and &lt;code&gt;@Pattern&lt;/code&gt;. For common Chinese business scenarios—identity cards, phone numbers, bank cards, unified social credit codes—there's absolutely no support.&lt;/p&gt;

&lt;p&gt;This forces every Java project to reinvent the wheel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing complex regular expressions yourself&lt;/li&gt;
&lt;li&gt;Implementing Luhn algorithm for bank card validation&lt;/li&gt;
&lt;li&gt;Handling identity card check digit calculations&lt;/li&gt;
&lt;li&gt;Copy-pasting validation code found online&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why can't Java validation be as ready-to-use as other frameworks?&lt;/strong&gt; This is why ValidX was born.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pain Point 2: Scattered Validation Logic Difficult to Maintain
&lt;/h3&gt;

&lt;p&gt;As projects grow, validation logic becomes scattered across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual validation in Controller layer&lt;/li&gt;
&lt;li&gt;Business validation in Service layer&lt;/li&gt;
&lt;li&gt;Static methods in utility classes&lt;/li&gt;
&lt;li&gt;Duplicate validation implementations in different modules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This leads to code duplication, maintenance difficulties, and error-prone implementations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pain Point 3: Lack of Chinese Error Messages and Multi-language Support
&lt;/h3&gt;

&lt;p&gt;When using standard annotations, error messages are typically in English, or require manual configuration of resource files. For Chinese users, we need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Friendly Chinese error messages&lt;/li&gt;
&lt;li&gt;Multi-language switching support&lt;/li&gt;
&lt;li&gt;Customizable error message templates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ValidX's Solution
&lt;/h3&gt;

&lt;p&gt;Based on these pain points, we created ValidX with the goal: &lt;strong&gt;Make Java validation simple, elegant, and reliable&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;90+ Chinese scenario validators&lt;/strong&gt; - From ID cards to express tracking numbers, from QQ numbers to license plates, covering all aspects of Chinese business&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two usage styles&lt;/strong&gt; - Annotation-based (for DTO object validation) and fluent chain API (for dynamic validation), flexible for different scenarios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-config multi-language&lt;/strong&gt; - Supports 8 languages, automatically adapts to user language environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-grade reliability&lt;/strong&gt; - 1300+ unit tests ensure quality, production-validated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple to use&lt;/strong&gt; - Just one dependency, works out of the box, no complex configuration needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We hope ValidX can become the standard tool for every Java application serving Chinese users, allowing developers to focus on business logic rather than repeatedly writing validation code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Import once, benefit forever. Stop reinventing the wheel.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Why Choose ValidX?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🇨🇳 &lt;strong&gt;Built for China&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;90+ Chinese-specific validators&lt;/strong&gt;: ID cards, phone numbers, bank cards, social credit codes, license plates, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 languages supported&lt;/strong&gt;: Simplified Chinese, English, Japanese, Korean, French, German, Spanish, Russian&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local business validation&lt;/strong&gt;: Express tracking, QQ, WeChat, Alipay order numbers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Developer Friendly&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two usage styles&lt;/strong&gt;: Annotation-based (for DTOs) or fluent chain API (for dynamic validation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero configuration&lt;/strong&gt;: Works out of the box with Spring Boot and standard Bean Validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart null handling&lt;/strong&gt;: Configurable global/local null and empty string policies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 &lt;strong&gt;Enterprise Ready&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type-safe validation&lt;/strong&gt;: Compile-time checks with annotation-based approach&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich error messages&lt;/strong&gt;: Automatic i18n support with custom field labels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production tested&lt;/strong&gt;: Comprehensive test coverage with 1300+ unit tests&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📦 &lt;strong&gt;Lightweight &amp;amp; Fast&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single dependency&lt;/strong&gt;: No external dependencies beyond Bean Validation API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small footprint&lt;/strong&gt;: ~300KB JAR size&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High performance&lt;/strong&gt;: Optimized validators with minimal overhead&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Important: v1.1.0 Breaking Changes
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you're upgrading from v1.0.0 or v1.0.1 to v1.1.0&lt;/strong&gt;, please note the breaking changes in &lt;code&gt;@FutureDate&lt;/code&gt; and &lt;code&gt;@PastDate&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v1.0.0/v1.0.1&lt;/strong&gt;: Automatically supported both &lt;code&gt;yyyy-MM-dd&lt;/code&gt; and &lt;code&gt;yyyy-MM-dd HH:mm:ss&lt;/code&gt; formats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.1.0&lt;/strong&gt;: Only supports pure date formats (e.g., &lt;code&gt;yyyy-MM-dd&lt;/code&gt;), no longer supports formats with time components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Solution&lt;/strong&gt;: Use the newly added &lt;code&gt;@FutureDateTime&lt;/code&gt; and &lt;code&gt;@PastDateTime&lt;/code&gt; annotations instead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📖 &lt;strong&gt;Detailed Migration Guide&lt;/strong&gt;: &lt;a href="//docs/version/v1.1.0/MIGRATION_v1.1.0.md"&gt;MIGRATION_v1.1.0.md&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 5-Minute Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Add Dependency
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.github.vipxieliang&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;validx&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.1.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Choose Your Style
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Option A: Annotation Style (Recommended for DTOs)
&lt;/h4&gt;

&lt;p&gt;Perfect for controller request validation with Spring Boot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserRegistrationDTO&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@NotBlank&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Email is required"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nd"&gt;@Email&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@NotBlank&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Phone is required"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nd"&gt;@ChinesePhone&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@ChineseIdCard&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Password&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// getters and setters...&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;@RestController&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@PostMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/register"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Result&lt;/span&gt; &lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@Valid&lt;/span&gt; &lt;span class="nd"&gt;@RequestBody&lt;/span&gt; &lt;span class="nc"&gt;UserRegistrationDTO&lt;/span&gt; &lt;span class="n"&gt;dto&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Spring automatically validates, returns 400 on failure&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;userService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;register&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dto&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Option B: Fluent Chain Style (Recommended for Business Logic)
&lt;/h4&gt;

&lt;p&gt;Perfect for dynamic validation in service layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Service&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;validateUserData&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;userData&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_EMPTY&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Reject null/empty globally&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userData&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Phone"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userData&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ID Card"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isChineseIdCard&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userData&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"idCard"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Optional QQ"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isQQ&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userData&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"qq"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;  &lt;span class="c1"&gt;// Override for optional field&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passed&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ValidationException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrors&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Run Your Application
&lt;/h3&gt;

&lt;p&gt;That's it! ValidX works seamlessly with your existing Spring Boot setup. Error messages automatically adapt to the user's language via &lt;code&gt;Accept-Language&lt;/code&gt; header.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multilingual Support
&lt;/h2&gt;

&lt;p&gt;ValidX supports multilingual error messages, which can be used in the following ways:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use system default language&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;chain1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"invalid-email"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Use Chinese&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;chain2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withLocale&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Locale&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIMPLIFIED_CHINESE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"invalid-email"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Use English&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;chain3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withLocale&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Locale&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ENGLISH&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"invalid-email"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Annotation-based usage also supports multilingualism, and error messages will automatically switch according to the system language environment. To use a specific locale, you can configure Hibernate Validator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Configure language locale for English messages&lt;/span&gt;
&lt;span class="nc"&gt;ValidatorFactory&lt;/span&gt; &lt;span class="n"&gt;englishFactory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Validation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;byDefaultProvider&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;configure&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;messageInterpolator&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ResourceBundleMessageInterpolator&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildValidatorFactory&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;Validator&lt;/span&gt; &lt;span class="n"&gt;englishValidator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;englishFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValidator&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Configure language locale for Chinese messages&lt;/span&gt;
&lt;span class="nc"&gt;ValidatorFactory&lt;/span&gt; &lt;span class="n"&gt;chineseFactory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Validation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;byDefaultProvider&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;configure&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;messageInterpolator&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ResourceBundleMessageInterpolator&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildValidatorFactory&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;Validator&lt;/span&gt; &lt;span class="n"&gt;chineseValidator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chineseFactory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValidator&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserDTO&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Error messages will automatically switch between Chinese and English based on the current language environment&lt;/span&gt;
    &lt;span class="nd"&gt;@Email&lt;/span&gt; 
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@ChineseIdCard&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Automatic Language Environment Switching
&lt;/h3&gt;

&lt;p&gt;ValidX also supports automatic language environment switching without explicitly specifying the language environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Set language environment globally (affects all validation operations in the current thread)&lt;/span&gt;
&lt;span class="nc"&gt;MessageManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCurrentLocale&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Locale&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIMPLIFIED_CHINESE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Validation operations will automatically use the set language environment&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"invalid-email"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Clear global language environment settings&lt;/span&gt;
&lt;span class="nc"&gt;MessageManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clearCurrentLocale&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Currently supported languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified Chinese (default)&lt;/li&gt;
&lt;li&gt;English&lt;/li&gt;
&lt;li&gt;Japanese&lt;/li&gt;
&lt;li&gt;Korean&lt;/li&gt;
&lt;li&gt;French&lt;/li&gt;
&lt;li&gt;German&lt;/li&gt;
&lt;li&gt;Spanish&lt;/li&gt;
&lt;li&gt;Russian&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Important Note: Handling Null/Empty Strings
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;All validation annotations and chain validation methods return pass (&lt;code&gt;true&lt;/code&gt;) for &lt;code&gt;null&lt;/code&gt; and empty strings (&lt;code&gt;""&lt;/code&gt;)&lt;/strong&gt;. This follows the design principle of the Bean Validation (JSR 380) specification.&lt;/p&gt;

&lt;p&gt;This is to achieve &lt;strong&gt;separation of concerns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@NotNull&lt;/code&gt; / &lt;code&gt;@NotEmpty&lt;/code&gt; / &lt;code&gt;@NotBlank&lt;/code&gt;: Check "whether the field exists"&lt;/li&gt;
&lt;li&gt;Format validation annotations/methods (e.g., &lt;code&gt;@Email&lt;/code&gt;, &lt;code&gt;isEmail()&lt;/code&gt;): Check "if the field has a value, whether the format is correct"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Handling Null/Empty Strings in Annotation-based Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  How to use?
&lt;/h4&gt;

&lt;p&gt;Combine annotations according to business requirements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserDTO&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Required field: cannot be null and format must be correct&lt;/span&gt;
    &lt;span class="nd"&gt;@NotNull&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Email cannot be null"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nd"&gt;@Email&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Required field: cannot be null, empty string, and format must be correct&lt;/span&gt;
    &lt;span class="nd"&gt;@NotBlank&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Phone cannot be blank"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nd"&gt;@ChinesePhone&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Optional field: can be null or empty string, but if has value, format must be correct&lt;/span&gt;
    &lt;span class="nd"&gt;@QQ&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;qq&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Optional field: can be null, but cannot be empty string, if has value, format must be correct&lt;/span&gt;
    &lt;span class="nd"&gt;@NotEmpty&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"If WeChat ID is provided, it cannot be empty"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nd"&gt;@WeChat&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;wechat&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Common Combination Examples
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Annotation Combination&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Required and Format Correct&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@NotBlank&lt;/code&gt; + &lt;code&gt;@Email&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Most common: cannot be null, empty string, or whitespace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Required and Format Correct&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@NotNull&lt;/code&gt; + &lt;code&gt;@ChineseIdCard&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cannot be null, but allows empty string (rarely used)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Optional but Format Correct&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@QQ&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Can be null/empty, but if has value must be correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Optional but Non-empty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@NotEmpty&lt;/code&gt; + &lt;code&gt;@WeChat&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Can be null, but cannot be empty string&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Bean Validation Standard Annotations
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@NotNull&lt;/code&gt;: Field cannot be &lt;code&gt;null&lt;/code&gt; (but can be empty string &lt;code&gt;""&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@NotEmpty&lt;/code&gt;: Field cannot be &lt;code&gt;null&lt;/code&gt; and cannot be empty (string cannot be &lt;code&gt;""&lt;/code&gt;, collection cannot be empty)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@NotBlank&lt;/code&gt;: String cannot be &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;""&lt;/code&gt;, or &lt;code&gt;"   "&lt;/code&gt; (whitespace)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Use Cases
&lt;/h4&gt;

&lt;p&gt;Annotation-based validation is suitable for &lt;strong&gt;Controller layer interface parameter validation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RestController&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@PostMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/register"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Result&lt;/span&gt; &lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@Valid&lt;/span&gt; &lt;span class="nd"&gt;@RequestBody&lt;/span&gt; &lt;span class="nc"&gt;UserDTO&lt;/span&gt; &lt;span class="n"&gt;dto&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Spring automatically validates, returns 400 on failure&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;userService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;register&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dto&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Handling Null/Empty Strings in Chain Validation
&lt;/h3&gt;

&lt;p&gt;Chain validation (&lt;code&gt;ValidX.init()&lt;/code&gt;) has the same default behavior as annotation-based: &lt;strong&gt;null and empty strings pass validation&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why this design?
&lt;/h4&gt;

&lt;p&gt;Chain validation is mainly used for &lt;strong&gt;dynamic validation scenarios in the business logic layer&lt;/strong&gt;, especially when processing Map/JSON data, where fields may not exist (returning null) is a normal situation.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parsing JSON data returned from external APIs&lt;/li&gt;
&lt;li&gt;Processing dynamic form data from frontend&lt;/li&gt;
&lt;li&gt;Validating Map results from database queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these scenarios, a field being null typically means "the field does not exist" or "no need to validate this field", rather than an error.&lt;/p&gt;

&lt;h4&gt;
  
  
  Use Cases
&lt;/h4&gt;

&lt;p&gt;Chain-based validation is suitable for &lt;strong&gt;business logic layer dynamic validation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Service&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Fields in Map may not exist (null), this is normal&lt;/span&gt;
        &lt;span class="c1"&gt;// Chain validation automatically skips null values&lt;/span&gt;
        &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                 &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passed&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;BusinessException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrors&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Chain Validation Configuration API
&lt;/h4&gt;

&lt;p&gt;ValidX now supports flexible configuration for handling null/empty values through both global configuration and local state control.&lt;/p&gt;

&lt;h5&gt;
  
  
  Global Configuration
&lt;/h5&gt;

&lt;p&gt;You can set global validation requirements using &lt;code&gt;ValidXConfig&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create validator with global NOT_NULL requirement&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_NULL&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// All validation methods will now reject null values&lt;/span&gt;
&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Fails if email is null&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Fails if phone is null&lt;/span&gt;

&lt;span class="c1"&gt;// Create validator with global NOT_EMPTY requirement&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_EMPTY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// All validation methods will now reject null and empty strings&lt;/span&gt;
&lt;span class="n"&gt;validator2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Fails if email is null or ""&lt;/span&gt;
          &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Fails if phone is null or ""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Available Global Configurations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ValidXConfig.DEFAULT&lt;/code&gt; - Allows null and empty strings (default behavior)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ValidXConfig.GLOBAL_NOT_NULL&lt;/code&gt; - All fields cannot be null&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ValidXConfig.GLOBAL_NOT_EMPTY&lt;/code&gt; - All fields cannot be null or empty strings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Practice:&lt;/strong&gt; Call &lt;code&gt;config()&lt;/code&gt; only once at the beginning of the validation chain for clarity and maintainability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Recommended: Set config once at the start&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_NULL&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isQQ&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qq&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Use local method for exceptions&lt;/span&gt;

&lt;span class="c1"&gt;// ⚠️ Not recommended: Multiple config() calls in the middle&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_NULL&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DEFAULT&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Confusing: hard to track config changes&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ If you need different configs, create separate validators&lt;/span&gt;
&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;strictValidator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_NULL&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;lenientValidator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DEFAULT&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Local State Control
&lt;/h5&gt;

&lt;p&gt;You can override global configuration for specific fields using local state methods:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_NULL&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Global: reject null&lt;/span&gt;

&lt;span class="c1"&gt;// Override for specific fields&lt;/span&gt;
&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Optional Email"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;optionalEmail&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Allow null for this field&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Required Phone"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;notEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;           &lt;span class="c1"&gt;// Require non-empty&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User ID"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isChineseIdCard&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;                   &lt;span class="c1"&gt;// Use global NOT_NULL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Available Local State Methods:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.notNull()&lt;/code&gt; - Field cannot be null (but can be empty string)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.notEmpty()&lt;/code&gt; - Field cannot be null or empty string&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.allowNull()&lt;/code&gt; - Allow null values (skip validation if null)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.allowEmpty()&lt;/code&gt; - Allow empty strings (but not null)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.field("label")&lt;/code&gt; - Set custom field label for error messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Priority Rules
&lt;/h5&gt;

&lt;p&gt;Local state always takes precedence over global configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_EMPTY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Global: reject null and empty&lt;/span&gt;

&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Local allowNull() overrides global&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Priority:&lt;/strong&gt; Local State &amp;gt; Global Config &amp;gt; Default Behavior&lt;/p&gt;

&lt;h5&gt;
  
  
  Practical Examples
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Example 1: API Request Validation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;validateUserRegistration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_EMPTY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Most fields are required&lt;/span&gt;

    &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Phone"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Optional QQ"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isQQ&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"qq"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;// Optional field&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ID Card"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isChineseIdCard&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"idCard"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passed&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ValidationException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrors&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example 2: Form Update (Partial Updates)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;updateUserProfile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;updates&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Only validate fields that are being updated&lt;/span&gt;
    &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;// Default: allow null/empty&lt;/span&gt;

    &lt;span class="c1"&gt;// Only validate fields present in the update map&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updates&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;containsKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;notEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updates&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updates&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;containsKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Phone"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;notEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updates&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passed&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ValidationException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrors&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example 3: Mixed Requirements&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;validateComplexForm&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;FormData&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ValidXConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GLOBAL_NOT_NULL&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Most fields required&lt;/span&gt;

    &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;notEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEmail&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;      &lt;span class="c1"&gt;// Required and non-empty&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Phone"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPhone&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;          &lt;span class="c1"&gt;// Required (use global)&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"QQ"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isQQ&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getQq&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;              &lt;span class="c1"&gt;// Optional&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"WeChat"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;allowEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isWeChat&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getWeChat&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;// Can be empty but not null&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Website"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;allowNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getWebsite&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// Optional&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passed&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Error messages include custom field labels&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ValidationException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrors&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  State Reset Behavior
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Local state (notNull/notEmpty/allowNull/allowEmpty) is automatically reset after each validation method call. This ensures each field's validation is independent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;// notNull applies to email1&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;              &lt;span class="c1"&gt;// email2 uses default behavior (state reset)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// notEmpty applies to phone only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Error Messages with Field Labels
&lt;/h5&gt;

&lt;p&gt;When using &lt;code&gt;.field("label")&lt;/code&gt;, error messages will include the custom label:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User Email"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;notEmpty&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Contact Phone"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;notNull&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passed&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrors&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// Errors: ["User Email: Value cannot be an empty string",&lt;/span&gt;
    &lt;span class="c1"&gt;//          "Contact Phone: Value cannot be null"]&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This configuration API provides fine-grained control over null/empty handling in chain validation, making it suitable for complex business scenarios while maintaining backward compatibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Thread Safety
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ValidX instances are not thread-safe.&lt;/strong&gt; Each validation should create a new instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Wrong: Sharing instance across threads&lt;/span&gt;
&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="no"&gt;VALIDATOR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="no"&gt;VALIDATOR&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEmail&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// Not thread-safe!&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Correct: Create new instance per validation&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEmail&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getPhone&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isValid&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ValidationException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrorMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; ValidX uses internal mutable state (local requirement flags, field labels, error lists) that is modified during the validation chain. Sharing instances across threads can lead to race conditions and incorrect validation results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thread-safe components:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ValidXConfig&lt;/code&gt; objects are immutable and can be safely shared&lt;/li&gt;
&lt;li&gt;Individual validator classes (e.g., &lt;code&gt;ChineseIdCardValidator&lt;/code&gt;) are stateless and can be reused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This design follows the same pattern as other fluent APIs like &lt;code&gt;StringBuilder&lt;/code&gt;, Java 8 &lt;code&gt;Stream&lt;/code&gt;, and Lombok &lt;code&gt;Builder&lt;/code&gt; - they are meant to be used in a "create-use-discard" pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported Validation Annotations
&lt;/h2&gt;

&lt;p&gt;ValidX provides rich validation annotations covering various scenarios. The following are all currently supported validation annotations and their function descriptions:&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Reference Table
&lt;/h3&gt;

&lt;p&gt;Click on the annotation name to jump to its detailed documentation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Annotation&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Added Version&lt;/th&gt;
&lt;th&gt;Modified Version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Alpha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pure English letter validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@AlphaDash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Alphanumeric with underscore and hyphen&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@AlphaNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Alphanumeric combination&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Chinese&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pure Chinese character validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseAlpha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese characters and letters&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseAlphaNum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese characters, letters and numbers&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseAlphaDash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese, letters, numbers, underscore, hyphen&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Lower&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lowercase character validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Upper&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Uppercase character validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Xdigit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hexadecimal string validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Longitude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Longitude validation (-180 to 180)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Latitude&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Latitude validation (-90 to 90)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@GeoPoint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Geographic coordinate pair validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date format validation (custom formats)&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@DateTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date-time format validation (with time)&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@FutureDate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Future date validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@PastDate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Past date validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@PastDateTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Past date-time validation&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@FutureDateTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Future date-time validation&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@HourMinute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hour:minute format (HH:mm)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@HourMinuteSecond&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hour:minute:second format (HH:mm:ss)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Timestamp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unix timestamp validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@CronExpression&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cron expression validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Duration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Duration format validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ExpressNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Express tracking number validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@StartsWith&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String prefix validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Contains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String contains substring validation&lt;/td&gt;
&lt;td&gt;1.0.1&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@EndsWith&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String suffix validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@In&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value in specified list&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@NotIn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value not in specified list&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Enum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enumeration value validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Color format (HEX/RGB/RGBA)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Password&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Password strength validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@UUID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UUID format validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;@Base64&lt;/td&gt;
&lt;td&gt;Base64 encoding validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@JSON&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON format validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@JWT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JWT token format validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@SemVer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Semantic versioning validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@FileExtension&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File extension validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@FileSize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File size range validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Age&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Age validation from birth date or ID&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basic Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Port&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Port number validation (0-65535)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese name validation&lt;/td&gt;
&lt;td&gt;1.1.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseIdCard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese ID card validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChinesePassport&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese passport validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseMilitaryOfficer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Military officer certificate&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseSoldier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Soldier certificate validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ForeignerPermanentResidenceIdentity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Foreigner permanent residence ID&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@HKMacauResidence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HK/Macau residence permit&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@HKMacauPass&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HK/Macau travel permit&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@TaiwanResidence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Taiwan residence permit&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@TaiwanPass&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Taiwan travel permit&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ForeignerWorkPermit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Foreigner work permit&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@UnifiedSocialCreditCode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unified Social Credit Code&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChinesePhone&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese mobile phone&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseLandline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese landline&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChinesePhoneOrLandline&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese phone or landline&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@PhoneNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;International phone number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Email address validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@BankCard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bank card number (Luhn)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@CVV&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CVV/CVC security code&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@IBAN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IBAN account number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@SWIFT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SWIFT/BIC code&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@StockCode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stock code validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@TradeOrderNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Trade order number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Financial Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@FinancialProductCode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Financial product code&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@DegreeCertificate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Degree certificate number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Doctor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Doctor qualification&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Teacher&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Teacher qualification&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Lawyer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Legal professional qualification&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@PMP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PMP certificate&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Constructor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Constructor certificate&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Education/Professional Qualification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Accountant&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Accountant certificate&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Domain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Domain name validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Ip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IP address (IPv4/IPv6)&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Mac&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MAC address validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@Url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL address validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@SubnetMask&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Subnet mask validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseLicensePlate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese license plate&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChinesePatent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese patent number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseTrademark&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese trademark registration&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@SoftwareCopyright&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Software copyright registration&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@WorkCopyright&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Work copyright registration&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ChineseZipCode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese postal code&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@DrugApproval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Drug approval number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@DrugCode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Drug code validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@MedicalDeviceRegistration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Medical device registration&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@QQ&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;QQ number validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;China-Specific Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@WeChat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WeChat ID validation&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automotive Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@VIN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vehicle Identification Number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automotive Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@VehicleEngine&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vehicle engine number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ISBN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISBN book number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ISSN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISSN serial number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@DOI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DOI identifier&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@CLC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chinese Library Classification&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@DDC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dewey Decimal Classification&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@ORCID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ORCID researcher ID&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Book-Related Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@IPC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;International Patent Classification&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mobile Device Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@IMEI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IMEI device number&lt;/td&gt;
&lt;td&gt;1.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Basic Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Alpha&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Pure English letter validation, only allowing uppercase and lowercase English letters (a-z, A-Z).&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;abcDEF&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Alpha&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAlpha&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abcDEF"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@AlphaDash&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Alphanumeric underscore hyphen validation, allowing English letters, numbers, underscores, and hyphens.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;abc-123_def&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@AlphaDash&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAlphaDash&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abc-123_def"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@AlphaNumber&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Alphanumeric combination validation, only allowing English letters and numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;abc123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@AlphaNumber&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAlphaNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abc123"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Chinese&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Pure Chinese character validation, only allowing Chinese characters (Unicode Chinese characters).&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;汉字&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Chinese&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChinese&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"汉字"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseAlpha&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese character letter validation, allowing Chinese characters and English letters.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;汉字abc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseAlpha&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseAlpha&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"汉字abc"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseAlphaNum&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese character letter number validation, allowing Chinese characters, English letters, and numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;汉字abc123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseAlphaNum&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseAlphaNum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"汉字abc123"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseAlphaDash&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese character letter number underscore hyphen validation, allowing Chinese characters, English letters, numbers, underscores, and hyphens.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;汉字abc-123_def&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseAlphaDash&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseAlphaDash&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"汉字abc-123_def"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Longitude&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Longitude validation, validating whether the longitude value is between -180 and 180.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;116.4074&lt;/code&gt;, &lt;code&gt;-116.4074&lt;/code&gt;, &lt;code&gt;180&lt;/code&gt;, &lt;code&gt;-180&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Longitude&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;longitude&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isLongitude&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"116.4074"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Latitude&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Latitude validation, validating whether the latitude value is between -90 and 90.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;39.9042&lt;/code&gt;, &lt;code&gt;-39.9042&lt;/code&gt;, &lt;code&gt;90&lt;/code&gt;, &lt;code&gt;-90&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Latitude&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;latitude&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isLatitude&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"39.9042"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@GeoPoint&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Geographic coordinate pair validation (longitude and latitude), validating whether the coordinate format is correct and values are within valid ranges.&lt;/li&gt;
&lt;li&gt;Supported Formats:

&lt;ul&gt;
&lt;li&gt;Comma-separated: &lt;code&gt;"116.4074,39.9042"&lt;/code&gt; (longitude,latitude)&lt;/li&gt;
&lt;li&gt;Space-separated: &lt;code&gt;"116.4074 39.9042"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Comma + space: &lt;code&gt;"116.4074, 39.9042"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Validation Rules:

&lt;ul&gt;
&lt;li&gt;Longitude range: -180 to 180&lt;/li&gt;
&lt;li&gt;Latitude range: -90 to 90&lt;/li&gt;
&lt;li&gt;Must contain two valid numeric values&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;latitudeFirst&lt;/code&gt;: Coordinate order, &lt;code&gt;false&lt;/code&gt; (default) for longitude first, &lt;code&gt;true&lt;/code&gt; for latitude first&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;separator&lt;/code&gt;: Separator type - &lt;code&gt;ANY&lt;/code&gt; (default), &lt;code&gt;COMMA&lt;/code&gt;, or &lt;code&gt;SPACE&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - default (longitude,latitude)&lt;/span&gt;
  &lt;span class="nd"&gt;@GeoPoint&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// "116.4074,39.9042"&lt;/span&gt;

  &lt;span class="c1"&gt;// Latitude first&lt;/span&gt;
  &lt;span class="nd"&gt;@GeoPoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latitudeFirst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// "39.9042,116.4074"&lt;/span&gt;

  &lt;span class="c1"&gt;// Comma separator only&lt;/span&gt;
  &lt;span class="nd"&gt;@GeoPoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;separator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GeoPoint&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SeparatorType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;COMMA&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;gps&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isGeoPoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"116.4074,39.9042"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Default: longitude first&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isGeoPoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"39.9042,116.4074"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Latitude first&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isGeoPoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"116.4074,39.9042"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;GeoPoint&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SeparatorType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;COMMA&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Specify separator&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Date&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Date format validation, validates whether a string conforms to the specified date format (pure date, no time component) using strict validation mode.&lt;/li&gt;
&lt;li&gt;Core Features:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strict Validation&lt;/strong&gt;: Rejects invalid dates (e.g., 2024-02-30, 2024-13-01)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leap Year Recognition&lt;/strong&gt;: Correctly handles leap years (2024-02-29 ✓, 1900-02-29 ✗)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible Formats&lt;/strong&gt;: Supports all Java DateTimeFormatter date formats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language Support&lt;/strong&gt;: Error messages in 9 languages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern Restriction&lt;/strong&gt;: Pattern must NOT contain time symbols (use @DateTime for date-time formats)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Format Symbol Reference:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Date Symbols:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;| Symbol | Meaning | Example | Description |&lt;br&gt;
  |--------|---------|---------|-------------|&lt;br&gt;
  | &lt;code&gt;yyyy&lt;/code&gt; | Year (4 digits) | &lt;code&gt;2024&lt;/code&gt; | Recommended, auto-converted for strict mode |&lt;br&gt;
  | &lt;code&gt;yy&lt;/code&gt; | Year (2 digits) | &lt;code&gt;24&lt;/code&gt; | Represents 2024 |&lt;br&gt;
  | &lt;code&gt;MM&lt;/code&gt; | Month (zero-padded) | &lt;code&gt;01&lt;/code&gt;, &lt;code&gt;12&lt;/code&gt; | Must be 2 digits |&lt;br&gt;
  | &lt;code&gt;M&lt;/code&gt; | Month (no padding) | &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;12&lt;/code&gt; | 1-12 |&lt;br&gt;
  | &lt;code&gt;dd&lt;/code&gt; | Day (zero-padded) | &lt;code&gt;05&lt;/code&gt;, &lt;code&gt;25&lt;/code&gt; | Must be 2 digits |&lt;br&gt;
  | &lt;code&gt;d&lt;/code&gt; | Day (no padding) | &lt;code&gt;5&lt;/code&gt;, &lt;code&gt;25&lt;/code&gt; | 1-31 |&lt;br&gt;
  | &lt;code&gt;DDD&lt;/code&gt; | Day of year | &lt;code&gt;365&lt;/code&gt; | 1-366 |&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supported Format Examples:

&lt;ul&gt;
&lt;li&gt;Standard date: &lt;code&gt;yyyy-MM-dd&lt;/code&gt; → &lt;code&gt;2024-01-15&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compact format: &lt;code&gt;yyyyMMdd&lt;/code&gt; → &lt;code&gt;20240115&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;US format: &lt;code&gt;MM/dd/yyyy&lt;/code&gt; → &lt;code&gt;12/25/2024&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;European format: &lt;code&gt;dd/MM/yyyy&lt;/code&gt; → &lt;code&gt;25/12/2024&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Chinese format: &lt;code&gt;yyyy年MM月dd日&lt;/code&gt; → &lt;code&gt;2024年12月25日&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pattern&lt;/code&gt;: Date format pattern, defaults to &lt;code&gt;"yyyy-MM-dd"&lt;/code&gt; (must not contain time symbols)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Validation Examples:

&lt;ul&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;2024-02-29&lt;/code&gt; (leap year)&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;2024-01-31&lt;/code&gt; (January has 31 days)&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;2024-04-30&lt;/code&gt; (April has 30 days)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-02-30&lt;/code&gt; (February doesn't have 30 days)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2023-02-29&lt;/code&gt; (not a leap year)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-13-01&lt;/code&gt; (month range is 1-12)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-04-31&lt;/code&gt; (April doesn't have 31 days)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - default format (yyyy-MM-dd)&lt;/span&gt;
  &lt;span class="nd"&gt;@Date&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;birthDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="nd"&gt;@Date&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;usDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="nd"&gt;@Date&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy年MM月dd日"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;chineseDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - default format&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2024-01-15"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"12/25/2024"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2024年12月25日"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"yyyy年MM月dd日"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Important Notes:

&lt;ul&gt;
&lt;li&gt;Pattern must NOT contain time symbols (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;li&gt;For date-time formats, use @DateTime annotation instead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict format matching&lt;/strong&gt;: Input must exactly match the pattern length and format&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;@Date(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2024-01-15"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@Date(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2024-01-15 12:00:00"&lt;/code&gt; (contains time)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@Date(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2024-1-5"&lt;/code&gt; (missing zero-padding)&lt;/li&gt;
&lt;li&gt;When using formats like &lt;code&gt;yyyy-MM-dd&lt;/code&gt;, dates must be zero-padded (e.g., &lt;code&gt;2024-01-05&lt;/code&gt; not &lt;code&gt;2024-1-5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Separators must exactly match the format (e.g., &lt;code&gt;2024/01/15&lt;/code&gt; will fail with format &lt;code&gt;yyyy-MM-dd&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;null and empty strings pass validation by default (use with &lt;code&gt;@NotNull&lt;/code&gt; or &lt;code&gt;@NotEmpty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@DateTime&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Date-time format validation, validates whether a string conforms to the specified date-time format (must include time component) using strict validation mode.&lt;/li&gt;
&lt;li&gt;Core Features:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strict Validation&lt;/strong&gt;: Rejects invalid date-times (e.g., 2024-02-30 13:30:00, 2024-01-15 25:00:00)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leap Year Recognition&lt;/strong&gt;: Correctly handles leap years&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Validation&lt;/strong&gt;: Validates hours (0-23), minutes (0-59), seconds (0-59)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible Formats&lt;/strong&gt;: Supports all Java DateTimeFormatter date-time formats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language Support&lt;/strong&gt;: Error messages in 9 languages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern Requirement&lt;/strong&gt;: Pattern must contain time symbols (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Format Symbol Reference:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time Symbols:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;| Symbol | Meaning | Example | Description |&lt;br&gt;
  |--------|---------|---------|-------------|&lt;br&gt;
  | &lt;code&gt;HH&lt;/code&gt; | Hour (24-hour, zero-padded) | &lt;code&gt;00&lt;/code&gt;, &lt;code&gt;23&lt;/code&gt; | 00-23 |&lt;br&gt;
  | &lt;code&gt;H&lt;/code&gt; | Hour (24-hour, no padding) | &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;23&lt;/code&gt; | 0-23 |&lt;br&gt;
  | &lt;code&gt;hh&lt;/code&gt; | Hour (12-hour, zero-padded) | &lt;code&gt;01&lt;/code&gt;, &lt;code&gt;12&lt;/code&gt; | 01-12, use with &lt;code&gt;a&lt;/code&gt; |&lt;br&gt;
  | &lt;code&gt;h&lt;/code&gt; | Hour (12-hour, no padding) | &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;12&lt;/code&gt; | 1-12, use with &lt;code&gt;a&lt;/code&gt; |&lt;br&gt;
  | &lt;code&gt;mm&lt;/code&gt; | Minute (zero-padded) | &lt;code&gt;00&lt;/code&gt;, &lt;code&gt;59&lt;/code&gt; | 00-59 |&lt;br&gt;
  | &lt;code&gt;m&lt;/code&gt; | Minute (no padding) | &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;59&lt;/code&gt; | 0-59 |&lt;br&gt;
  | &lt;code&gt;ss&lt;/code&gt; | Second (zero-padded) | &lt;code&gt;00&lt;/code&gt;, &lt;code&gt;59&lt;/code&gt; | 00-59 |&lt;br&gt;
  | &lt;code&gt;s&lt;/code&gt; | Second (no padding) | &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;59&lt;/code&gt; | 0-59 |&lt;br&gt;
  | &lt;code&gt;SSS&lt;/code&gt; | Millisecond | &lt;code&gt;000&lt;/code&gt;, &lt;code&gt;999&lt;/code&gt; | Milliseconds |&lt;br&gt;
  | &lt;code&gt;a&lt;/code&gt; | AM/PM marker | &lt;code&gt;AM&lt;/code&gt;, &lt;code&gt;PM&lt;/code&gt; | Use with 12-hour format |&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Date Symbols:&lt;/strong&gt; See &lt;code&gt;@Date&lt;/code&gt; for complete date symbol reference.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supported Format Examples:

&lt;ul&gt;
&lt;li&gt;Standard: &lt;code&gt;yyyy-MM-dd HH:mm:ss&lt;/code&gt; → &lt;code&gt;2024-01-15 13:30:00&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ISO 8601: &lt;code&gt;yyyy-MM-dd'T'HH:mm:ss&lt;/code&gt; → &lt;code&gt;2024-01-15T13:30:00&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With milliseconds: &lt;code&gt;yyyy-MM-dd HH:mm:ss.SSS&lt;/code&gt; → &lt;code&gt;2024-01-15 13:30:00.123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;12-hour format: &lt;code&gt;yyyy-MM-dd hh:mm:ss a&lt;/code&gt; → &lt;code&gt;2024-01-15 02:30:00 PM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compact format: &lt;code&gt;yyyyMMddHHmmss&lt;/code&gt; → &lt;code&gt;20240115133000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Chinese format: &lt;code&gt;yyyy年MM月dd日 HH时mm分ss秒&lt;/code&gt; → &lt;code&gt;2024年12月25日 14时30分00秒&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pattern&lt;/code&gt;: Date-time format pattern, defaults to &lt;code&gt;"yyyy-MM-dd HH:mm:ss"&lt;/code&gt; (must contain time symbols)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Validation Examples:

&lt;ul&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;2024-01-15 13:30:00&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;2024-02-29 23:59:59&lt;/code&gt; (leap year)&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;2024-01-15 00:00:00&lt;/code&gt; (midnight)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-02-30 13:30:00&lt;/code&gt; (invalid date)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-01-15 24:00:00&lt;/code&gt; (hour must be 0-23)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-01-15 12:60:00&lt;/code&gt; (minute must be 0-59)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;2024-01-15 12:30:60&lt;/code&gt; (second must be 0-59)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - default format (yyyy-MM-dd HH:mm:ss)&lt;/span&gt;
  &lt;span class="nd"&gt;@DateTime&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;createdAt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="nd"&gt;@DateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd'T'HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;isoTimestamp&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="nd"&gt;@DateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd HH:mm:ss.SSS"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;preciseTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="nd"&gt;@DateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd hh:mm:ss a"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;appointmentTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - default format&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2024-01-15 13:30:00"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2024-01-15T13:30:00"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd'T'HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2024-01-15 13:30:00.123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd HH:mm:ss.SSS"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Important Notes:

&lt;ul&gt;
&lt;li&gt;Pattern must contain at least one time symbol (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;li&gt;For pure date formats (no time), use @Date annotation instead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict format matching&lt;/strong&gt;: Input must exactly match the pattern including time components&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;@DateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2024-01-15 13:30:00"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@DateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2024-01-15"&lt;/code&gt; (missing time)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@DateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2024-01-15 13:30"&lt;/code&gt; (incomplete time)&lt;/li&gt;
&lt;li&gt;Time must be valid: hour 0-23, minute 0-59, second 0-59&lt;/li&gt;
&lt;li&gt;When using zero-padded formats, values must match exactly&lt;/li&gt;
&lt;li&gt;null and empty strings pass validation by default (use with &lt;code&gt;@NotNull&lt;/code&gt; or &lt;code&gt;@NotEmpty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@FutureDate&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Future date validation, validating whether the date is a future date.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;2025-12-31&lt;/code&gt; (pure date format)&lt;/li&gt;
&lt;li&gt;Version Information:

&lt;ul&gt;
&lt;li&gt;Added Version: 1.0.0&lt;/li&gt;
&lt;li&gt;Modified Version: 1.1.0 (Added &lt;code&gt;pattern&lt;/code&gt; parameter for custom date format support)&lt;/li&gt;
&lt;li&gt;Compatibility: ⚠️ &lt;strong&gt;Not fully backward compatible&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important Breaking Changes (v1.0.0 → v1.1.0)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v1.0.0 Behavior&lt;/strong&gt;: Automatically supports two formats&lt;/li&gt;
&lt;li&gt;First attempts to parse as &lt;code&gt;yyyy-MM-dd&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;If fails, attempts to parse as &lt;code&gt;yyyy-MM-dd HH:mm:ss&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports date strings with time&lt;/strong&gt; (e.g., &lt;code&gt;2025-12-31 12:00:00&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.1.0 Behavior&lt;/strong&gt;: Only supports pure date format&lt;/li&gt;
&lt;li&gt;Default format is &lt;code&gt;yyyy-MM-dd&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Custom date formats can be specified via &lt;code&gt;pattern&lt;/code&gt; parameter (e.g., &lt;code&gt;MM/dd/yyyy&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No longer supports formats with time&lt;/strong&gt;, pattern cannot contain HH, mm, ss or other time symbols&lt;/li&gt;
&lt;li&gt;Throws &lt;code&gt;IllegalArgumentException&lt;/code&gt; if pattern contains time symbols&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Recommendation&lt;/strong&gt;: For validating future dates with time, use the new @FutureDateTime annotation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Parameters:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;includeToday&lt;/code&gt;: Whether to include today, defaults to &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pattern&lt;/code&gt;: Date format pattern, defaults to &lt;code&gt;"yyyy-MM-dd"&lt;/code&gt; (added in v1.1.0). &lt;strong&gt;Note: Cannot contain time symbols&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@FutureDate&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Or include today&lt;/span&gt;
  &lt;span class="nd"&gt;@FutureDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;includeToday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;deadline&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom date format&lt;/span&gt;
  &lt;span class="nd"&gt;@FutureDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;usDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Default format (yyyy-MM-dd), exclude today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFutureDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2025-12-31"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Include today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFutureDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2025-12-31"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFutureDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"12/31/2025"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Important Notes:

&lt;ul&gt;
&lt;li&gt;Pattern must NOT contain time symbols (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;li&gt;For validating future dates with time, use @FutureDateTime annotation instead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict format matching&lt;/strong&gt;: Input must exactly match the pattern length and format&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;@FutureDate(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2025-12-31"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@FutureDate(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2025-12-31 12:00:00"&lt;/code&gt; (contains time)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@FutureDate(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2025-1-5"&lt;/code&gt; (missing zero-padding)&lt;/li&gt;
&lt;li&gt;null and empty strings pass validation by default (use with &lt;code&gt;@NotNull&lt;/code&gt; or &lt;code&gt;@NotEmpty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@PastDate&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Past date validation, validating whether the date is a past date.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;2020-01-01&lt;/code&gt; (pure date format)&lt;/li&gt;
&lt;li&gt;Version Information:

&lt;ul&gt;
&lt;li&gt;Added Version: 1.0.0&lt;/li&gt;
&lt;li&gt;Modified Version: 1.1.0 (Added &lt;code&gt;pattern&lt;/code&gt; parameter for custom date format support)&lt;/li&gt;
&lt;li&gt;Compatibility: ⚠️ &lt;strong&gt;Not fully backward compatible&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important Breaking Changes (v1.0.0 → v1.1.0)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v1.0.0 Behavior&lt;/strong&gt;: Automatically supports two formats&lt;/li&gt;
&lt;li&gt;First attempts to parse as &lt;code&gt;yyyy-MM-dd&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;If fails, attempts to parse as &lt;code&gt;yyyy-MM-dd HH:mm:ss&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports date strings with time&lt;/strong&gt; (e.g., &lt;code&gt;2020-01-01 12:00:00&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.1.0 Behavior&lt;/strong&gt;: Only supports pure date format&lt;/li&gt;
&lt;li&gt;Default format is &lt;code&gt;yyyy-MM-dd&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Custom date formats can be specified via &lt;code&gt;pattern&lt;/code&gt; parameter (e.g., &lt;code&gt;MM/dd/yyyy&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No longer supports formats with time&lt;/strong&gt;, pattern cannot contain HH, mm, ss or other time symbols&lt;/li&gt;
&lt;li&gt;Throws &lt;code&gt;IllegalArgumentException&lt;/code&gt; if pattern contains time symbols&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Recommendation&lt;/strong&gt;: For validating past dates with time, use the new @PastDateTime annotation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Parameters:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;includeToday&lt;/code&gt;: Whether to include today, defaults to &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pattern&lt;/code&gt;: Date format pattern, defaults to &lt;code&gt;"yyyy-MM-dd"&lt;/code&gt; (added in v1.1.0). &lt;strong&gt;Note: Cannot contain time symbols&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@PastDate&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Or include today&lt;/span&gt;
  &lt;span class="nd"&gt;@PastDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;includeToday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;birthDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom date format&lt;/span&gt;
  &lt;span class="nd"&gt;@PastDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy/MM/dd"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;jpDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Default format (yyyy-MM-dd), exclude today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPastDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2020-01-01"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Include today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPastDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2020-01-01"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPastDate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"01/01/2020"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Important Notes:

&lt;ul&gt;
&lt;li&gt;Pattern must NOT contain time symbols (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;li&gt;For validating past dates with time, use @PastDateTime annotation instead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict format matching&lt;/strong&gt;: Input must exactly match the pattern length and format&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;@PastDate(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2020-01-01"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@PastDate(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2020-01-01 12:30:45"&lt;/code&gt; (contains time)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@PastDate(pattern = "yyyy-MM-dd")&lt;/code&gt; with input &lt;code&gt;"2020-1-1"&lt;/code&gt; (missing zero-padding)&lt;/li&gt;
&lt;li&gt;null and empty strings pass validation by default (use with &lt;code&gt;@NotNull&lt;/code&gt; or &lt;code&gt;@NotEmpty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@PastDateTime&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Past date-time validation, validating whether the date-time is in the past (must include time component).&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;2020-01-01 12:30:45&lt;/code&gt;, &lt;code&gt;2020/01/01 12:30:45&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Parameters:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;includeToday&lt;/code&gt;: Whether to include today, defaults to &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pattern&lt;/code&gt;: Date-time format pattern, defaults to &lt;code&gt;"yyyy-MM-dd HH:mm:ss"&lt;/code&gt; (must include time component)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@PastDateTime&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Or include today&lt;/span&gt;
  &lt;span class="nd"&gt;@PastDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;includeToday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;createdAt&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom date-time format&lt;/span&gt;
  &lt;span class="nd"&gt;@PastDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd'T'HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;isoDateTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Default format (yyyy-MM-dd HH:mm:ss), exclude today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPastDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2020-01-01 12:30:45"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Include today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPastDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2020-01-01 12:30:45"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPastDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2020-01-01T12:30:45"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd'T'HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Important Notes:

&lt;ul&gt;
&lt;li&gt;Pattern must contain at least one time symbol (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;li&gt;For pure date formats (no time), use @PastDate annotation instead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict format matching&lt;/strong&gt;: Input must exactly match the pattern including time components&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;@PastDateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2020-01-01 12:30:45"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@PastDateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2020-01-01"&lt;/code&gt; (missing time)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@PastDateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2020-01-01 12:30"&lt;/code&gt; (incomplete time)&lt;/li&gt;
&lt;li&gt;null and empty strings pass validation by default (use with &lt;code&gt;@NotNull&lt;/code&gt; or &lt;code&gt;@NotEmpty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@FutureDateTime&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Future date-time validation, validating whether the date-time is in the future (must include time component).&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;2025-12-31 23:59:59&lt;/code&gt;, &lt;code&gt;2025/12/31 23:59:59&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Parameters:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;includeToday&lt;/code&gt;: Whether to include today, defaults to &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pattern&lt;/code&gt;: Date-time format pattern, defaults to &lt;code&gt;"yyyy-MM-dd HH:mm:ss"&lt;/code&gt; (must include time component)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@FutureDateTime&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;scheduledTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Or include today&lt;/span&gt;
  &lt;span class="nd"&gt;@FutureDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;includeToday&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;deadline&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom date-time format&lt;/span&gt;
  &lt;span class="nd"&gt;@FutureDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;usDateTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Default format (yyyy-MM-dd HH:mm:ss), exclude today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFutureDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2025-12-31 23:59:59"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Include today&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFutureDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2025-12-31 23:59:59"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Custom format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFutureDateTime&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"12/31/2025 23:59:59"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"MM/dd/yyyy HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Important Notes:

&lt;ul&gt;
&lt;li&gt;Pattern must contain at least one time symbol (H, h, K, k, m, s, S, a, A, n, N)&lt;/li&gt;
&lt;li&gt;For pure date formats (no time), use @FutureDate annotation instead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict format matching&lt;/strong&gt;: Input must exactly match the pattern including time components&lt;/li&gt;
&lt;li&gt;✅ Valid: &lt;code&gt;@FutureDateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2025-12-31 23:59:59"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@FutureDateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2025-12-31"&lt;/code&gt; (missing time)&lt;/li&gt;
&lt;li&gt;❌ Invalid: &lt;code&gt;@FutureDateTime(pattern = "yyyy-MM-dd HH:mm:ss")&lt;/code&gt; with input &lt;code&gt;"2025-12-31 23:59"&lt;/code&gt; (incomplete time)&lt;/li&gt;
&lt;li&gt;null and empty strings pass validation by default (use with &lt;code&gt;@NotNull&lt;/code&gt; or &lt;code&gt;@NotEmpty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@HourMinute&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Hour minute time format validation, validating whether the time format is HH:mm.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;23:20&lt;/code&gt;, &lt;code&gt;09:30&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@HourMinute&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isHourMinute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"23:20"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@HourMinuteSecond&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Hour minute second time format validation, validating whether the time format is HH:mm:ss.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;23:50:29&lt;/code&gt;, &lt;code&gt;09:30:05&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@HourMinuteSecond&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isHourMinuteSecond&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"23:50:29"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@In&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Single element or multiple element matching validation, validating whether the value is in the specified value list.&lt;/li&gt;
&lt;li&gt;Example Format: Any specified value&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - single value validation&lt;/span&gt;
  &lt;span class="nd"&gt;@In&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"value1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"value2"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Annotation-based usage - collection/array validation (each element must be in the specified value list)&lt;/span&gt;
  &lt;span class="nd"&gt;@In&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"user"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"guest"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - single value validation&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"value1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"value1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"value2"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - collection validation&lt;/span&gt;
  &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;roles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"user"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"user"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"guest"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@NotIn&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Single element or multiple element non-matching validation, validating whether the value is not in the specified value list.&lt;/li&gt;
&lt;li&gt;Example Format: Values outside any specified value&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - single value validation&lt;/span&gt;
  &lt;span class="nd"&gt;@NotIn&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"value1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"value2"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Annotation-based usage - collection/array validation (each element must not be in the specified value list)&lt;/span&gt;
  &lt;span class="nd"&gt;@NotIn&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"root"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"superuser"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;forbiddenRoles&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - single value validation&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isNotIn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"value3"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"value1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"value2"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - collection validation&lt;/span&gt;
  &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;roles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"user"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"guest"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isNotIn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"root"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"superuser"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@FileExtension&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: File extension validation, validating whether the file name's extension is in the specified extension list.&lt;/li&gt;
&lt;li&gt;Example Format: Specified file extensions&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage case insensitive default is false&lt;/span&gt;
  &lt;span class="nd"&gt;@FileExtension&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"xls"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"xlsx"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;fileName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Annotation-based usage case sensitive&lt;/span&gt;
  &lt;span class="nd"&gt;@FileExtension&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"xls"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"xlsx"&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="n"&gt;ignoreCase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;documentName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When using chain calls, you can also specify whether to ignore case:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Default case insensitive&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFileExtension&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"document.xls"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"XLS"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Explicitly specify case insensitive&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFileExtension&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"document.xls"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"XLS"&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Case sensitive&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFileExtension&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"document.xls"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"XLS"&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@FileSize&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: File size validation, validating whether the file size is within the specified range.&lt;/li&gt;
&lt;li&gt;Supported Types:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;java.io.File&lt;/code&gt; - File objects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;java.nio.file.Path&lt;/code&gt; - NIO Path objects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;byte[]&lt;/code&gt; - Byte arrays&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;org.springframework.web.multipart.MultipartFile&lt;/code&gt; - Spring multipart files (requires Spring dependency)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;min&lt;/code&gt;: Minimum size (human-readable format, e.g., "1KB", "10MB"), default is "0B"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;max&lt;/code&gt;: Maximum size (human-readable format, e.g., "1KB", "10MB"), default is unlimited&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;allowedTypes&lt;/code&gt;: Allowed MIME types (only effective for MultipartFile)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format: File sizes with units like "10KB", "5MB", "1GB"&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Specify both minimum and maximum&lt;/span&gt;
  &lt;span class="nd"&gt;@FileSize&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1KB"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"10MB"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only specify maximum&lt;/span&gt;
  &lt;span class="nd"&gt;@FileSize&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"5MB"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt; &lt;span class="n"&gt;filePath&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Usage with byte array&lt;/span&gt;
  &lt;span class="nd"&gt;@FileSize&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1MB"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;imageData&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Usage with MultipartFile (Spring) - with MIME type restriction&lt;/span&gt;
  &lt;span class="nd"&gt;@FileSize&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"100KB"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"5MB"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allowedTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"image/jpeg"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"image/png"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;MultipartFile&lt;/span&gt; &lt;span class="n"&gt;avatar&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Only specify maximum&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFileSize&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"10MB"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify both minimum and maximum&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFileSize&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"1KB"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"10MB"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Supported size units: B (bytes), KB (kilobytes), MB (megabytes), GB (gigabytes), TB (terabytes)&lt;/li&gt;
&lt;li&gt;1KB = 1024 bytes (binary units)&lt;/li&gt;
&lt;li&gt;Decimal values are supported: "1.5GB", "0.5MB"&lt;/li&gt;
&lt;li&gt;MIME type validation is only available for MultipartFile&lt;/li&gt;
&lt;li&gt;MultipartFile support uses reflection, no strong Spring dependency required&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Lower&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Lowercase character validation, only allowing lowercase English letters.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;abcdef&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Lower&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isLower&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abcdef"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Upper&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Uppercase character validation, only allowing uppercase English letters.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;ABCDEF&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Upper&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isUpper&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ABCDEF"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Xdigit&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Hexadecimal string validation, only allowing hexadecimal characters (0-9, a-f, A-F).&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;0a1B2c3D&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Xdigit&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isXdigit&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0a1B2c3D"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Password&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Password strength validation, validating whether the password meets the specified strength requirements.&lt;/li&gt;
&lt;li&gt;Validation Rules:

&lt;ul&gt;
&lt;li&gt;Minimum length--default 8 characters&lt;/li&gt;
&lt;li&gt;Whether to include uppercase letters, lowercase letters, digits, and special symbols (all must be included by default)&lt;/li&gt;
&lt;li&gt;requireUppercase: Whether to include uppercase letters (default is yes)&lt;/li&gt;
&lt;li&gt;requireLowercase: Whether to include lowercase letters (default is yes)&lt;/li&gt;
&lt;li&gt;requireDigit: Whether to include digits (default is yes)&lt;/li&gt;
&lt;li&gt;requireSpecialChar: Whether to include special characters (default is yes)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Use default rules (minimum length 8 characters, must include uppercase and lowercase letters, digits, and special characters)&lt;/span&gt;
  &lt;span class="nd"&gt;@Password&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify minimum length&lt;/span&gt;
  &lt;span class="nd"&gt;@Password&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;simplePassword&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify minimum length, and do not require special characters&lt;/span&gt;
  &lt;span class="nd"&gt;@Password&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requireSpecialChar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;customPassword&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When using chain calls, you can also specify password strength requirements:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Use default rules (minimum length 8 characters, must include uppercase and lowercase letters, digits, and special characters)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPassword&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"MyPassword123!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify minimum length&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPassword&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mypassword123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Fully customized rules (minimum length 8 characters, do not require uppercase letters, require lowercase letters and digits, do not require special characters)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPassword&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mypassword123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@UUID&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: UUID (Universally Unique Identifier) format validation, supporting standard format (with hyphens) and compact format (without hyphens).&lt;/li&gt;
&lt;li&gt;Supported Formats:

&lt;ul&gt;
&lt;li&gt;Standard format (with hyphens): &lt;code&gt;550e8400-e29b-41d4-a716-446655440000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compact format (without hyphens): &lt;code&gt;550e8400e29b41d4a716446655440000&lt;/code&gt; (when &lt;code&gt;allowWithoutHyphens = true&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;allowWithoutHyphens&lt;/code&gt;: Whether to allow format without hyphens, default is &lt;code&gt;false&lt;/code&gt; (only allow standard format)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Only allow standard format (with hyphens)&lt;/span&gt;
  &lt;span class="nd"&gt;@UUID&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Allow both formats (with and without hyphens)&lt;/span&gt;
  &lt;span class="nd"&gt;@UUID&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allowWithoutHyphens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;transactionId&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate standard format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isUUID&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"550e8400-e29b-41d4-a716-446655440000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Allow compact format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isUUID&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"550e8400e29b41d4a716446655440000"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;UUID validation is case-insensitive (both uppercase and lowercase hexadecimal characters are allowed)&lt;/li&gt;
&lt;li&gt;Standard format must contain exactly 4 hyphens at specific positions&lt;/li&gt;
&lt;li&gt;Compact format must be exactly 32 hexadecimal characters&lt;/li&gt;
&lt;li&gt;Common UUID versions (v1, v4, etc.) are all supported&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Base&lt;/code&gt;64
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Base64 encoding format validation, supporting standard Base64 and URL-safe Base64 formats.&lt;/li&gt;
&lt;li&gt;Supported Formats:

&lt;ul&gt;
&lt;li&gt;Standard format: A-Z, a-z, 0-9, +, / with padding (=)&lt;/li&gt;
&lt;li&gt;URL-safe format: A-Z, a-z, 0-9, -, _ with padding (=)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;urlSafe&lt;/code&gt;: Whether to use URL-safe format, default is &lt;code&gt;false&lt;/code&gt; (use standard format)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;allowNoPadding&lt;/code&gt;: Whether to allow format without padding, default is &lt;code&gt;false&lt;/code&gt; (padding required)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Standard Base64 format only&lt;/span&gt;
  &lt;span class="nd"&gt;@Base64&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// URL-safe Base64 format&lt;/span&gt;
  &lt;span class="nd"&gt;@Base64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urlSafe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;urlSafeData&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Allow format without padding&lt;/span&gt;
  &lt;span class="nd"&gt;@Base64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allowNoPadding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;noPaddingData&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// URL-safe + allow no padding&lt;/span&gt;
  &lt;span class="nd"&gt;@Base64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urlSafe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allowNoPadding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;jwtPayload&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate standard format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isBase64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SGVsbG8gV29ybGQ="&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate URL-safe format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isBase64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SGVsbG8gV29ybGQ="&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Allow format without padding&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isBase64&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SGVsbG8gV29ybGQ"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Standard Base64 uses +/ characters, URL-safe uses -_ characters&lt;/li&gt;
&lt;li&gt;Padding character = can only appear at the end, maximum 2 characters&lt;/li&gt;
&lt;li&gt;String length must be a multiple of 4 (unless allowNoPadding is enabled)&lt;/li&gt;
&lt;li&gt;Common use cases: file upload, JWT tokens, image data transmission&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Age&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Age validation based on birth date or ID card number, supporting minimum age and maximum age constraints.&lt;/li&gt;
&lt;li&gt;Supported Types:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;java.time.LocalDate&lt;/code&gt; - Birth date&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;java.util.Date&lt;/code&gt; - Birth date&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;String&lt;/code&gt; - Birth date string or ID card number&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;min&lt;/code&gt;: Minimum age (inclusive), 0 means no limit, default is 0&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;max&lt;/code&gt;: Maximum age (inclusive), 0 means no limit, default is 0&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fromIdCard&lt;/code&gt;: Whether to extract birth date from ID card number, default is &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dateFormat&lt;/code&gt;: Date format (only effective when field is String and fromIdCard=false), default is "yyyy-MM-dd"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Validate age between 18 and 65&lt;/span&gt;
  &lt;span class="nd"&gt;@Age&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;LocalDate&lt;/span&gt; &lt;span class="n"&gt;birthDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only validate minimum age&lt;/span&gt;
  &lt;span class="nd"&gt;@Age&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;birthDateStr&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// "1990-01-01"&lt;/span&gt;

  &lt;span class="c1"&gt;// Extract age from ID card number&lt;/span&gt;
  &lt;span class="nd"&gt;@Age&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fromIdCard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify date format&lt;/span&gt;
  &lt;span class="nd"&gt;@Age&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dateFormat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy/MM/dd"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;birthDate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// "1990/01/01"&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate minimum age only&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAge&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;LocalDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;now&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;minusYears&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate age range&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAge&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1990-01-01"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Extract from ID card&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAge&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"11010119900101001X"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Custom date format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAge&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1990/06/15"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"yyyy/MM/dd"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Age is calculated in full years (周岁) from birth date to current date&lt;/li&gt;
&lt;li&gt;Supports both 15-digit and 18-digit Chinese ID card formats&lt;/li&gt;
&lt;li&gt;Null or empty values pass validation (handled by @NotNull/@NotEmpty)&lt;/li&gt;
&lt;li&gt;Future birth dates are treated as age 0&lt;/li&gt;
&lt;li&gt;Common date formats are automatically tried: yyyy-MM-dd, yyyy/MM/dd, yyyyMMdd&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@JSON&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: JSON format validation, supporting standard JSON syntax with configurable type restrictions, depth limits, and length limits.&lt;/li&gt;
&lt;li&gt;Supported Types:

&lt;ul&gt;
&lt;li&gt;OBJECT: JSON objects only (e.g., &lt;code&gt;{"key":"value"}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;ARRAY: JSON arrays only (e.g., &lt;code&gt;[1,2,3]&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;ANY: Both objects and arrays (default)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt;: JSON type restriction (ANY/OBJECT/ARRAY), default is ANY&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;strict&lt;/code&gt;: Whether to enforce strict JSON syntax, default is &lt;code&gt;true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxDepth&lt;/code&gt;: Maximum nesting depth (0 means unlimited), default is 0&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxLength&lt;/code&gt;: Maximum string length (0 means unlimited), default is 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;{"name":"John","age":30}&lt;/code&gt;, &lt;code&gt;[1,2,3]&lt;/code&gt;, &lt;code&gt;{"users":[{"id":1}]}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Only allow valid JSON (any type)&lt;/span&gt;
  &lt;span class="nd"&gt;@JSON&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only allow JSON objects&lt;/span&gt;
  &lt;span class="nd"&gt;@JSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSONType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OBJECT&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only allow JSON arrays&lt;/span&gt;
  &lt;span class="nd"&gt;@JSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSONType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ARRAY&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Limit nesting depth to prevent deeply nested structures&lt;/span&gt;
  &lt;span class="nd"&gt;@JSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxDepth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;jsonData&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Limit string length to prevent oversized JSON&lt;/span&gt;
  &lt;span class="nd"&gt;@JSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;jsonPayload&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Combine multiple restrictions&lt;/span&gt;
  &lt;span class="nd"&gt;@JSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSONType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OBJECT&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;maxDepth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;maxLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;apiRequest&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate any JSON type&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isJSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{\"name\":\"John\",\"age\":30}"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate specific type&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isJSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[1,2,3]"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSONType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ARRAY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate with strict mode control&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isJSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{\"key\":\"value\"}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSONType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OBJECT&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Full control with all options&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isJSON&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{\"data\":{\"nested\":true}}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSONType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OBJECT&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Uses a lightweight built-in JSON parser without external dependencies&lt;/li&gt;
&lt;li&gt;Supports all JSON types: objects, arrays, strings, numbers, booleans, null&lt;/li&gt;
&lt;li&gt;Handles escape sequences (\n, \t, \", \, etc.) and Unicode escapes (\uXXXX)&lt;/li&gt;
&lt;li&gt;Strict mode enforces proper JSON syntax (no trailing commas, quoted keys)&lt;/li&gt;
&lt;li&gt;Depth limits help prevent stack overflow from deeply nested structures&lt;/li&gt;
&lt;li&gt;Length limits help prevent memory issues from large JSON strings&lt;/li&gt;
&lt;li&gt;Common use cases: API request/response validation, config file validation, data serialization&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@PhoneNumber&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: International phone number validation, supporting multiple international phone number formats including E.164 standard format.&lt;/li&gt;
&lt;li&gt;Supported Formats:

&lt;ul&gt;
&lt;li&gt;E.164 format: &lt;code&gt;+8613812345678&lt;/code&gt;, &lt;code&gt;+14155552671&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With spaces: &lt;code&gt;+86 138 1234 5678&lt;/code&gt;, &lt;code&gt;+1 415 555 2671&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With hyphens: &lt;code&gt;+1-415-555-2671&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With parentheses: &lt;code&gt;+1 (415) 555-2671&lt;/code&gt;, &lt;code&gt;(555) 123-4567&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Local format: &lt;code&gt;13812345678&lt;/code&gt;, &lt;code&gt;138 1234 5678&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With extensions: &lt;code&gt;+1-415-555-2671 ext. 123&lt;/code&gt;, &lt;code&gt;+14155552671 x123&lt;/code&gt;, &lt;code&gt;+14155552671#456&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;countryCode&lt;/code&gt;: Restrict to specific country code (e.g., "+86", "+1"), default is empty (accepts all)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;allowExtension&lt;/code&gt;: Whether to allow extension numbers (ext., x, #), default is &lt;code&gt;true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;strict&lt;/code&gt;: Strict mode requires country code (starts with +), default is &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;+8613812345678&lt;/code&gt;, &lt;code&gt;+1-415-555-2671&lt;/code&gt;, &lt;code&gt;(555) 123-4567 ext. 123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Allow any valid international phone number&lt;/span&gt;
  &lt;span class="nd"&gt;@PhoneNumber&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phoneNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only allow specific country code (China)&lt;/span&gt;
  &lt;span class="nd"&gt;@PhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;countryCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"+86"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;chinaPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only allow specific country code (USA)&lt;/span&gt;
  &lt;span class="nd"&gt;@PhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;countryCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"+1"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;usaPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Do not allow extension numbers&lt;/span&gt;
  &lt;span class="nd"&gt;@PhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allowExtension&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;directPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Strict mode: must include country code&lt;/span&gt;
  &lt;span class="nd"&gt;@PhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;internationalPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Combine multiple restrictions&lt;/span&gt;
  &lt;span class="nd"&gt;@PhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;countryCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"+1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allowExtension&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;companyPhone&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate any phone number&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"+8613812345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate with specific country code&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"+14155552671"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"+1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate with extension control&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"+1-415-555-2671 ext. 123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Full control with all options&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPhoneNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"+1-415-555-2671 ext. 123"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"+1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Supports E.164 international standard format (+ followed by 4-15 digits)&lt;/li&gt;
&lt;li&gt;Accepts various formatting characters: spaces, hyphens, parentheses, dots&lt;/li&gt;
&lt;li&gt;Extension formats: ext., extension, x, #&lt;/li&gt;
&lt;li&gt;Country code length: 1-3 digits&lt;/li&gt;
&lt;li&gt;Phone number length (digits only): 4-15 characters&lt;/li&gt;
&lt;li&gt;Strict mode enforces international format (must start with +)&lt;/li&gt;
&lt;li&gt;Common use cases: User registration, contact management, international communication&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@JWT&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: JWT (JSON Web Token) format validation, validating whether the JWT Token has the correct basic format.&lt;/li&gt;
&lt;li&gt;JWT Format Description:

&lt;ul&gt;
&lt;li&gt;JWT consists of three parts separated by dots (.): &lt;code&gt;header.payload.signature&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Header: Base64URL encoded JSON object describing the token type and signature algorithm&lt;/li&gt;
&lt;li&gt;Payload: Base64URL encoded JSON object containing claims&lt;/li&gt;
&lt;li&gt;Signature: Signature used to verify the integrity of the token&lt;/li&gt;
&lt;li&gt;Each part uses Base64URL encoding (A-Z, a-z, 0-9, -, _)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@JWT&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isJWT&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;This validator only verifies the basic format of JWT (three-part structure and Base64URL encoding)&lt;/li&gt;
&lt;li&gt;Does not verify signature validity (requires secret key)&lt;/li&gt;
&lt;li&gt;Does not verify expiration time and other claims&lt;/li&gt;
&lt;li&gt;Common use cases: API authentication, Single Sign-On (SSO), information exchange&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@SemVer&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Semantic Versioning format validation, validating whether the version number conforms to the SemVer 2.0.0 specification.&lt;/li&gt;
&lt;li&gt;Version Number Format Description:

&lt;ul&gt;
&lt;li&gt;Basic Format: &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt; (major version.minor version.patch version)&lt;/li&gt;
&lt;li&gt;MAJOR: Major version number, incremented for incompatible API changes&lt;/li&gt;
&lt;li&gt;MINOR: Minor version number, incremented for backward-compatible functionality additions&lt;/li&gt;
&lt;li&gt;PATCH: Patch version number, incremented for backward-compatible bug fixes&lt;/li&gt;
&lt;li&gt;Pre-release Version: &lt;code&gt;MAJOR.MINOR.PATCH-prerelease&lt;/code&gt; (e.g., 1.0.0-alpha, 1.0.0-beta.1)&lt;/li&gt;
&lt;li&gt;Build Metadata: &lt;code&gt;MAJOR.MINOR.PATCH+build&lt;/code&gt; (e.g., 1.0.0+20130313144700)&lt;/li&gt;
&lt;li&gt;Complete Format: &lt;code&gt;MAJOR.MINOR.PATCH-prerelease+build&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Formats:

&lt;ul&gt;
&lt;li&gt;Basic Versions: &lt;code&gt;1.0.0&lt;/code&gt;, &lt;code&gt;2.1.3&lt;/code&gt;, &lt;code&gt;10.20.30&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pre-release Versions: &lt;code&gt;1.0.0-alpha&lt;/code&gt;, &lt;code&gt;1.0.0-beta.1&lt;/code&gt;, &lt;code&gt;2.1.0-rc.2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With Build Metadata: &lt;code&gt;1.0.0+20130313144700&lt;/code&gt;, &lt;code&gt;1.0.0+001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Complete Format: &lt;code&gt;1.0.0-alpha+001&lt;/code&gt;, &lt;code&gt;1.0.0-beta+exp.sha.5114f85&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;With v Prefix (when enabled): &lt;code&gt;v1.0.0&lt;/code&gt;, &lt;code&gt;v2.1.3-beta&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - Standard format&lt;/span&gt;
  &lt;span class="nd"&gt;@SemVer&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Annotation-based usage - Allow v prefix&lt;/span&gt;
  &lt;span class="nd"&gt;@SemVer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allowVPrefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;versionWithPrefix&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - Standard format&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSemVer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1.0.0"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSemVer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2.1.3-beta.1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - Allow v prefix&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSemVer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"v1.0.0"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSemVer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"v2.1.3-rc.1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Strictly follows the SemVer 2.0.0 specification ( &lt;a href="https://semver.org/" rel="noopener noreferrer"&gt;https://semver.org/&lt;/a&gt; )&lt;/li&gt;
&lt;li&gt;Version number parts cannot have leading zeros (except 0 itself), e.g., &lt;code&gt;01.0.0&lt;/code&gt; is invalid&lt;/li&gt;
&lt;li&gt;Version number must contain three parts, e.g., &lt;code&gt;1.0&lt;/code&gt; is invalid&lt;/li&gt;
&lt;li&gt;Pre-release identifiers consist of alphanumerics and hyphens, separated by dots&lt;/li&gt;
&lt;li&gt;Build metadata does not affect version precedence, used only for build information&lt;/li&gt;
&lt;li&gt;By default, v prefix is not allowed, enable it with &lt;code&gt;allowVPrefix=true&lt;/code&gt; when needed&lt;/li&gt;
&lt;li&gt;Common use cases: Software version management, npm package versions, API version control, Git tags&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Timestamp&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Unix timestamp format validation, validating whether the value is a valid Unix timestamp (supports seconds and milliseconds).&lt;/li&gt;
&lt;li&gt;Timestamp Format Description:

&lt;ul&gt;
&lt;li&gt;Seconds Timestamp: 10-digit numeric string or Long value (e.g., &lt;code&gt;1700000000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Milliseconds Timestamp: 13-digit numeric string or Long value (e.g., &lt;code&gt;1700000000000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Accepts both String and Long types for validation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Parameters:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;unit&lt;/code&gt;: Specifies the timestamp unit, defaults to &lt;code&gt;ANY&lt;/code&gt; (accepts both seconds and milliseconds)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TimestampUnit.SECONDS&lt;/code&gt; — Only accepts 10-digit (seconds) timestamps&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TimestampUnit.MILLISECONDS&lt;/code&gt; — Only accepts 13-digit (milliseconds) timestamps&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TimestampUnit.ANY&lt;/code&gt; — Accepts both 10-digit (seconds) and 13-digit (milliseconds) timestamps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - Accept both seconds and milliseconds&lt;/span&gt;
  &lt;span class="nd"&gt;@Timestamp&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;createTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Annotation-based usage - Only accept seconds&lt;/span&gt;
  &lt;span class="nd"&gt;@Timestamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TimestampUnit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SECONDS&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;createTimeSec&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Annotation-based usage - Only accept milliseconds&lt;/span&gt;
  &lt;span class="nd"&gt;@Timestamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TimestampUnit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MILLISECONDS&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="n"&gt;createTimeMs&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - Default ANY mode&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTimestamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1700000000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTimestamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1700000000000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - Specify unit&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTimestamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1700000000"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TimestampUnit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SECONDS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTimestamp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1700000000000L&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Timestamp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TimestampUnit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MILLISECONDS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Seconds timestamps must be exactly 10 digits (range: 0 ~ 9999999999)&lt;/li&gt;
&lt;li&gt;Milliseconds timestamps must be exactly 13 digits (range: 0 ~ 99999999999)&lt;/li&gt;
&lt;li&gt;Negative values are not accepted (Unix timestamps are non-negative)&lt;/li&gt;
&lt;li&gt;Non-numeric characters (letters, special characters, decimals, spaces) are rejected&lt;/li&gt;
&lt;li&gt;Null values are not validated by this annotation (use &lt;code&gt;@NotNull&lt;/code&gt; for null checks)&lt;/li&gt;
&lt;li&gt;Invalid digit lengths (e.g., 9-digit, 11-digit, 12-digit) are rejected regardless of unit mode&lt;/li&gt;
&lt;li&gt;Common use cases: API timestamp parameters, database time fields, message queue timestamps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@CronExpression&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Cron expression format validation, validating whether the value is a valid Cron expression.&lt;/li&gt;
&lt;li&gt;Supported Formats:

&lt;ul&gt;
&lt;li&gt;6-field format: seconds minutes hours day month week (e.g., &lt;code&gt;0 0 12 * * ?&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;7-field format: seconds minutes hours day month week year (e.g., &lt;code&gt;0 0 12 * * ? 2025&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Supported Special Characters:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; : Match any value&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;?&lt;/code&gt; : No specific value (only for day and week fields)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt; : Range (e.g., &lt;code&gt;1-5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;,&lt;/code&gt; : List (e.g., &lt;code&gt;1,3,5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; : Step (e.g., &lt;code&gt;0/15&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;L&lt;/code&gt; : Last (e.g., &lt;code&gt;L&lt;/code&gt; for last day of month)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;W&lt;/code&gt; : Weekday (e.g., &lt;code&gt;15W&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#&lt;/code&gt; : Nth weekday (e.g., &lt;code&gt;6#3&lt;/code&gt; for 3rd Friday)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;0 0 12 * * ?&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@CronExpression&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isCronExpression&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0 0 12 * * ?"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isCronExpression&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0 0/15 * * * ?"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isCronExpression&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0 0 9 ? * MON-FRI"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Day and week fields cannot both be non-&lt;code&gt;?&lt;/code&gt; values&lt;/li&gt;
&lt;li&gt;Supports month abbreviations (JAN-DEC) and day abbreviations (SUN-SAT)&lt;/li&gt;
&lt;li&gt;Second, minute: 0-59; Hour: 0-23; Day: 1-31; Month: 1-12; Week: 0-7 (0 and 7 both represent Sunday)&lt;/li&gt;
&lt;li&gt;Year range: 1970-2099 (optional field)&lt;/li&gt;
&lt;li&gt;Common use cases: Scheduled tasks, job scheduling, timer triggers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Duration&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Duration format validation, validating whether the value is a valid time duration format.&lt;/li&gt;
&lt;li&gt;Supported Formats:

&lt;ul&gt;
&lt;li&gt;ISO 8601 format: Standard format starting with P (e.g., &lt;code&gt;PT2H30M&lt;/code&gt;, &lt;code&gt;P1Y2M3D&lt;/code&gt;, &lt;code&gt;P1DT12H&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Simplified format: Number + unit combinations (e.g., &lt;code&gt;2h30m&lt;/code&gt;, &lt;code&gt;1y2mo3d&lt;/code&gt;, &lt;code&gt;1d12h&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Supported Time Units:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;y/Y&lt;/code&gt; - Year (e.g., &lt;code&gt;P1Y&lt;/code&gt; or &lt;code&gt;1y&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mo/MO&lt;/code&gt; - Month (simplified format uses "mo" to distinguish from minute "m") (e.g., &lt;code&gt;P2M&lt;/code&gt; or &lt;code&gt;2mo&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;d/D&lt;/code&gt; - Day (e.g., &lt;code&gt;P3D&lt;/code&gt; or &lt;code&gt;3d&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;h/H&lt;/code&gt; - Hour (e.g., &lt;code&gt;PT4H&lt;/code&gt; or &lt;code&gt;4h&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;m/M&lt;/code&gt; - Minute (e.g., &lt;code&gt;PT30M&lt;/code&gt; or &lt;code&gt;30m&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;s/S&lt;/code&gt; - Second (e.g., &lt;code&gt;PT45S&lt;/code&gt; or &lt;code&gt;45s&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;format&lt;/code&gt;: Specify duration format type - &lt;code&gt;ISO_8601&lt;/code&gt;, &lt;code&gt;SIMPLE&lt;/code&gt;, or &lt;code&gt;ANY&lt;/code&gt; (default)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Formats:

&lt;ul&gt;
&lt;li&gt;ISO 8601: &lt;code&gt;PT2H30M&lt;/code&gt; (2 hours 30 minutes), &lt;code&gt;P1Y2M3D&lt;/code&gt; (1 year 2 months 3 days), &lt;code&gt;P1DT12H&lt;/code&gt; (1 day 12 hours)&lt;/li&gt;
&lt;li&gt;Simplified: &lt;code&gt;2h30m&lt;/code&gt; (2 hours 30 minutes), &lt;code&gt;1y2mo3d&lt;/code&gt; (1 year 2 months 3 days), &lt;code&gt;1d12h&lt;/code&gt; (1 day 12 hours)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - accepts any format&lt;/span&gt;
  &lt;span class="nd"&gt;@Duration&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only accept ISO 8601 format&lt;/span&gt;
  &lt;span class="nd"&gt;@Duration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DurationFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ISO_8601&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;isoDuration&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only accept simplified format&lt;/span&gt;
  &lt;span class="nd"&gt;@Duration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DurationFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIMPLE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;simpleDuration&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate any format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDuration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PT2H30M"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDuration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2h30m"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDuration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"P1Y2M3D"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDuration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1y2mo3d"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify format type&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDuration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PT2H30M"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DurationFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ISO_8601&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDuration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2h30m"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DurationFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SIMPLE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;ISO 8601 format: &lt;code&gt;P[nY][nM][nD][T[nH][nM][nS]]&lt;/code&gt; where P is required, T separates date and time components&lt;/li&gt;
&lt;li&gt;Simplified format uses "mo" for month to avoid confusion with "m" for minute&lt;/li&gt;
&lt;li&gt;Both formats are case-insensitive&lt;/li&gt;
&lt;li&gt;At least one time unit must be specified&lt;/li&gt;
&lt;li&gt;Year is the largest unit supported in ISO 8601 standard&lt;/li&gt;
&lt;li&gt;Common use cases: Task duration, time period configuration, timeout settings&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ExpressNumber&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Express tracking number format validation, validating whether the value is a valid express tracking number.&lt;/li&gt;
&lt;li&gt;Supported Express Companies:

&lt;ul&gt;
&lt;li&gt;SF Express (SF_EXPRESS): 12-digit number&lt;/li&gt;
&lt;li&gt;YTO Express (YTO_EXPRESS): YT prefix + 11-13 digits, or 10-13 pure digits&lt;/li&gt;
&lt;li&gt;STO Express (STO_EXPRESS): 12-digit number&lt;/li&gt;
&lt;li&gt;ZTO Express (ZTO_EXPRESS): 12-digit number or alphanumeric combination&lt;/li&gt;
&lt;li&gt;Yunda Express (YUNDA_EXPRESS): 13-digit number&lt;/li&gt;
&lt;li&gt;China Post EMS (EMS): E + 9 digits + CN, or 2 letters + 9 digits + CN&lt;/li&gt;
&lt;li&gt;JD Logistics (JD_LOGISTICS): JD prefix + 13-15 digits&lt;/li&gt;
&lt;li&gt;Deppon (DEPPON): 8-9 digit number&lt;/li&gt;
&lt;li&gt;TTKD Express (TTKD_EXPRESS): 12-14 digit number&lt;/li&gt;
&lt;li&gt;Best Express (BEST_EXPRESS): 10-12 digits or letters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;companies&lt;/code&gt;: Specify express company types (default: all supported companies)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Formats:

&lt;ul&gt;
&lt;li&gt;SF Express: &lt;code&gt;123456789012&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;YTO Express: &lt;code&gt;YT1234567890123&lt;/code&gt;, &lt;code&gt;1234567890&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;EMS: &lt;code&gt;E123456789CN&lt;/code&gt;, &lt;code&gt;EA123456789CN&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;JD Logistics: &lt;code&gt;JD1234567890123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Deppon: &lt;code&gt;12345678&lt;/code&gt;, &lt;code&gt;123456789&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - accepts all supported companies&lt;/span&gt;
  &lt;span class="nd"&gt;@ExpressNumber&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;trackingNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only accept SF Express&lt;/span&gt;
  &lt;span class="nd"&gt;@ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;companies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SF_EXPRESS&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;sfNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Accept SF Express or YTO Express&lt;/span&gt;
  &lt;span class="nd"&gt;@ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;companies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SF_EXPRESS&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;YTO_EXPRESS&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;mixedNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate any supported express company&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123456789012"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"E123456789CN"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"JD1234567890123"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Specify express company type&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123456789012"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SF_EXPRESS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"E123456789CN"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EMS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Multiple companies&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isExpressNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123456789012"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SF_EXPRESS&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;ExpressNumber&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExpressCompany&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;STO_EXPRESS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;Format validation is based on common patterns for each express company&lt;/li&gt;
&lt;li&gt;Validation does not verify whether the tracking number actually exists in the carrier's system&lt;/li&gt;
&lt;li&gt;Some formats may overlap between different express companies (e.g., 12-digit numbers)&lt;/li&gt;
&lt;li&gt;EMS format is case-insensitive&lt;/li&gt;
&lt;li&gt;Common use cases: E-commerce order management, logistics tracking, shipping validation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@StartsWith&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Prefix validation, validating whether the string starts with the specified prefix.&lt;/li&gt;
&lt;li&gt;Example Format: Starting with specified string&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@StartsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;startsWith&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"prefix"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isStartsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"prefix_string"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"prefix"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Contains&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Contains validation, validating whether the string contains the specified substring(s). Supports multiple substrings matching modes (OR/AND) and case-insensitive matching.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;"hello world"&lt;/code&gt; contains &lt;code&gt;"hello"&lt;/code&gt;, &lt;code&gt;"test@example.com"&lt;/code&gt; contains both &lt;code&gt;"@"&lt;/code&gt; and &lt;code&gt;"."&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configuration Options:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;value&lt;/code&gt;: Array of substrings to match&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ignoreCase&lt;/code&gt;: Whether to ignore case, default is &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;matchAll&lt;/code&gt;: Matching mode, default is &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;false&lt;/code&gt; (default): OR logic - matches if ANY substring is found&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;true&lt;/code&gt;: AND logic - matches only if ALL substrings are found&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - single substring (OR logic)&lt;/span&gt;
  &lt;span class="nd"&gt;@Contains&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"@"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Multiple substrings (OR logic - matches any)&lt;/span&gt;
  &lt;span class="nd"&gt;@Contains&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s"&gt;"product"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"service"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Multiple substrings (AND logic - must match all)&lt;/span&gt;
  &lt;span class="nd"&gt;@Contains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"@"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"."&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="n"&gt;matchAll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;emailStrict&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Case-insensitive matching&lt;/span&gt;
  &lt;span class="nd"&gt;@Contains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"HELLO"&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="n"&gt;ignoreCase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;greeting&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Basic usage (OR logic)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isContains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello world"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Multiple substrings (OR logic)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isContains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"test@example.com"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"@"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;".com"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Case-insensitive (OR logic)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isContains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// AND logic - must contain all substrings&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isContains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"test@example.com"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"@"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"."&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notes:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OR logic&lt;/strong&gt; (default): Matches if the string contains ANY of the specified substrings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AND logic&lt;/strong&gt; (&lt;code&gt;matchAll = true&lt;/code&gt;): Matches only if the string contains ALL of the specified substrings&lt;/li&gt;
&lt;li&gt;Substring can appear at any position (beginning, middle, or end)&lt;/li&gt;
&lt;li&gt;Default is case-sensitive; use &lt;code&gt;ignoreCase = true&lt;/code&gt; for case-insensitive matching&lt;/li&gt;
&lt;li&gt;Common use cases: email validation (&lt;code&gt;@&lt;/code&gt;), strict email validation (&lt;code&gt;@&lt;/code&gt; and &lt;code&gt;.&lt;/code&gt;), URL checking (&lt;code&gt;http://&lt;/code&gt;), password strength (must contain multiple character types), content filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@EndsWith&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Suffix validation, validating whether the string ends with the specified suffix.&lt;/li&gt;
&lt;li&gt;Example Format: Ending with specified string&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@EndsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endsWith&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"suffix"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEndsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"string_suffix"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]{&lt;/span&gt;&lt;span class="s"&gt;"suffix"&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Enum&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Single element or multiple element enumeration value validation, validating whether it is a valid value in the specified enumeration.&lt;/li&gt;
&lt;li&gt;Example Format: One of the specified enumeration values&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Validate single enumeration value (validate code() value by default)&lt;/span&gt;
  &lt;span class="nd"&gt;@Enum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate specific field value of enumeration&lt;/span&gt;
  &lt;span class="nd"&gt;@Enum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;statusCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate enumeration value collection (each element must be a valid value of the specified enumeration)&lt;/span&gt;
  &lt;span class="nd"&gt;@Enum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;statuses&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate enumeration value collection of specific field values&lt;/span&gt;
  &lt;span class="nd"&gt;@Enum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;statusCodes&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When using chain calls, you can also specify enumeration fields:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Chain call usage - single value validation&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate enumeration's name() value (default)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEnum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"VALUE1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate specific field value of enumeration (such as code field)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEnum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"code001"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"code"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - collection validation&lt;/span&gt;
  &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;statuses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"VALUE1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"VALUE2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEnum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;statuses&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage - array validation&lt;/span&gt;
  &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;statusArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"VALUE1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"VALUE2"&lt;/span&gt;&lt;span class="o"&gt;};&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEnum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;statusArray&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;MyEnum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Example enumeration class:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;StatusEnum&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="no"&gt;ACTIVE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"active"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
      &lt;span class="no"&gt;INACTIVE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"inactive"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

      &lt;span class="nc"&gt;StatusEnum&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;

      &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Color&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Color format validation, validating whether the string is a valid HEX color value, supporting #FFF or #FFFFFF format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;#FF0000&lt;/code&gt;, &lt;code&gt;#F00&lt;/code&gt;, &lt;code&gt;#ffffff&lt;/code&gt;, &lt;code&gt;#000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Color&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isColor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"#FF0000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Identity Verification Related
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseName&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese name validation, verifies if a string conforms to Chinese naming conventions.&lt;/li&gt;
&lt;li&gt;Validation Requirements:

&lt;ul&gt;
&lt;li&gt;Only Chinese characters allowed&lt;/li&gt;
&lt;li&gt;Length between 2-50 characters (covers all Chinese names including very long minority names)&lt;/li&gt;
&lt;li&gt;Supports middle dot "·" in minority names&lt;/li&gt;
&lt;li&gt;No numbers, letters, or special characters allowed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Formats:

&lt;ul&gt;
&lt;li&gt;Han Chinese names: &lt;code&gt;张三&lt;/code&gt;, &lt;code&gt;李四&lt;/code&gt;, &lt;code&gt;欧阳修&lt;/code&gt;, &lt;code&gt;诸葛亮&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Minority names: &lt;code&gt;买买提·吐尔逊&lt;/code&gt;, &lt;code&gt;迪丽热巴·迪力木拉提&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Historical names: &lt;code&gt;爱新觉罗·玄烨&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Examples:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseName&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;realName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"张三"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"买买提·吐尔逊"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseIdCard&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Mainland China ID card number validation, supporting 18-digit and 15-digit ID card numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;11010119900307211X&lt;/code&gt; (18-digit) or &lt;code&gt;11010119900307211&lt;/code&gt; (15-digit)&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseIdCard&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseIdCard&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"11010119900307211X"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChinesePassport&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese passport number validation, supporting various types of Chinese passport numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;G12345678&lt;/code&gt;, &lt;code&gt;E12345678&lt;/code&gt;, &lt;code&gt;S12345678&lt;/code&gt;, &lt;code&gt;D1234567&lt;/code&gt;, &lt;code&gt;P1234567&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChinesePassport&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;passportNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChinesePassport&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"G12345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseMilitaryOfficer&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese military officer certificate validation, supporting various types of Chinese military officer certificates.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;军字第1234567号&lt;/code&gt;, &lt;code&gt;海字第1234567号&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseMilitaryOfficer&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseMilitaryOfficer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"军字第1234567号"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseSoldier&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese soldier certificate validation, supporting various types of Chinese soldier certificates.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;沈字第0100000号&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseSoldier&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseSoldier&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"沈字第0100000号"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ForeignerPermanentResidenceIdentity&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Foreigner permanent residence identity card validation, validating foreigner permanent residence identity card numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;911124198108030028&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ForeignerPermanentResidenceIdentity&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;identityNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isForeignerPermanentResidenceIdentity&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"911124198108030028"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@HKMacauResidence&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Hong Kong and Macau residents' residence permit validation, validating Hong Kong and Macau residents' residence permit numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;810000000000000001&lt;/code&gt;, &lt;code&gt;82000000000000000X&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@HKMacauResidence&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;residenceNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isHKMacauResidence&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"810000000000000001"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@HKMacauPass&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Hong Kong and Macau residents' travel permit to Mainland China (Home Return Permit) validation, validating Hong Kong and Macau residents' travel permit numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;H1234567800&lt;/code&gt;, &lt;code&gt;M1234567801&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@HKMacauPass&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;passNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isHKMacauPass&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"H1234567800"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@TaiwanResidence&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Taiwan residents' residence permit validation, validating Taiwan residents' residence permit numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;830000000000000001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@TaiwanResidence&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;residenceNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTaiwanResidence&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"830000000000000001"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@TaiwanPass&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Taiwan residents' travel permit to Mainland China (Taiwan Compatriot Pass) validation, validating Taiwan residents' travel permit numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;1234567800&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@TaiwanPass&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;passNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTaiwanPass&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1234567800"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ForeignerWorkPermit&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Foreigner work permit validation, validating foreigner work permit numbers.&lt;/li&gt;
&lt;li&gt;Example Format: Combination of letters and numbers&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ForeignerWorkPermit&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;permitNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isForeignerWorkPermit&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" foreigners work permit number "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@UnifiedSocialCreditCode&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Unified Social Credit Code validation, validating Unified Social Credit Codes.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;91350100M000100Y43&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@UnifiedSocialCreditCode&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;creditCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isUnifiedSocialCreditCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"91350100M000100Y43"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChinesePhoneOrLandline&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese phone number validation, supporting mobile phones and landlines.&lt;/li&gt;
&lt;li&gt;Example Format: Supporting mobile phones and landlines&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChinesePhoneOrLandline&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phoneNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChinesePhoneOrLandline&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"010-12345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChinesePhone&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese mobile phone number validation, validating Chinese mobile phone numbers.&lt;/li&gt;
&lt;li&gt;Example Format: 11-digit mobile phone numbers&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChinesePhone&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phoneNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChinesePhone&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"13812345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseLandline&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese landline validation, validating Chinese landline numbers.&lt;/li&gt;
&lt;li&gt;Example Format: Supporting area codes and extensions&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseLandline&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;phoneNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseLandline&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"010-12345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Financial Validation Related
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@BankCard&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Bank card validation, using the Luhn algorithm to validate the validity of bank card numbers.&lt;/li&gt;
&lt;li&gt;Example Format:

&lt;ul&gt;
&lt;li&gt;Visa card number: &lt;code&gt;4012888888881881&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MasterCard card number: &lt;code&gt;5555555555554444&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Card number with spaces: &lt;code&gt;4012 8888 8888 1881&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Card number with hyphens: &lt;code&gt;4012-8888-8888-1881&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@BankCard&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cardNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isBankCard&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"4012888888881881"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@CVV&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: CVV/CVC security code validation, validating the 3-digit or 4-digit security code on the back of credit cards.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;123&lt;/code&gt;, &lt;code&gt;1234&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@CVV&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;cvv&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isCVV&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@IBAN&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: IBAN international bank account number validation, validating the format and check digits of international bank account numbers (IBAN).&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;DE44500800000123456789&lt;/code&gt;, &lt;code&gt;GB29NWBK60161331926819&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@IBAN&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;iban&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIBAN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DE44500800000123456789"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@SWIFT&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: SWIFT/BIC code validation, validating the format of SWIFT/BIC bank codes, used to identify specific banks in international wire transfers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;COBADEFF&lt;/code&gt;, &lt;code&gt;DEUTDEFFXXX&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@SWIFT&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;swiftCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSWIFT&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"COBADEFF"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@StockCode&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Stock code validation, validating the format of stock codes from different exchanges.&lt;/li&gt;
&lt;li&gt;Supported exchanges and formats:

&lt;ul&gt;
&lt;li&gt;Shanghai Stock Exchange: 6-digit numbers starting with 6 (e.g.: 600000)&lt;/li&gt;
&lt;li&gt;Shenzhen Stock Exchange: 6-digit numbers starting with 0, 3, or 4 (e.g.: 000001, 300001, 400001)&lt;/li&gt;
&lt;li&gt;Hong Kong Stock Exchange: 4-5 digit numbers (e.g.: 00700, 3690)&lt;/li&gt;
&lt;li&gt;New York Stock Exchange: 1-5 letters, may contain periods (e.g.: AAPL, BRK.A, BRK.B)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Default supports all exchanges&lt;/span&gt;
  &lt;span class="nd"&gt;@StockCode&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;stockCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only supports Shanghai Stock Exchange&lt;/span&gt;
  &lt;span class="nd"&gt;@StockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exchanges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SHANGHAI&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;shanghaiStock&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Supports Shanghai Stock Exchange and New York Stock Exchange&lt;/span&gt;
  &lt;span class="nd"&gt;@StockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exchanges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SHANGHAI&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NEW_YORK&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;mixedStock&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only supports Hong Kong and US stocks&lt;/span&gt;
  &lt;span class="nd"&gt;@StockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exchanges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;HONG_KONG&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NEW_YORK&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;internationalStock&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When using chain calls, you can also specify the exchange scope:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Default supports all exchanges&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isStockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"600000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Only validate Shanghai Stock Exchange&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isStockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"600000"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SHANGHAI&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate Shanghai or Shenzhen exchanges&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isStockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"000001"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SHANGHAI&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SHENZHEN&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate Hong Kong or New York exchanges&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isStockCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"00700"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;HONG_KONG&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StockCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Exchange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NEW_YORK&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@TradeOrderNumber&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Trade order number validation, validating the format of financial trade order numbers.&lt;/li&gt;
&lt;li&gt;Supported formats:

&lt;ul&gt;
&lt;li&gt;T prefix + 18-digit number format (e.g.: T123456789012345678)&lt;/li&gt;
&lt;li&gt;Pure 18-digit number format (e.g.: 123456789012345678)&lt;/li&gt;
&lt;li&gt;UUID format (with hyphens or without hyphens) (e.g.: 550e8400-e29b-41d4-a716-446655440000 or 550e8400e29b41d4a716446655440000)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Default validates all supported formats&lt;/span&gt;
  &lt;span class="nd"&gt;@TradeOrderNumber&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;orderNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Chain call usage:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate T prefix + 18-digit number format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTradeOrderNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"T123456789012345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate pure 18-digit number format&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTradeOrderNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123456789012345678"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate UUID format (with hyphens)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTradeOrderNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"550e8400-e29b-41d4-a716-446655440000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate UUID format (without hyphens)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTradeOrderNumber&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"550e8400e29b41d4a716446655440000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@FinancialProductCode&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Financial product code validation, validating the format of fund codes, bond codes, and other financial product codes.&lt;/li&gt;
&lt;li&gt;Supported product types and formats:

&lt;ul&gt;
&lt;li&gt;Fund products:&lt;/li&gt;
&lt;li&gt;Shanghai Stock Exchange funds: 6-digit numbers starting with 5 (e.g.: 500001, 510000)&lt;/li&gt;
&lt;li&gt;Shenzhen Stock Exchange funds: 6-digit numbers starting with 1 (e.g.: 100001, 150000)&lt;/li&gt;
&lt;li&gt;Bond products:&lt;/li&gt;
&lt;li&gt;Government bonds: 6-digit numbers starting with 10 (e.g.: 100001, 101234)&lt;/li&gt;
&lt;li&gt;Corporate bonds: 6-digit numbers starting with 11 (e.g.: 110001, 111234)&lt;/li&gt;
&lt;li&gt;Convertible bonds: 6-digit numbers starting with 12 (e.g.: 120001, 121234)&lt;/li&gt;
&lt;li&gt;Company bonds: 6-digit numbers starting with 13 (e.g.: 130001, 131234)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Default supports all product types&lt;/span&gt;
  &lt;span class="nd"&gt;@FinancialProductCode&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;productCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only supports fund products&lt;/span&gt;
  &lt;span class="nd"&gt;@FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;productTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FUND&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;fundCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Only supports bond products&lt;/span&gt;
  &lt;span class="nd"&gt;@FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;productTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BOND&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;bondCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Supports fund and bond products&lt;/span&gt;
  &lt;span class="nd"&gt;@FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;productTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FUND&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BOND&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;mixedProductCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When using chain calls, you can also specify the product type scope:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Default supports all product types&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"500001"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Only validate fund products&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"500001"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FUND&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Only validate bond products&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"100001"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BOND&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate fund and bond products&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isFinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"500001"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FUND&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FinancialProductCode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProductType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BOND&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Education/Professional Qualification/Certification Related Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@DegreeCertificate&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Degree certificate number validation, validating the format of Chinese degree certificate numbers. Supports two formats:

&lt;ul&gt;
&lt;li&gt;Regular degree certificates: 16-digit number format&lt;/li&gt;
&lt;li&gt;Special degree certificates: Format starting with specific letters followed by 16 characters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;1075522008000001&lt;/code&gt;, &lt;code&gt;C1047642016057017&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@DegreeCertificate&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDegreeCertificate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1075522008000001"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Doctor&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Doctor qualification certificate number validation, validating doctor qualification certificate numbers.&lt;/li&gt;
&lt;li&gt;Rule Description: Doctor qualification certificate numbers consist of 24 or 27 characters, including annual codes, provincial administrative region codes, practicing doctor level codes, practicing doctor category codes, and resident ID card numbers&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;20251111014406081973100014&lt;/code&gt; (24-digit) or &lt;code&gt;20251111014406081973100014123&lt;/code&gt; (27-digit)&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Doctor&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDoctor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"20251111014406081973100014"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Teacher&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Teacher qualification certificate number validation, validating teacher qualification certificate numbers.&lt;/li&gt;
&lt;li&gt;Rule Description: Total of 17 digits, representing annual codes, provincial administrative region codes, certification agency codes, qualification type codes, gender codes, and serial number codes respectively&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;20253412345678901&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Teacher&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isTeacher&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"20253412345678901"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Lawyer&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Legal professional qualification certificate/lawyer practice certificate validation, validating legal professional qualification certificates or lawyer practice certificates.&lt;/li&gt;
&lt;li&gt;Format Description:

&lt;ul&gt;
&lt;li&gt;Lawyer practice certificate: 17-digit number, starting with 1, format &lt;code&gt;1 + province code(2 digits) + city code(2 digits) + year(4 digits) + category code(1 digit) + gender code(1 digit) + serial number(6 digits)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Legal professional qualification certificate: 14-digit or 16-digit number&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format:

&lt;ul&gt;
&lt;li&gt;Lawyer practice certificate: &lt;code&gt;11101201810123456&lt;/code&gt; (1+Beijing 11+Chaoyang District 01+2018+Full-time lawyer 1+Male 0+Serial number 123456)&lt;/li&gt;
&lt;li&gt;Legal professional qualification certificate: &lt;code&gt;2010130103210001&lt;/code&gt; (Year 2010+Province code 13+City code 01+District code 03+Serial number 210001)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Lawyer&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isLawyer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"11101201810123456"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@PMP&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: PMP certificate number validation, validating the format of PMP (Project Management Professional) certificate numbers&lt;/li&gt;
&lt;li&gt;Rule Description: PMP certificate numbers are typically 7 digits or combinations with specific prefixes&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;1234567&lt;/code&gt;, &lt;code&gt;PMP123456&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@PMP&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPMP&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1234567"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Constructor&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Constructor certificate number validation, validating the format of first-class/second-class constructor certificate numbers&lt;/li&gt;
&lt;li&gt;Rule Description: Constructor certificate numbers consist of one Chinese character and 12 Arabic numerals, totaling 13 digits&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;京111050700001&lt;/code&gt;, &lt;code&gt;鄂242050700001&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Constructor&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isConstructor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"京111050700001"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Accountant&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Accounting qualification certificate number validation, validating the format of accounting qualification certificate numbers&lt;/li&gt;
&lt;li&gt;Rule Description: Accounting qualification certificate numbers consist of 11 digits, containing year codes, region codes, and other information&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;21010203451&lt;/code&gt;, &lt;code&gt;22310512342&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Accountant&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;certificateNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isAccountant&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"21010203451"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Network Related
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Domain&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Domain validation, validating domain format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;example.com&lt;/code&gt;, &lt;code&gt;www.example.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Domain&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDomain&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"example.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Ip&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: IP address validation, supporting IPv4 and IPv6 address validation with configurable version parameter.&lt;/li&gt;
&lt;li&gt;Supported Versions:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Ip.IpVersion.V4&lt;/code&gt;: Validate IPv4 addresses only (e.g., &lt;code&gt;192.168.1.1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ip.IpVersion.V6&lt;/code&gt;: Validate IPv6 addresses only (e.g., &lt;code&gt;2001:0db8:85a3::8a2e:0370:7334&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ip.IpVersion.ANY&lt;/code&gt;: Validate both IPv4 and IPv6 addresses (default)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Formats:

&lt;ul&gt;
&lt;li&gt;IPv4: &lt;code&gt;192.168.1.1&lt;/code&gt;, &lt;code&gt;10.0.0.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;IPv6: &lt;code&gt;2001:0db8:85a3:0000:0000:8a2e:0370:7334&lt;/code&gt;, &lt;code&gt;::1&lt;/code&gt;, &lt;code&gt;fe80::1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage - supports both IPv4 and IPv6 (default)&lt;/span&gt;
  &lt;span class="nd"&gt;@Ip&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;ipAddress&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate IPv4 addresses only&lt;/span&gt;
  &lt;span class="nd"&gt;@Ip&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;IpVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;V4&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;ipv4Address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate IPv6 addresses only&lt;/span&gt;
  &lt;span class="nd"&gt;@Ip&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;IpVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;V6&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;ipv6Address&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate any IP address (default)&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"192.168.1.1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate IPv4 addresses only&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"192.168.1.1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Ip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;IpVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;V4&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Validate IPv6 addresses only&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"2001:0db8:85a3::8a2e:0370:7334"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Ip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;IpVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;V6&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Support both IPv4 and IPv6&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"192.168.1.1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Ip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;IpVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ANY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Mac&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: MAC address validation, validating MAC addresses.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;00:1A:2B:3C:4D:5E&lt;/code&gt;, &lt;code&gt;00-1A-2B-3C-4D-5E&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Mac&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;macAddress&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isMac&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"00:1A:2B:3C:4D:5E"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Url&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: URL address validation, validating URL address format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;http://example.com&lt;/code&gt;, &lt;code&gt;https://example.com/path&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Url&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"http://example.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Email&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Email address validation, validating email address format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;test@example.com&lt;/code&gt;, &lt;code&gt;user.name@domain.co.uk&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Email&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmail&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"test@example.com"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@SubnetMask&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Subnet mask validation, validating subnet mask format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;255.255.255.0&lt;/code&gt;, &lt;code&gt;255.0.0.0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@SubnetMask&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;subnetMask&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSubnetMask&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"255.255.255.0"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@Port&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Port number validation, validating whether the port number is within the range of 0-65535.&lt;/li&gt;
&lt;li&gt;Example Format: Integer between 0-65535&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@Port&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isPort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"8080"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  China-specific Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseLicensePlate&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese license plate validation, validating Chinese license plate numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;京A12345&lt;/code&gt;, &lt;code&gt;京A12345D&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseLicensePlate&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;licensePlate&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseLicensePlate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"京A12345"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChinesePatent&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese patent number validation, validating Chinese patent numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;ZL2013106997442&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChinesePatent&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;patentNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChinesePatent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ZL2013106997442"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseTrademark&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese trademark registration number validation, validating Chinese trademark registration numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;1234567&lt;/code&gt;, &lt;code&gt;第1234567号&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseTrademark&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;trademarkNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseTrademark&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"1234567"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@SoftwareCopyright&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Computer software copyright registration number validation, validating computer software copyright registration numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;软著登字第2023001234号&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@SoftwareCopyright&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;copyrightNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isSoftwareCopyright&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"软著登字第2023001234号"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@WorkCopyright&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: General work copyright registration number validation, validating general work copyright registration numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;作登字22-2023-A-0018号&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@WorkCopyright&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;copyrightNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isWorkCopyright&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"作登字22-2023-A-0018号"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ChineseZipCode&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Chinese postal code validation, validating Chinese postal codes.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;100000&lt;/code&gt;, &lt;code&gt;200000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ChineseZipCode&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;zipCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isChineseZipCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"100000"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@DrugApproval&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Validate whether the string is a valid Chinese drug approval number. Drug approval numbers are the numbers approved by the national drug regulatory authorities for pharmaceutical manufacturers to produce drugs&lt;/li&gt;
&lt;li&gt;Example Format: 国药准字H20210039, 国药准字ZC20171003, 国药准字HJ20233150&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@DrugApproval&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;approvalNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDrugApproval&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"国药准字H20210039"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@DrugCode&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Validate whether the string is a valid Chinese drug code. Drug codes start with 69, are 20 digits, and the last digit is the GS1 check digit&lt;/li&gt;
&lt;li&gt;Example Format: 69012345678901234563, 69123456789012345678&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@DrugCode&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;drugCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDrugCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"69012345678901234563"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@MedicalDeviceRegistration&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Medical device registration certificate number validation, used to validate the format of Chinese medical device registration certificate numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;国械注准20243010001&lt;/code&gt;, &lt;code&gt;粤械注准20242020002&lt;/code&gt;, &lt;code&gt;国械注进20242030003&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@MedicalDeviceRegistration&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;registrationNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isMedicalDeviceRegistration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"国械注准20243010001"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@QQ&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: QQ number validation, validating QQ numbers.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;123456789&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@QQ&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;qqNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isQQ&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123456789"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@WeChat&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: WeChat account validation, validating WeChat account format.&lt;/li&gt;
&lt;li&gt;Rule Description:

&lt;ul&gt;
&lt;li&gt;Length of 6-20 characters&lt;/li&gt;
&lt;li&gt;Must start with a letter&lt;/li&gt;
&lt;li&gt;Can only contain letters, numbers, underscores, and hyphens&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;wechat123&lt;/code&gt;, &lt;code&gt;WeChat_123&lt;/code&gt;, &lt;code&gt;WeChat-123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@WeChat&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;wechatId&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isWeChat&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"wechat123"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Automotive Related Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@VIN&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Validate vehicle identification number (VIN) format and check digits.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;WP0AJ2972LL122844&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@VIN&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;vin&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isVIN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"WP0AJ2972LL122844"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@VehicleEngine&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Validate vehicle engine code format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;123456&lt;/code&gt;, &lt;code&gt;ABC123&lt;/code&gt;, &lt;code&gt;123ABC456&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@VehicleEngine&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;engineCode&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isVehicleEngine&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123456"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Book Related Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ISBN&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: International Standard Book Number validation, supporting 10-digit and 13-digit ISBN formats.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;9780306406157&lt;/code&gt; (13-digit) or &lt;code&gt;0306406152&lt;/code&gt; (10-digit)&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ISBN&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;isbn&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isISBN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"9780306406157"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ISSN&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: International Standard Serial Number validation, supporting 8-digit ISSN format.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;0317-8471&lt;/code&gt; or &lt;code&gt;03178471&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ISSN&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;issn&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isISSN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0317-8471"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@DOI&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Digital Object Identifier validation, used for unique identification of digital resources, widely used in academic publications.&lt;/li&gt;
&lt;li&gt;Example Format: Starting with "10.", such as &lt;code&gt;10.1000/182&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@DOI&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;doi&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDOI&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"10.1000/182"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@CLC&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Validate whether the string is a valid Chinese Library Classification (CLC) number. The Chinese Library Classification is a book classification system widely used in Chinese libraries&lt;/li&gt;
&lt;li&gt;Example Format: A, B, TP, TP3, TP311, TP311.1, TP311.138, TP311.138.S6, O175.2, R329.2, F272.3&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@CLC&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;clcNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isCLC&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"TP311.138"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@DDC&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Validate whether the string is a valid Dewey Decimal Classification (DDC) number. The Dewey Decimal Classification is a classification system widely used in libraries&lt;/li&gt;
&lt;li&gt;Example Format: 000, 100, 200, ..., 999, 510, 516.3, 330.94&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@DDC&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;ddcNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isDDC&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"516.3"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@ORCID&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: Open Researcher and Contributor ID validation, used to uniquely identify academic authors and contributors.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;0000-0002-1825-0097&lt;/code&gt; or &lt;code&gt;0000000218250097&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@ORCID&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;orcidId&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isORCID&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0000-0002-1825-0097"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@IPC&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: International Patent Classification number validation, used to identify patent technical fields.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;A01B1/00&lt;/code&gt;, &lt;code&gt;A01B1/01&lt;/code&gt;, &lt;code&gt;H01B12/00&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@IPC&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;ipcNumber&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIPC&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"A01B1/00"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile Phone Related Validation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;@IMEI&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Validation Rule: IMEI validation, validating whether the string is a valid International Mobile Equipment Identity.&lt;/li&gt;
&lt;li&gt;Example Format: &lt;code&gt;123412341234564&lt;/code&gt; or &lt;code&gt;123412-341234564&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Usage Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// Annotation-based usage&lt;/span&gt;
  &lt;span class="nd"&gt;@IMEI&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;imei&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Chain call usage&lt;/span&gt;
  &lt;span class="nc"&gt;ValidX&lt;/span&gt; &lt;span class="n"&gt;validator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ValidX&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isIMEI&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"123412341234564"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↑ Back to Quick Reference&lt;/p&gt;

&lt;h2&gt;
  
  
  More Validation Annotations
&lt;/h2&gt;

&lt;p&gt;If you need more validations, you can contact us for expansion and support. Contact information:&lt;/p&gt;

&lt;p&gt;Sharif&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:vipxieliang@126.com"&gt;vipxieliang@126.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution
&lt;/h2&gt;

&lt;p&gt;You can participate in this project in various ways, not limited to the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feedback on problems encountered during use&lt;/li&gt;
&lt;li&gt;Share successful experiences&lt;/li&gt;
&lt;li&gt;Update and improve documentation&lt;/li&gt;
&lt;li&gt;Solve and discuss issues&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>backend</category>
      <category>java</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
