vvet_backend_1/routes/vvetRoutes.js

65 lines
1.9 KiB
JavaScript

const express = require('express');
const multer = require('multer');
const tesseract = require('tesseract.js');
const fs = require('fs');
const path = require('path');
// Configure multer for file upload
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './uploads/pan/');
},
filename: (req, file, cb) => {
const timestamp = Date.now();
cb(null, `${timestamp}-${file.originalname}`);
},
});
const upload = multer({ storage });
const router = express.Router();
// Basic PAN format validation (simple regex)
const isValidPan = (pan) => {
const panRegex = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;
return panRegex.test(pan);
};
// Verify PAN number and compare with image text
router.post('/verify', upload.single('panImage'), async (req, res) => {
try {
const { pan } = req.body;
const imagePath = req.file.path; // Path to the uploaded image
console.log('Received PAN:', pan);
console.log('Image Path:', imagePath);
// Validate PAN format
if (!isValidPan(pan)) {
return res.status(400).json({ message: 'Invalid PAN format' });
}
// Perform OCR on the uploaded image to extract the text
const result = await tesseract.recognize(imagePath, 'eng', {
logger: (m) => console.log(m),
});
const extractedText = result.data.text.trim(); // The text extracted from the image
console.log('Extracted PAN from image:', extractedText);
// Compare the extracted text with the provided PAN number
if (extractedText === pan) {
res.status(200).json({ message: 'PAN verified successfully' });
} else {
res.status(400).json({ message: 'PAN number does not match the uploaded image' });
}
// Clean up the uploaded image file after processing (optional)
fs.unlinkSync(imagePath);
} catch (error) {
console.error('Error during PAN verification:', error);
res.status(500).json({ message: 'Error verifying PAN' });
}
});
module.exports = router;