Introduction
Ever received a document with a barcode and wondered if it’s legitimate? You’re not alone. In today’s digital landscape, document fraud is a real concern, and barcodes have become a critical line of defense. Whether you’re managing invoices, shipping labels, certificates, or legal contracts, verifying barcode authenticity is essential to maintaining trust and security in your document workflow.
Here’s the good news: implementing barcode verification in .NET doesn’t have to be complicated. With GroupDocs.Signature for .NET, you can add robust barcode verification to your applications in just a few lines of code. This comprehensive guide walks you through everything you need to know—from basic verification to advanced scenarios like regex pattern matching and multi-barcode validation.
By the end of this tutorial, you’ll be able to verify barcodes across multiple document formats (PDF, Word, Excel, and more), handle edge cases gracefully, and implement security measures that actually work in production environments.
Why Barcode Verification Matters
Before we dive into the code, let’s talk about why barcode verification in .NET is so important for your applications.
Barcodes aren’t just for scanning products at checkout anymore. They’ve evolved into powerful authentication tools that encode critical information—product IDs, invoice numbers, security codes, you name it. But here’s the catch: a barcode is only as trustworthy as your ability to verify it.
Real-world scenarios where barcode verification makes a difference:
- Supply Chain Management: Verify that shipping labels and inventory barcodes match your database records, preventing costly errors and potential fraud
- Document Authentication: Confirm that certificates, legal documents, and contracts haven’t been tampered with after the barcode was applied
- Invoice Processing: Automatically validate invoice barcodes to streamline accounts payable and catch fraudulent invoices before payment
- Access Control: Verify ID badges and tickets in real-time to prevent unauthorized access
- Quality Assurance: Ensure product tracking barcodes are accurate throughout manufacturing and distribution
The GroupDocs.Signature API gives you the tools to implement these security measures without reinventing the wheel. Instead of building barcode parsing logic from scratch, you get a battle-tested library that handles the heavy lifting.
Prerequisites
Before implementing barcode verification functionality, make sure you have these essentials ready:
- GroupDocs.Signature for .NET: Download and install the library from the download page. The library supports .NET Framework 4.6.1+ and .NET Core 2.0+, so you’ve got flexibility in your project setup.
- Development Environment: Visual Studio 2019 or later works great, but any compatible .NET IDE will do the job.
- Basic C# Knowledge: You should be comfortable with C# fundamentals—namespaces, classes, and using statements. If you can write a console app, you’re good to go.
- Test Document: Grab a sample document with barcode signatures for testing. Don’t have one? No problem—GroupDocs provides sample files, or you can create your own using the library’s signing features (we’ll touch on that later).
Optional but helpful:
- NuGet Package Manager (makes installation a breeze)
- A basic understanding of barcode types (Code128, QR codes, etc.)—though we’ll explain as we go
Import Required Namespaces
Start by importing the necessary namespaces to access the GroupDocs.Signature functionality. These give you everything you need for barcode verification in .NET without cluttering your code with fully qualified names:
using System;
using GroupDocs.Signature;
using GroupDocs.Signature.Domain;
using GroupDocs.Signature.Options;
What each namespace does:
GroupDocs.Signature
: The main namespace containing the Signature class (your entry point for all operations)GroupDocs.Signature.Domain
: Contains result objects and signature metadata classesGroupDocs.Signature.Options
: Houses all the options classes for configuring verification behavior
Now let’s break down the barcode verification process into clear, manageable steps that you can follow along with.
Step 1: Specify the Document Path
// Path to the document containing barcode signatures
string filePath = "sample_multiple_signatures.docx";
This is straightforward, but here’s what you need to know: the file path can be relative (as shown) or absolute. If you’re working with uploaded files in a web application, you’ll typically get the path from your file storage service or temp directory.
Pro tip: For production applications, always validate that the file exists before attempting verification. A simple File.Exists(filePath)
check can save you from confusing error messages later.
Step 2: Initialize the Signature Object
// Create an instance of Signature class by passing document path
using (Signature signature = new Signature(filePath))
{
// Verification code will be implemented here
}
The Signature class is the main entry point for all operations in the GroupDocs.Signature API. Notice we’re using a using
statement here—that’s important because it ensures proper disposal of resources after verification completes.
Behind the scenes: When you initialize the Signature object, the library opens the document and prepares it for processing. This works across multiple formats (PDF, DOCX, XLSX, PPTX, images) without you needing to write format-specific code.
Step 3: Configure Barcode Verification Options
// Define barcode verification options
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = true, // Check all pages of the document
Text = "12345", // Text to match within the barcode
MatchType = TextMatchType.Contains // Specify text matching criteria
};
This is where you define what you’re looking for. The verification options give you fine-grained control over the verification process:
AllPages
: Set totrue
to scan every page in the document. For multi-page documents with barcodes on specific pages, you can optimize performance by setting this tofalse
and specifyingPageNumber
instead.Text
: The content you expect to find in the barcode. This could be an invoice number, product ID, or any encoded information.MatchType
: Controls how the text matching works. Your options are:Contains
: The barcode text includes your specified text anywhere (most flexible)Exact
: The barcode text must match exactly (case-sensitive)StartsWith
: The barcode text must begin with your specified textEndsWith
: The barcode text must end with your specified textRegex
: Use regular expressions for complex pattern matching (we’ll cover this later)
When to use each MatchType:
- Use
Contains
when you’re verifying partial information (like a product code within a longer barcode) - Use
Exact
for security tokens or when you need precise matching - Use
StartsWith
orEndsWith
for prefixed or suffixed identifiers - Use
Regex
when you need to validate format patterns (like “INV-2024-0001”)
Step 4: Execute Verification Process
// Perform verification
VerificationResult result = signature.Verify(options);
This single line does the heavy lifting. The Verify
method scans the document according to your options and returns a VerificationResult
object containing detailed information about what it found.
What happens during verification:
- The library scans the specified pages for barcodes
- Decodes any barcodes it finds
- Compares the decoded content against your criteria
- Collects successful and failed matches
- Returns a comprehensive result object
The process is fast—typically completing in milliseconds for standard documents—and handles errors gracefully without crashing your application.
Step 5: Process Verification Results
// Check verification result and process accordingly
if (result.IsValid)
{
Console.WriteLine($"Document {filePath} contains valid barcode signatures!");
// Display information about successful signatures
foreach (BarcodeSignature barcodeSignature in result.Succeeded)
{
Console.WriteLine($"\nFound valid barcode signature:");
Console.WriteLine($"Text: {barcodeSignature.Text}");
Console.WriteLine($"Type: {barcodeSignature.EncodeType.TypeName}");
Console.WriteLine($"Location: Page {barcodeSignature.PageNumber}, {barcodeSignature.Left}x{barcodeSignature.Top}");
}
}
else
{
Console.WriteLine($"Document {filePath} failed verification process.");
Console.WriteLine($"Number of failed signatures: {result.Failed.Count}");
}
The VerificationResult
object gives you everything you need to make decisions in your application:
IsValid
: Quick boolean check—did at least one barcode match your criteria?Succeeded
: Collection of all barcodes that passed verification (with full metadata)Failed
: Collection of barcodes that didn’t match your criteria
Each BarcodeSignature
object in the results contains rich metadata:
Text
: The decoded barcode contentEncodeType
: The barcode type (Code128, QR, etc.)PageNumber
: Which page the barcode appears onLeft
andTop
: Exact position on the page (useful for visual highlighting)Width
andHeight
: Barcode dimensions
Real-world handling: In production, you’d typically log this information, update your database, trigger workflows, or display feedback to users rather than just printing to console.
Complete Example
Here’s a complete working example that demonstrates barcode verification in action. This example shows you how all the pieces fit together in a real application:
using System;
using GroupDocs.Signature;
using GroupDocs.Signature.Domain;
using GroupDocs.Signature.Options;
namespace GroupDocs.Signature.Examples
{
class Program
{
static void Main(string[] args)
{
// Document path
string filePath = "sample_multiple_signatures.docx";
try
{
// Initialize Signature instance
using (Signature signature = new Signature(filePath))
{
// Setup verification options
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = true,
Text = "12345",
MatchType = TextMatchType.Contains
};
// Verify document signatures
VerificationResult result = signature.Verify(options);
// Process verification results
if (result.IsValid)
{
Console.WriteLine($"Document {filePath} contains valid barcode signatures!");
foreach (BarcodeSignature item in result.Succeeded)
{
Console.WriteLine($"\nValid signature found with text: {item.Text}");
Console.WriteLine($"Barcode type: {item.EncodeType.TypeName}");
Console.WriteLine($"Page: {item.PageNumber}");
}
}
else
{
Console.WriteLine($"\nDocument {filePath} failed verification process.");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
}
Why this structure works:
- The
try-catch
block prevents unexpected crashes from file access issues or corrupted documents - The
using
statement ensures proper resource cleanup even if an exception occurs - The results processing is straightforward and easy to extend with your business logic
Advanced Verification Scenarios
Now that you’ve mastered the basics of barcode verification in .NET, let’s explore more sophisticated use cases. These advanced scenarios help you handle real-world complexity where basic verification isn’t quite enough.
Verifying Specific Barcode Types
If you know the specific barcode type you’re looking for, you can optimize performance and improve accuracy by restricting verification to that type. This is particularly useful when you’re working with standardized documents where barcode types are consistent:
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
EncodeType = BarcodeTypes.Code128, // Verify only Code128 barcodes
Text = "PROD-12345",
MatchType = TextMatchType.Exact
};
When to use type-specific verification:
- You’re processing standardized forms (invoices, shipping labels) that always use the same barcode type
- You want to ignore decorative QR codes or unrelated barcodes in the document
- You’re optimizing performance in high-volume processing scenarios
Common barcode types you might target:
BarcodeTypes.Code128
: Popular for shipping and product trackingBarcodeTypes.QR
: Common for URLs, contact info, and modern authenticationBarcodeTypes.EAN13
orEAN8
: Standard retail product barcodesBarcodeTypes.PDF417
: Often used for driver’s licenses and travel documentsBarcodeTypes.DataMatrix
: Compact 2D barcodes for small items
Verifying Barcodes on Specific Pages
For multi-page documents, scanning every page isn’t always necessary (or efficient). You can target specific pages when you know where barcodes should appear:
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = false,
PageNumber = 2, // Verify only on page 2
Text = "INV-2023"
};
Performance boost: On a 50-page contract where the barcode is always on the signature page, specifying the page number can reduce processing time by 95% or more.
Practical applications:
- Invoice processing: Verify barcodes on the first page only
- Contract verification: Check signature pages where authentication barcodes appear
- Multi-document packets: Verify cover pages or specific sections
Using Regular Expressions for Verification
Regular expressions give you pattern-matching superpowers. Instead of matching exact text, you can verify that barcodes follow specific formats—perfect for validating structured identifiers:
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
Text = "INV-\\d{4}-\\d{2}", // Match invoice numbers like INV-2023-01
MatchType = TextMatchType.Regex
};
Real-world regex patterns:
- Invoice numbers:
"INV-\\d{4}-\\d{2}"
matches “INV-2024-01” - Product codes:
"[A-Z]{3}-\\d{5}"
matches “ABC-12345” - Order IDs:
"ORD\\d{8}"
matches “ORD20240115” - Serial numbers:
"SN[A-F0-9]{12}"
matches “SN4B2A3F8E9D1C”
Pro tip: Test your regex patterns thoroughly before deploying. Use a tool like regex101.com to validate patterns, and remember to escape backslashes in C# strings (use \\
for a single backslash in the regex).
Verifying Multiple Barcode Types Simultaneously
Sometimes documents contain multiple types of barcodes—maybe a QR code for a website link and a Code128 for tracking. You can verify different types with different criteria in a single operation:
// Create a list of verification options
List<VerifyOptions> listOptions = new List<VerifyOptions>();
// Add QR Code verification
listOptions.Add(new BarcodeVerifyOptions()
{
EncodeType = BarcodeTypes.QR,
Text = "Security"
});
// Add Code128 verification
listOptions.Add(new BarcodeVerifyOptions()
{
EncodeType = BarcodeTypes.Code128,
Text = "12345"
});
// Verify with multiple options
VerificationResult result = signature.Verify(listOptions);
How it works: The library processes all verification options you provide and returns a combined result. The verification succeeds if any of your criteria are met (logical OR operation).
Use cases:
- Certificates with both authentication QR codes and tracking barcodes
- Shipping labels with multiple identification methods
- Multi-vendor documents where barcode standards vary
Common Mistakes to Avoid
Even experienced developers run into these pitfalls when implementing barcode verification. Learning from these common mistakes can save you hours of debugging:
Mistake 1: Not Handling Document Format Variations
The problem: Assuming all documents use the same barcode placement or quality.
The solution: Always test with multiple document samples. PDFs from different generators, scanned documents, and natively digital documents can all render barcodes differently. Build flexibility into your verification logic:
// Instead of hardcoding page numbers, search all pages for critical documents
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = true, // More reliable than assuming specific pages
Text = "CRITICAL-INFO",
MatchType = TextMatchType.Contains
};
Mistake 2: Using Exact Matching Too Liberally
The problem: Setting MatchType.Exact
when you should use Contains
or StartsWith
.
Why it matters: Barcodes sometimes include extra information like checksums, dates, or formatting characters. If your barcode contains “INV-2024-001-VERIFIED” but you’re checking for exact match “INV-2024-001”, verification will fail.
The solution: Use Contains
for partial matching, or use regex for format validation:
// More flexible approach
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
Text = "INV-2024-001",
MatchType = TextMatchType.Contains // Handles extra suffixes/prefixes
};
Mistake 3: Ignoring Case Sensitivity
The problem: Barcode text might be uppercase, lowercase, or mixed case depending on the encoding.
The solution: When case doesn’t matter for your business logic, normalize the comparison or use case-insensitive matching (if your barcode format allows it). For GroupDocs, the comparison respects the case in your verification text, so be consistent:
// Be aware that these are different:
Text = "ABC123" // Won't match "abc123"
Text = "abc123" // Won't match "ABC123"
Mistake 4: Not Validating Before Verification
The problem: Attempting to verify documents that don’t exist or are corrupted.
The solution: Always validate file existence and readability before verification:
if (!File.Exists(filePath))
{
Console.WriteLine($"Error: File not found at {filePath}");
return;
}
try
{
using (Signature signature = new Signature(filePath))
{
// Verification code here
}
}
catch (Exception ex)
{
Console.WriteLine($"Error processing document: {ex.Message}");
// Log the exception for troubleshooting
}
Mistake 5: Overlooking Performance in Batch Processing
The problem: Processing thousands of documents without optimization leads to slow performance.
The solution: When processing multiple documents, implement these optimizations:
- Verify specific pages instead of all pages when possible
- Specify barcode types to reduce detection time
- Use parallel processing for independent document verification
- Cache verification results when reprocessing the same documents
Best Practices for Barcode Verification
Following these best practices will help you build robust, maintainable barcode verification systems:
1. Implement Comprehensive Error Handling
Don’t just catch exceptions—handle specific error scenarios gracefully. This makes your application more resilient and easier to troubleshoot:
try
{
using (Signature signature = new Signature(filePath))
{
VerificationResult result = signature.Verify(options);
// Process result
}
}
catch (FileNotFoundException ex)
{
// Handle missing file specifically
LogError($"Document not found: {ex.Message}");
}
catch (UnauthorizedAccessException ex)
{
// Handle permission issues
LogError($"Access denied: {ex.Message}");
}
catch (Exception ex)
{
// Catch-all for unexpected errors
LogError($"Unexpected error: {ex.Message}");
}
2. Optimize for Performance
Performance matters, especially when processing large volumes of documents. Consider these optimization strategies:
- Target specific pages: If you know barcodes appear on page 1, don’t scan all 50 pages
- Specify barcode types: Reduce detection overhead by limiting to expected types
- Cache results: For documents that won’t change, store verification results in your database
- Use async operations: When verifying multiple documents, process them asynchronously
Example of targeted verification:
// Fast: Only checks page 1 for Code128 barcodes
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = false,
PageNumber = 1,
EncodeType = BarcodeTypes.Code128,
Text = "FAST-VERIFY"
};
3. Implement Robust Logging
Logging verification attempts and results is crucial for auditing, troubleshooting, and security. At minimum, log:
- Verification attempts (document ID, timestamp, user)
- Verification results (success/failure, matched criteria)
- Failed verification details (why it failed, what was found)
- Performance metrics (processing time, page count)
Sample logging approach:
var stopwatch = Stopwatch.StartNew();
VerificationResult result = signature.Verify(options);
stopwatch.Stop();
LogVerification(new VerificationLog
{
DocumentPath = filePath,
Success = result.IsValid,
MatchedBarcodes = result.Succeeded.Count,
ProcessingTime = stopwatch.ElapsedMilliseconds,
Timestamp = DateTime.UtcNow
});
4. Consider Security Implications
Barcode verification often plays a role in your security infrastructure. Keep these considerations in mind:
- Never expose verification criteria in client-side code: Store expected barcode patterns server-side
- Validate document integrity: Consider combining barcode verification with digital signatures
- Implement rate limiting: Prevent abuse by limiting verification attempts per user/IP
- Audit all verification attempts: Maintain logs for security auditing and compliance
5. Test Thoroughly Across Document Types
Barcode rendering varies across document formats and creation tools. Your testing should include:
- Format variations: Test PDF, DOCX, XLSX, images, etc.
- Creation sources: Documents from different software (Word, LibreOffice, online converters)
- Quality levels: High-quality native documents and lower-quality scanned documents
- Edge cases: Rotated barcodes, partially obscured barcodes, damaged barcodes
Testing checklist:
- ✓ Native digital documents (created programmatically)
- ✓ Scanned documents (various DPI settings)
- ✓ Different barcode types (Code128, QR, EAN, etc.)
- ✓ Multi-page documents with barcodes on different pages
- ✓ Documents with multiple barcodes
- ✓ Edge cases (rotated, damaged, or low-contrast barcodes)
Troubleshooting Common Issues
Even with careful implementation, you’ll occasionally encounter issues with barcode verification. Here’s how to diagnose and resolve the most common problems:
Issue: Barcode Not Detected
Symptoms: Verification returns IsValid = false
and Succeeded.Count = 0
, even though you can see the barcode in the document.
Possible causes and solutions:
1. Barcode Quality Issues Poor image quality, especially in scanned documents, can prevent detection. If the barcode is blurry, low-contrast, or partially obscured:
- Try increasing the scan resolution (300 DPI minimum for reliable detection)
- Ensure adequate contrast between the barcode and background
- Check if the barcode is rotated—some formats handle rotation better than others
2. Unsupported Barcode Type Not all barcode formats are supported. Verify your barcode type is in the GroupDocs supported list:
// Check if your barcode type is supported
var supportedTypes = BarcodeTypes.AllTypes;
foreach (var type in supportedTypes)
{
Console.WriteLine(type.TypeName);
}
3. Barcode is Actually an Image Sometimes what looks like a barcode is actually a picture of a barcode. The library can only decode actual barcode data, not images that resemble barcodes.
4. Document Format Complications Some document formats preserve barcode data better than others. PDFs generally work best. If you’re having trouble with Word documents, try converting to PDF first.
Debugging approach:
// Enable all pages and remove text filtering to see what's detected
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = true
// Don't specify Text or EncodeType initially
};
VerificationResult result = signature.Verify(options);
// Check what was actually found
Console.WriteLine($"Total barcodes found: {result.Succeeded.Count}");
foreach (var barcode in result.Succeeded)
{
Console.WriteLine($"Type: {barcode.EncodeType.TypeName}, Text: {barcode.Text}");
}
Issue: Verification Fails Despite Correct Barcode
Symptoms: You know the barcode exists and contains the right text, but verification still fails.
Common causes:
1. Text Matching Issues Your verification text might not match the actual barcode content due to:
- Extra whitespace in the barcode text
- Case sensitivity mismatches
- Additional characters (checksums, prefixes, suffixes)
Solution: Start with MatchType.Contains
and broaden your search:
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
AllPages = true,
Text = "12345",
MatchType = TextMatchType.Contains // Most forgiving option
};
2. Wrong MatchType Selection
Using Exact
when you should use Contains
or vice versa.
Solution: Understand your barcode content first:
// First, discover what's actually in the barcode
BarcodeVerifyOptions discoveryOptions = new BarcodeVerifyOptions()
{
AllPages = true
};
var result = signature.Verify(discoveryOptions);
// Then use appropriate matching
foreach (var barcode in result.Succeeded)
{
Console.WriteLine($"Found: {barcode.Text}");
// Now you know exactly what to match
}
3. Specifying Wrong Barcode Type
If you specified EncodeType
, make sure it matches the actual barcode type in the document.
Issue: Performance is Slower Than Expected
Symptoms: Verification takes several seconds or longer for documents that should process quickly.
Optimization strategies:
1. Reduce Scan Scope Don’t scan all pages if you don’t need to:
// Before (slow): Scans all 100 pages
BarcodeVerifyOptions slowOptions = new BarcodeVerifyOptions()
{
AllPages = true,
Text = "INVOICE-001"
};
// After (fast): Scans only page 1
BarcodeVerifyOptions fastOptions = new BarcodeVerifyOptions()
{
AllPages = false,
PageNumber = 1,
Text = "INVOICE-001"
};
2. Specify Barcode Type When you know the barcode type, tell the library:
BarcodeVerifyOptions options = new BarcodeVerifyOptions()
{
EncodeType = BarcodeTypes.Code128, // Reduces detection overhead
Text = "PRODUCT-CODE"
};
3. Process Documents Asynchronously For batch processing, use parallel operations:
var documents = GetDocumentList();
var verificationTasks = documents.Select(doc =>
Task.Run(() => VerifyDocument(doc))
);
await Task.WhenAll(verificationTasks);
Issue: Memory Usage Grows with Large Batches
Symptoms: Processing many documents causes increasing memory consumption.
Solutions:
1. Dispose Properly
Always use using
statements to ensure resources are released:
// Good: Automatic disposal
using (Signature signature = new Signature(filePath))
{
// Verification code
}
// Bad: Manual disposal required (easy to forget)
Signature signature = new Signature(filePath);
// Do work
signature.Dispose(); // Must remember to call this
2. Process in Batches For thousands of documents, process in smaller batches with delays:
const int batchSize = 100;
for (int i = 0; i < documents.Count; i += batchSize)
{
var batch = documents.Skip(i).Take(batchSize);
foreach (var doc in batch)
{
// Process document
}
// Optional: Give GC a chance to clean up
GC.Collect();
GC.WaitForPendingFinalizers();
}
Conclusion
Implementing barcode verification in .NET applications doesn’t have to be overwhelming. With GroupDocs.Signature for .NET, you get a powerful, flexible API that handles the complexity of barcode detection and validation across multiple document formats.
Throughout this guide, you’ve learned how to:
- Set up and configure basic barcode verification with just a few lines of code
- Process verification results and extract detailed barcode metadata
- Implement advanced scenarios like regex matching and multi-type verification
- Optimize performance for large-scale document processing
- Avoid common pitfalls that trip up even experienced developers
- Troubleshoot issues when verification doesn’t work as expected
The real power of GroupDocs.Signature comes from its flexibility. Whether you’re building a simple invoice validator or a complex document authentication system, the same core API adapts to your needs. Start with basic verification, then layer in advanced features as your requirements grow.
Next steps to take:
- Download the library and run the complete example from this guide
- Test with your own documents to understand how your specific barcode formats behave
- Implement error handling and logging appropriate for your production environment
- Explore the additional features like digital signatures and metadata extraction that complement barcode verification
Remember, document security is an ongoing process, not a one-time implementation. As your needs evolve—whether that’s supporting new barcode types, handling higher volumes, or integrating with other security measures—the GroupDocs.Signature API grows with you.
FAQs
Which document formats are supported for barcode verification?
GroupDocs.Signature for .NET supports barcode verification across a comprehensive range of document formats. You can verify barcodes in PDF documents, Microsoft Word files (DOC, DOCX), Excel spreadsheets (XLS, XLSX), PowerPoint presentations (PPT, PPTX), and various image formats (PNG, JPG, BMP, TIFF, GIF). This broad format support means you don’t need different libraries for different document types—one API handles them all.
The library automatically detects the document format, so you don’t need to write format-specific code. Just pass the file path, and GroupDocs handles the rest.
Can I verify multiple barcodes in a single document?
Absolutely! GroupDocs.Signature excels at multi-barcode verification. When you run verification, the library automatically detects and processes all barcodes that match your criteria. The VerificationResult
object returns a collection of all successful matches through the Succeeded
property.
This is particularly useful for documents like shipping manifests (multiple package barcodes), inventory sheets (product codes), or multi-page contracts where different sections have authentication barcodes. You can iterate through the results to process each barcode individually or check aggregate counts to ensure the expected number of barcodes are present.
Which barcode types are supported for verification?
GroupDocs.Signature supports an extensive list of barcode types, covering virtually all commercial and industrial standards. Commonly used types include:
- 1D Barcodes: Code39, Code128, Code93, Codabar, EAN13, EAN8, UPC-A, UPC-E, ITF-14, and many more
- 2D Barcodes: QR Code, DataMatrix, PDF417, Aztec Code
- Postal Barcodes: Postnet, Planet, and others
The library supports over 60 barcode types in total. You can verify a specific type by setting the EncodeType
property in your verification options, or omit this property to detect any supported barcode type. For a complete list, check the BarcodeTypes
class documentation or enumerate BarcodeTypes.AllTypes
in your code.
Can I verify barcodes in password-protected documents?
Yes, GroupDocs.Signature provides built-in support for password-protected documents. When initializing the Signature object, you can pass LoadOptions
that include the document password. Here’s how:
LoadOptions loadOptions = new LoadOptions()
{
Password = "your-document-password"
};
using (Signature signature = new Signature(filePath, loadOptions))
{
// Verification code works normally
VerificationResult result = signature.Verify(options);
}
This works across all supported document formats that support password protection, including PDF, Word, and Excel files. Just make sure you’re handling passwords securely in your application—never hardcode them or expose them in logs.
Is it possible to verify barcodes that contain binary data instead of text?
Yes, while the examples in this guide focus on text-based barcodes (which are most common), GroupDocs.Signature also supports verification of barcodes containing binary data. Some barcode formats—particularly 2D barcodes like DataMatrix and QR codes—can encode raw binary data rather than text strings.
For binary barcode verification, you’ll work with the barcode’s binary data directly rather than the Text
property. The verification process is similar, but you’ll need to compare byte arrays instead of strings. This is less common in typical business applications but essential for certain technical or security use cases where barcodes encode encrypted data, images, or other non-text content.
How do I handle barcodes that are rotated or at angles in documents?
GroupDocs.Signature includes automatic barcode detection that can handle some degree of rotation, particularly with 2D barcodes like QR codes. However, severely rotated or skewed barcodes (more than 45 degrees) may not be detected reliably.
If you’re consistently dealing with rotated barcodes:
- Preprocess images to correct orientation before verification
- Use higher-quality scans that maintain barcode clarity
- Consider 2D barcode types (QR, DataMatrix) which handle rotation better than 1D barcodes
- Ensure adequate whitespace around barcodes in your document templates
For production systems processing scanned documents, implementing automatic image orientation correction as a preprocessing step significantly improves barcode detection rates.
What’s the difference between barcode verification and barcode reading?
This is an important distinction! Barcode reading (or scanning) extracts the data encoded in a barcode—you get the text or binary content. Barcode verification goes a step further by validating that the barcode content meets specific criteria you define.
With GroupDocs.Signature’s verification API, you’re not just reading barcodes—you’re checking whether they contain expected values, match specific patterns, or meet security requirements. This is crucial for document authentication because it confirms not just that a barcode exists and is readable, but that it contains the correct information for your business process.
In practice, verification includes reading (the library reads the barcode first), but adds the validation layer that makes it useful for security and workflow automation.
Can I use this library in web applications and cloud environments?
Absolutely! GroupDocs.Signature for .NET is designed to work seamlessly in various hosting environments:
- ASP.NET Web Applications: Works great in both MVC and Web API applications
- Azure: Fully compatible with Azure App Services, Azure Functions, and other Azure compute services
- AWS: Runs on EC2, Lambda (with custom runtimes), and other AWS platforms
- Docker Containers: Can be containerized for deployment in Kubernetes or other container orchestration platforms
- Desktop Applications: Also works in WinForms, WPF, and console applications
The main consideration for web and cloud deployments is licensing (make sure your license type covers your deployment scenario) and managing temporary files if you’re processing uploaded documents. The library itself is stateless and thread-safe, making it ideal for multi-threaded web environments.
Related Resources
Documentation and Downloads:
- GroupDocs.Signature API Reference - Complete API documentation with all classes and methods
- GroupDocs.Signature Downloads - Get the latest version of the library
- Official Documentation - Comprehensive guides and tutorials
Product Information:
- Product Page - Features, pricing, and licensing information
Support and Licensing:
- Support Forum - Community support and technical questions
- Temporary License - Get a free temporary license for evaluation purposes