نحوه تولید کدهای QR بدون دردسر با API .NET 8 را کشف کنید 🧑🏻💻🚀

چرا در سال 2025 با کدهای QR دست و پنجه نرم می کنیم؟
کدهای QR به بخشی جدایی ناپذیر از زندگی دیجیتال ما تبدیل شده اند. از اسکن منوها در رستوران ها گرفته تا فعال کردن پرداخت های بدون تماس، تطبیق پذیری آن ها باعث می شود در بسیاری از برنامه ها حتماً داشته باشید. اگر شما یک مهندس نرم افزار هستید که با دات نت کار می کنید، خوش شانس هستید! کتابخانه QRCoder یک راه ساده و کارآمد برای تولید کدهای QR تنها در چند خط کد ارائه می دهد.
چرا این کار را می کنم؟
اعضای خانواده من همیشه با به خاطر سپردن رمزهای عبور شبکه های وای فای خانگی مشکل داشتند. این مربوط به تلویزیون های هوشمند جدید، تبلت های جدید، کنسول ها، رایانه های شخصی، لپ تاپ ها و غیره است. من هرگز سعی نکردم این مشکل را برطرف کنم زیرا همیشه به آنها می گفتم “از ابزارهایی مانند KeePass استفاده کنید یا آن رمزهای عبور را بنویسید و آنها را در مکانی امن قرار دهید” اما این پیشنهادات هرگز جواب نداد. آنها هرگز به من گوش نکردند xD. در یک نقطه راه حلی را دیدم که در آن می توانید کد QR را با دستگاه تلفن همراه خود اسکن کنید و دستگاه به طور خودکار به شبکه تعریف شده در پشت آن کد QR متصل می شود. کاری که میخواستم انجام دهم ایجاد API ساده است که کدهای QR قابل چاپ را به من میدهد تا بتوانم آن کدهای QR چاپ شده را مستقیماً روی روترها بچسبانم.
چرا QRCoder؟
QRCoder یک کتابخانه محبوب و منبع باز برای تولید کدهای QR در برنامه های NET است. در اینجا چند دلیل وجود دارد که چرا باید آن را برای استفاده خود در نظر بگیرید:
- سهولت استفاده: API بسیار ساده که به خوبی مستند شده است و به شما امکان می دهد کدهای QR را با حداقل تلاش تولید کنید.
- سبک وزن: کتابخانه فشرده با 0 وابستگی به کتابخانه های خارجی
- پشتیبانی از بسیاری از موارد استفاده: در حال حاضر، QRCoder از 21 مورد استفاده پشتیبانی می کند و پیاده سازی مولد بار سفارشی شما بسیار آسان است.
شروع کردن
اجرای من از کتابخانه QRCoder به عنوان NET 8 API
✨ مخزن Github
کتابخانه QRCode را نصب کنید
اگر پروژه جدیدی را شروع می کنید، می توانید بسته QRCoder NuGet را با اجرای دستور زیر نصب کنید:
dotnet add package QRCoder
از طرف دیگر، اگر در مخزن کلون شده کار می کنید، مطمئن شوید که کتابخانه از قبل گنجانده شده است.
یک کمک کننده ساده برای تولید کدهای QR بسازید
public static class QrCodeGeneratorHelper
{
public static byte[] GenerateCode(string payload, int pixelPerModule)
{
var qrGenerator = new QRCoder.QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(payload, QRCoder.QRCodeGenerator.ECCLevel.Q);
using var qrCode = new PngByteQRCode(qrCodeData);
return qrCode.GetGraphic(pixelPerModule);
}
}
Helper را می توان همانطور که در مثال زیر نشان داده شده است استفاده کرد و برای هر نوع محموله ای جهانی است. پیکسل در هر ماژول برابر است با تعداد پیکسل هایی که می توان در هر ماژول بارکد قرار داد. این در پیکربندی پروژه حل شده است و باید در appsettings.json قابل تنظیم باشد.
پیکربندی
PPM که قبلا ذکر شد – پیکسل در هر ماژول را می توان برای هر نوع کد QR تنظیم کرد. به چه معناست و چرا باید قابل تنظیم باشد؟
شما همیشه باید سعی کنید فرآیند تغییر پیکربندی پروژه خود را ساده کنید، بنابراین من این مثال را در اینجا دنبال کردم و PPM را برای هر مورد استفاده (نوع کد QR) قابل تنظیم کردم. پیکربندی در appsettings.json نگهداری می شود و به راحتی قابل تغییر است. چیزهای هاردکد تمرین بدی است و میتواند نیاز به بازنویسی مطالب را فقط برای ایجاد یک تغییر ساده داشته باشد.
public enum QrCodeType
{
WiFi = 1,
WhatsApp = 2,
Url = 3,
Sms = 4,
PhoneNumber = 5
}
public interface IQrCodeConfiguration
{
int PixelPerModule { get; init; }
QrCodeType QrCodeType { get; init; }
}
نمونه سطح بالا از تولید کد QR WiFi
// Here you should use generator for your use case. I'll use WiFi payload generator here but just as example.
var generator = new PayloadGenerator.WiFi(request.Ssid, request.Password, PayloadGenerator.WiFi.Authentication.WPA2);
// Grab your configuration for QR code type - this may vary per individual but I wanted to make this configurable in appsettings.json
var configuration = _configuration.FirstOrDefault(x => x.QrCodeType == QrCodeType.WiFi);
string payload = generator.ToString();
// result type will be byte array - byte[]
var result = QrCodeGeneratorHelper.GenerateCode(payload, configuration.PixelPerModule);
// we should return it as type Task
return await Task.FromResult(result);
ممکن است از خود بپرسید که این از منظر کنترلر چگونه به نظر می رسد؟
[ApiController]
[Route("api/generate")]
public class QrCodeGeneratorController : ControllerBase
{
private readonly IMsisdnHandler _msisdnHandler;
private readonly ISmsHandler _smsHandler;
private readonly IUrlHandler _urlHandler;
private readonly IWhatsAppMessageHandler _whatsAppMessageHandler;
private readonly IWiFiHandler _wiFiHandler;
public QrCodeGeneratorController(
IMsisdnHandler msisdnHandler,
ISmsHandler smsHandler,
IUrlHandler urlHandler,
IWhatsAppMessageHandler whatsAppMessageHandler,
IWiFiHandler wiFiHandler
)
{
_msisdnHandler = msisdnHandler;
_smsHandler = smsHandler;
_urlHandler = urlHandler;
_whatsAppMessageHandler = whatsAppMessageHandler;
_wiFiHandler = wiFiHandler;
}
[HttpPost("msisdn")]
public async Task<IActionResult> Generate(MsisdnQrCodeRequest request)
{
var byteArray = await _msisdnHandler.GenerateQrCode(request);
return File(byteArray, MediaType.Png);
}
[HttpPost("sms")]
public async Task<IActionResult> Generate(SmsQrCodeRequest request)
{
var byteArray = await _smsHandler.GenerateQrCode(request);
return File(byteArray, MediaType.Png);
}
[HttpPost("url")]
public async Task<IActionResult> Generate(UrlQrCodeRequest request)
{
var byteArray = await _urlHandler.GenerateQrCode(request);
return File(byteArray, MediaType.Png);
}
[HttpPost("whatsapp")]
public async Task<IActionResult> Generate(WhatsAppMessageQrCodeRequest request)
{
var byteArray = await _whatsAppMessageHandler.GenerateQrCode(request);
return File(byteArray, MediaType.Png);
}
[HttpPost("wifi")]
public async Task<IActionResult> Generate(WiFiQrCodeRequest request)
{
var byteArray = await _wiFiHandler.GenerateQrCode(request);
return File(byteArray, MediaType.Png);
}
}
نتیجه گیری
به طور خلاصه، آیا این بهترین پیاده سازی کتابخانه QRCoder است؟ مطلقاً نه، مطلق است 💩! آنچه من پیشنهاد می کنم این است – اگر شما موارد استفاده مشابهی مانند من دارید، می توانید پروژه نمونه من را که در این پست لینک کردم را امتحان کنید و سعی کنید چیز بهتر و مناسب تری برای شما بنویسم.
مواردی مانند ورود به سیستم، نظارت و اعتبارسنجی درخواست به درستی در این پروژه انجام نشده است و شما باید انجام دهید قطعا این کار را در کد آماده تولید خود انجام دهید.
بنابراین آیا باید از QRCoder برای ماجراجویی بعدی خود با کدهای QR استفاده کنید؟ قطعاً، این یک کتابخانه عالی است که بسیار قابل تنظیم، سبک وزن است و 0 وابستگی خارجی دارد.
اگر این وبلاگ را مفید یافتید، فراموش نکنید که مخزن را بررسی کنید و به آن ستاره بدهید! کد نویسی مبارک! 🧑🏻💻🚀