- จากเป้าหมายที่จะลดการใช้บัตรพลาสติกของ Seattle Public Library และ King County Library System ทำให้ต้องจัดการโครงสร้าง JSON, รูปภาพ และลายเซ็นของ Wallet pass บน iPhone ด้วยตัวเอง
- Wallet รองรับเฉพาะ QR code, PDF417, Aztec Code และ Code 128 จึงไม่สามารถใส่ Codabar ของบัตรห้องสมุดเป็นบาร์โค้ดพื้นฐานได้ และต้องใช้รูปภาพเป็นทางเลี่ยงสำหรับบาร์โค้ดที่ใช้สแกนจริง
- pass ต้องถูกเซ็นด้วยคีย์ที่ Apple เชื่อถือ แต่แทนที่จะสมัคร Apple Developer ราคา 99 ดอลลาร์ต่อปี ก็ไปหาใบรับรองและคีย์จากแอป iOS สำหรับสร้าง pass ที่สร้างแบบออฟไลน์ได้มาใช้
- ผสมผสานเลย์เอาต์
storeCard, โลโก้ตามความละเอียด, Codabarstrip.pngและรายการPKBarcodeFormatCode128ว่าง เพื่อให้หน้าจอแสดงบาร์โค้ดแบบรูปภาพ แต่ยังคงพฤติกรรม เพิ่มความสว่างหน้าจอ ของ iOS ไว้ .pkpassที่เสร็จแล้วสามารถสร้างได้ด้วยการสร้าง manifest, เซ็นด้วยopenssl smimeและแพ็กเป็น ZIP และแม้ยังไม่ได้ทดสอบในห้องสมุดจริง แต่เครื่องสแกนแยกต่างหากอ่านบาร์โค้ดบนหน้าจอโทรศัพท์ได้
เป้าหมาย: ใช้บาร์โค้ดห้องสมุดโดยไม่ต้องมีบัตรพลาสติก
- Seattle Public Library และ King County Library System ออก บัตรพลาสติกพิมพ์บาร์โค้ด ที่ผูกกับบัญชียืมหนังสือ
- ณ ปี 2023 ฟังก์ชันส่วนใหญ่ของห้องสมุด Seattle เป็นแบบบริการตนเอง และโดยทั่วไปสามารถกรอกบาร์โค้ดห้องสมุดด้วยมือได้
- ถึงอย่างนั้น การแสดงบาร์โค้ดขึ้นมาทันทีสะดวกกว่ามาก เป้าหมายจึงคือการไม่ต้องใส่บัตรพลาสติกที่แทบไม่ได้ใช้ไว้ในกระเป๋าสตางค์ แต่ใส่ไว้ใน แอป Wallet ของ iPhone แทน
Wallet pass ประกอบด้วย JSON, รูปภาพ และลายเซ็น
- ปัจจุบันแอป Wallet จัดการบัตรชำระเงิน, ID, กุญแจ และอื่น ๆ แต่ตอนที่ Passbook เปิดตัวในปี 2012 นั้นจัดการเฉพาะ “pass” เท่านั้น
- ตามเอกสาร pass ของ Apple pass เป็น ไฟล์ ZIP แบบรวมทุกอย่างในตัว ที่แจกจ่ายผ่านอีเมลหรือเว็บได้ และภายในมี JSON กับ PNG
- องค์ประกอบหลักของไฟล์
.pkpassนั้นเรียบง่ายpass.json: อธิบายเนื้อหาของ pass ที่ไม่ใช่รูปภาพmanifest.json: รายการ เช็กซัม SHA-1 ของไฟล์อื่น ๆsignature: ลายเซ็น S/MIME ของเนื้อหาmanifest.json- ไฟล์รูปภาพที่รองรับ
ไม่รองรับ Codabar คืออุปสรรคแรก
- บาร์โค้ดที่ Wallet pass รองรับมีเพียงสี่ชนิด
- QR code
- PDF417
- Aztec Code
- Code 128
- บัตรห้องสมุดใช้รูปแบบ Codabar ซึ่งใช้กันอย่างแพร่หลายในห้องสมุด
- เครื่องสแกนบาร์โค้ดของห้องสมุดอาจรองรับบาร์โค้ดเชิงเส้นแบบอื่น แต่รูปแบบเดียวที่คาดได้อย่างมั่นใจว่าจะทำงานได้ทุกสาขาคือ Codabar
- สุดท้ายจึงต้องสร้างรูปภาพ Codabar ที่สแกนได้ แล้วใส่ไว้ใน pass แทนการใช้ฟังก์ชันบาร์โค้ดพื้นฐานของ Wallet
ปัญหาใบรับรองสำหรับเซ็น pass
- Wallet pass ต้องมีลายเซ็นเข้ารหัส และต้องเซ็นด้วยคีย์ที่หนึ่งในหน่วยงานออกใบรับรองของ Apple เชื่อถือ
- หากเป็นการใช้งานที่ผู้ขายอัปเดต pass อัตโนมัติ เช่น เปลี่ยนเกตหรือเปลี่ยนที่นั่งของตั๋วเครื่องบิน การมีลายเซ็นก็ดูสมเหตุสมผลอยู่บ้าง
- หากเป็นนักพัฒนา Apple จะขอคีย์สำหรับเซ็น pass ได้ค่อนข้างง่าย แต่ไม่คิดจะจ่าย 99 ดอลลาร์ต่อปี เพื่อทำงานนี้
เหตุผลที่แอปสร้าง pass ที่มีอยู่ไม่เหมาะ
- มีแอปออกแบบ pass หลายตัวที่สร้างโดยคนที่เป็นนักพัฒนา Apple อยู่แล้ว แต่ไม่ได้ให้การควบคุมในระดับที่ต้องการ
-
การควบคุมขนาดโลโก้
- Apple อนุญาตให้โลโก้มุมซ้ายบนของ pass สูงได้สูงสุด 50 device-independent pixels
- โลโก้สี่เหลี่ยมจัตุรัสที่วางข้างข้อความดูเหมาะที่สุดที่ความสูงประมาณ 40px
- นักพัฒนาต้องจัดเตรียม
logo.png,logo@2x.png,logo@3x.pngแยกกัน แต่แอปเหล่านี้มักให้เลือกโลโก้เดียวและไม่ให้ควบคุมสเกล
-
พฤติกรรมความสว่างหน้าจอ
- เมื่อเปิด pass ที่มีบาร์โค้ดที่รองรับตามปกติ หน้าจอจะสว่างขึ้นเพื่อให้เครื่องสแกนอ่านได้ชัด
- หากต้องการให้ iOS เพิ่มความสว่างหน้าจอ โดยไม่แสดงบาร์โค้ดที่ใช้งานจริงไม่ได้ จำเป็นต้องจัดการ
pass.jsonโดยตรง - แอปที่ดาวน์โหลดได้ฟรีบางตัวก็จำกัดจำนวน pass ที่บันทึกลง Wallet ได้และเรียกเก็บเงิน
หาคีย์เซ็นจากแอปสร้างแบบออฟไลน์
- ดาวน์โหลดแอปสร้าง pass แบบเริ่มใช้ฟรีหลายตัว แล้วตรวจสอบว่าสร้าง pass แบบออฟไลน์ได้หรือไม่
- จากการทดสอบในโหมดเครื่องบินและปิด Wi‑Fi พบว่าอย่างน้อยหนึ่งแอปสามารถสร้าง pass แบบออฟไลน์ได้
- ไม่เปิดเผยชื่อแอปนั้นโดยตรง เพื่อหลีกเลี่ยงไม่ให้คีย์ถูกเพิกถอน
- กระบวนการง่ายกว่าที่คาด
- เนื่องจาก Mac ที่ใช้ Apple silicon สามารถรันแอป iOS ได้ จึงดาวน์โหลดแอปลงบน Mac
- หาไฟล์
.p12ที่เห็นได้ชัดในบันเดิลแอป iOS ที่ถูกห่อไว้ - ไฟล์ PKCS#12 ต้องใช้รหัสผ่านสำหรับนำเข้า จึงรัน
stringsกับไบนารีหลักเพื่อหาสตริงที่ดูเหมือนรหัสผ่าน
- เมื่อตรวจสอบข้อมูลใบรับรองด้วย
openssl pkcs12issuer ปรากฏเป็น Apple Worldwide Developer Relations Certification Authority - ต้องใช้เชนใบรับรองด้วย และใบรับรองตัวกลางอาจอยู่ในบันเดิลแอป หรือดาวน์โหลดได้จาก URL ในฟิลด์ส่วนขยาย X.509
การจัดเลย์เอาต์ของ pass
- สไตล์ของ pass ต้องเลือกหนึ่งแบบจาก
boarding pass,coupon,event ticket,generic,store card - หากต้องการใส่รูปภาพแนวนอนขนาดใหญ่ จำเป็นต้องใช้เลย์เอาต์ที่รองรับรูป
strip- ตัวเลือกคือ
coupon,event ticket,store card - เลือก store card เพราะรูปแบบใกล้เคียงกับบัตรห้องสมุดจริงที่สุด
- ตัวเลือกคือ
pass.jsonมีค่าต่อไปนี้passTypeIdentifierteamIdentifierformatVersionserialNumberorganizationNamelogoTextdescriptionstoreCardbackgroundColorforegroundColorsharingProhibited
passTypeIdentifierและteamIdentifierต้องตรงกับฟิลด์UIDและOUใน subject ของใบรับรอง Apple ตามลำดับ- แต่ละ pass ที่สร้างด้วย
passTypeIdentifierเดียวกันต้องมีserialNumberที่ไม่ซ้ำกัน - เตรียมรูปภาพตามการใช้งาน
icon.pngเป็นไฟล์บังคับ แต่ไม่แสดงบนตัว passlogo.pngคือโลโก้ที่แสดงมุมซ้ายบน- สร้าง
logo.pngขนาด 40×40,logo@2x.pngขนาด 80×80,logo@3x.pngขนาด 120×120 - คัดลอก
logo@3x.pngเป็นicon.png - ใส่บาร์โค้ดที่สร้างไว้ล่วงหน้าใน
strip.png
สร้างรูปภาพบาร์โค้ด Codabar
- iOS จะสเกลและครอป
strip.pngให้พอดีกับกล่องบนหน้าจออุปกรณ์ ดังนั้นจึงไม่จำเป็นต้องสร้างstrip.png3 แบบตามความละเอียด - บัตรห้องสมุดทั้งสองใบใช้ A และ D เป็นสัญลักษณ์เริ่มต้นและสิ้นสุด
- สัญลักษณ์เริ่มต้นและสิ้นสุดตรวจสอบได้ง่ายที่สุดถ้ามีเครื่องสแกนบาร์โค้ด หรือถ้าไม่มี ก็เทียบด้วยตากับตารางการเข้ารหัส Codabar บน Wikipedia ได้
- ตัวสร้าง Codabar ที่ใช้งานได้ทันทีบนออนไลน์มีไม่มาก แต่ตัวรูปแบบเองเขียนใช้งานเองได้ง่าย
- ในต้นแบบ ใช้ไลบรารี Barcoders สำหรับ Rust สร้าง SVG จากนั้นปรับ SVG แล้วส่งออกเป็น PNG
- เลย์เอาต์สุดท้ายกำหนดโดยคำนึงถึงความสามารถในการสแกนและการแสดงผลแบบย่อของ iOS
- ตั้งความสูงบาร์โค้ดเป็นหน่วย 2 เท่าของจำนวนสัญลักษณ์ทั้งหมดรวมสัญลักษณ์เริ่มต้นและสิ้นสุด
- ตัวอย่างเช่น หมายเลขบาร์โค้ด 13 หลักจะมี 15 สัญลักษณ์ จึงตั้งความสูงเป็น 30 หน่วย
- เว้น quiet space 15 หน่วย ก่อนเริ่มและหลังจบอย่างละด้าน
- เว้น padding 50 หน่วย ด้านบนและล่างของบาร์โค้ดอย่างละด้าน
- ขยายแต่ละหน่วยเป็น 8 พิกเซล เพื่อให้ iOS ย่อรูปภาพเสมอ
- ในตัวอย่างบาร์โค้ด 15 สัญลักษณ์ รูปภาพสุดท้ายสูง 1040 พิกเซล และตัวบาร์โค้ดสูง 240 พิกเซล
- เขียน เชลล์สคริปต์ 69 บรรทัด เพื่อสร้าง BMP ของ Codabar ตามเลย์เอาต์ข้างต้น แล้วแปลงเป็น PNG ด้วย
sips - เมื่อบันทึกผลลัพธ์ของสคริปต์เป็น
strip.pngก็ได้รูปภาพบาร์โค้ดสำหรับใส่ใน pass
การแสดงหมายเลขบาร์โค้ดและทางเลี่ยงเรื่องความสว่างหน้าจอ
- แสดงหมายเลขบาร์โค้ดใต้บาร์โค้ดด้วย
secondaryFieldskey:numberlabel:CARD NUMBERvalue: หมายเลขบัตร
- iOS จะเพิ่มความสว่างหน้าจอเมื่อเลือก pass ที่มีบาร์โค้ด เพื่อช่วยเครื่องสแกน
- Codabar ที่ใส่เป็นรูปภาพอย่างเดียวไม่ทำให้ iOS มองว่ามีบาร์โค้ด
- ระบุ รายการบาร์โค้ดว่าง ที่ระดับบนสุดของ
pass.jsonเพื่อเลี่ยงพฤติกรรมนี้messageเป็นสตริงว่างformatเป็นPKBarcodeFormatCode128messageEncodingเป็นiso-8859-1
- วิธีนี้ไม่แสดงบาร์โค้ดที่ด้านล่างของ pass แต่ยังทำให้ iPhone เพิ่มความสว่างหน้าจอเหมือน pass ที่มีบาร์โค้ด
การเซ็นและแพ็กเกจ
- หลังเตรียมไฟล์ทั้งหมดแล้ว ต้องสร้าง
manifest.json manifest.jsonเป็นอ็อบเจ็กต์ที่มีชื่อไฟล์เป็นคีย์ และเช็กซัม SHA-1 เป็นค่า- ใช้
sha1sumร่วมกับjqเพื่อสร้าง manifest ของไฟล์ PNG และpass.json - เซ็น manifest ด้วยคำสั่ง
openssl smime- ใบรับรองของผู้เซ็น
- private key
- ใบรับรองตัวกลาง Apple WWDR
- อินพุต
manifest.json - เอาต์พุต
signature
- ตัวเลือก
-attimeของopenssl smimeใช้ระบุเวลาที่ต้องการสำหรับการเซ็นได้- ค่าของตัวเลือกเป็น UNIX epoch
- แม้ใบรับรองที่ได้รับจาก Apple หรือค้นพบจะหมดอายุแล้ว ก็ยังเซ็นด้วยเวลานั้นได้
- สุดท้ายบีบอัดไฟล์ต่อไปนี้เป็น ZIP เพื่อสร้าง
.pkpass- รูปภาพ PNG
pass.jsonmanifest.jsonsignature
ผลการทดสอบและสิ่งที่ยังน่าเสียดาย
- macOS มีเครื่องมือพรีวิว pass ที่ใช้ตรวจสอบว่า pass ใช้ได้และโดยรวมแสดงผลถูกต้องหรือไม่
- หากไม่ถูกต้อง สามารถหา error ได้ใน
Console.app - เครื่องมือพรีวิวไม่ได้แม่นยำ 100% แต่มีปุ่มส่งไปยัง iPhone ผ่าน iCloud
- pass ที่เสร็จแล้วนี้ยังไม่ได้ทดสอบในห้องสมุดจริง
- เครื่องสแกนบาร์โค้ดแยกต่างหากสามารถอ่านบาร์โค้ดบนหน้าจอโทรศัพท์ได้เหมือนกับบัตรพลาสติกจริง
- อย่างไรก็ตาม จะอ่านได้ดีเมื่อปรับความสว่างหน้าจอไปที่สูงสุด
- ตั้งความสว่างไว้สูงกว่าความสว่างที่เพิ่มขึ้นจากทางเลี่ยงบาร์โค้ดว่าง
- เป็นเรื่องดีที่สเปกของ pass แทบไม่เปลี่ยนในช่วง 10 ปี แต่ก็น่าเสียดายที่การเซ็น pass ที่ไม่เป็นอันตรายซึ่งประกอบด้วย PNG และ JSON ต้องใช้ Apple Developer Membership ราคา 99 ดอลลาร์ต่อปี
- อาจถือได้ว่าฟีเจอร์บางอย่างของ pass จำเป็นต้องมีลายเซ็น แต่สิ่งที่ทำในงานนี้ไม่ควรจำเป็นต้องมีลายเซ็น
- หาก Apple เพิ่ม การรองรับ Codabar ให้ Wallet ก็จะรองรับบัตรห้องสมุดดิจิทัลได้โดยไม่ต้องตรวจสอบว่าเครื่องสแกนทั้งระบบห้องสมุดรองรับ Code 128 หรือไม่
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ครั้งหน้าหวังว่าจะพูดถึง บัตร ORCA ด้วย Seattle เป็นหนึ่งในศูนย์กลางเทคโนโลยีของสหรัฐฯ แต่รถไฟใต้ดิน/ขนส่งสาธารณะเองก็ไม่ค่อยดีอยู่แล้ว แถมในเชิงเทคนิคยังล้าหลังกว่าระบบขนส่งสาธารณะของเมืองใหญ่แทบทุกเมืองที่ผมเคยใช้
เทียบกับเมืองไหนก็ได้ในยุโรป, CDMX, Denver ก็ล้ำหน้า Seattle ไปมาก และโดยส่วนตัวคิดว่า Denver น่าจะดีที่สุด
หน่วยงานหนึ่งที่ดูแล ORCA เคยลงบล็อกว่าจะเพิ่มการรองรับ NFC ในแอป Android แต่บทความนั้นหายไปแล้ว และผ่านมาหลายปีก็ยังไม่มีฟีเจอร์นั้น
ถ้าใช้บัตรใบเดิมตลอด ระบบจะจัดการเรื่องการเปลี่ยนสาย พาสหลายวัน และอื่น ๆ ได้อย่างลื่นไหล และจะคิดค่าโดยสารที่ถูกต้องให้อัตโนมัติ เช่น ถ้านั่งเกินจำนวนครั้งที่กำหนดภายในช่วงเวลาหนึ่งก็จะไม่คิดเงินเพิ่ม
ประตูออฟฟิศผมเปิดด้วยบัตร NFC เลยลองหาดูว่าทำบน iOS ได้ไหม แต่เท่าที่จำได้ Apple ควบคุมฮาร์ดแวร์ NFC เข้มงวดกว่า PassKit ทั่วไป จึงไม่น่าทำได้ด้วยแอปทั่วไป
ORCA บอกว่าการจ่ายแบบแตะจะมาในปี 2023 ดังนั้นถ้าจะให้เป็นจริงก็เหลืออีกประมาณสองเดือน
Google โพสต์ว่า Google Wallet จะรองรับ ORCA เร็ว ๆ นี้ เลยยังมองในแง่ดีอยู่
ถ้าเป็นผู้ใช้ Android ที่ไม่ชอบเพราะ Google Wallet ใส่บาร์โค้ดอะไรก็ได้แบบ Apple Passbook ไม่ได้ บน F-Droid มีแอปดี ๆ ชื่อ Loyalty Card Keychain: https://f-droid.org/en/packages/protect.card_locker/
สามารถกรอกตัวเลขเองหรือสแกนบาร์โค้ดที่มีอยู่ แล้วเลือกบันทึกเป็นรูปแบบบาร์โค้ดได้หลายแบบ รวมถึง Codabar เมื่อแตะรายการในหน้าหลักของแอป ก็จะแสดงบาร์โค้ดที่สร้างขึ้นและเพิ่มความสว่างหน้าจอให้ด้วย
อาจเพราะมันแทบไม่ทำอะไรนอกจากแสดงบาร์โค้ด แอปจึงเปิดได้เร็วมาก ฟีเจอร์มีแค่อย่างเดียว แต่บางทีอาจเป็นแอปที่ผมชอบที่สุดก็ได้
ช่วงนี้ดูเหมือนจะแนะนำให้ใช้ Catima กัน ลองใช้ครู่หนึ่งแล้วก็เรียบง่ายคล้ายกัน และดูเหมือนอิงจาก codebase เดียวกัน
ถึงจะไม่สะดวกนัก แต่ก็ทำได้ตามต้องการ และนโยบายความเป็นส่วนตัวก็ดี
ผมไม่เข้าใจว่าทำไมพาสต้องถูกเซ็นเชิงเข้ารหัส และต้องเซ็นด้วยคีย์ที่หน่วยงานรับรองของ Apple รู้จักจึงจะสมเหตุสมผล สำหรับการใช้งานประเภทอัปเดตแบบนี้ก็มี HTTPS ที่รองรับดีอยู่แล้ว
บางที Apple อาจต้องการให้พาสถูกตรวจสอบได้ไม่ใช่แค่ตอนอัปเดต แต่รวมถึงตอนออฟไลน์บนโทรศัพท์ด้วย ถึงอย่างนั้นก็ยังแปลกอยู่ดี ผู้ไม่หวังดีสามารถสับเปลี่ยนพาสทั้งใบแทนที่จะอัปเดตพาส
ผมไม่เห็นเลยว่าการผูกกับบัญชีนักพัฒนา Apple จะช่วยเรื่องการอัปเดตอย่างไร
เหตุผลที่พอนึกออกสำหรับข้อกำหนดว่าต้องเป็นผู้ที่ Apple อนุมัติ ก็คือการขายตั๋วปลอม แต่ไฟล์ pkpass ที่ชื่อ “ตั๋วคอนเสิร์ต X” จะเป็นของจริงหรือไม่นั้น ต่อให้มีข้อกำหนดนี้หรือไม่ก็ไม่มีทางรู้ได้
อาจเป็นความพยายามรับมือโดยยกเลิกบัญชีนักพัฒนานั้นเมื่อมีรายงานการฉ้อโกงเข้ามา แต่แบบนี้ก็ดูไม่ใช่ทางแก้ ค่าใช้จ่ายของบัญชีนักพัฒนาน่าจะถูกกว่าเงินที่ทำได้จากการโกงก่อนถูกจับได้มาก
ผมก็แค่ส่ง ไฟล์ PNG บาร์โค้ด ที่มีหมายเลขบัตรห้องสมุดให้ตัวเองทางอีเมล แล้วเปิดด้วยแอป Photos หรือ Gmail ตอนอยู่หน้าตู้คีออสก์
ผมใช้แอป MakePass สร้างพาสที่ใส่โค้ดสมาชิก StarBucks ไว้ พอไปใกล้ร้านที่ไปบ่อย โทรศัพท์ก็จะแนะนำพาส StarBucks บนหน้าจอล็อกให้อัตโนมัติ
ตั๋วอีเวนต์ก็เหมือนกัน ถ้ากำหนดตำแหน่งและช่วงเวลาไว้ เมื่อไปถึงหน้างาน ระบบจะแนะนำพาสให้อัตโนมัติโดยไม่ต้องไล่หา พออีเวนต์จบก็จะไม่แนะนำอีก และย้ายไปอยู่ในส่วน “Expired Passes” เพื่อไม่ให้รกหน้าจอหลัก
MakePass: https://pvieito.com
เป็นบล็อกโพสต์ที่ดี แต่ตอนท้ายจบด้วยว่า “ยังไม่ได้ทดสอบพาสนี้ในห้องสมุดจริง”
ผมเข้าใจว่าเป็นโปรเจกต์ทำเล่น ๆ แต่ไม่เข้าใจว่าทำไมถึงไม่ใช้เวลา 10 นาที ที่จำเป็นในการทดสอบวิธีแก้ขั้นสุดท้ายก่อนแชร์ผลงาน
ตอนสร้างบาร์โค้ด โดยส่วนตัวแล้วชอบ ตัวสร้างบาร์โค้ดที่เขียนด้วย PostScript
https://bwipp.terryburton.co.uk/
ปัญหานี้แก้ด้วยการถ่ายรูปบัตรห้องสมุดไว้ เวลา借หนังสือก็เปิดรูปแล้วเอาไปจ่อกับสแกนเนอร์ได้เลย
เก็บบัตรประจำตัวทั้งหมดไว้ในอัลบั้มรูปของโทรศัพท์
ถ้าอยากทำอะไรคล้าย ๆ กันบน Android มี Catima ใน Google Play และ F-Droid รองรับบาร์โค้ดหลายประเภท
https://catima.app/
สแกนเนอร์บาร์โค้ด 1 มิติ แบบเลเซอร์ราคาถูกอ่านบาร์โค้ดจากหน้าจอไม่ได้ eInk อาจจะได้
บัตรสมาชิกของซูเปอร์มาร์เก็ตที่ไปบ่อยเป็นแบบบาร์โค้ดเลยไม่สะดวก แต่โชคดีที่เครื่องอ่านบาร์โค้ดเลียนแบบคีย์บอร์ด ดังนั้นจึงพิมพ์โค้ดด้วยคีย์บอร์ดได้เลย
สแกนเนอร์แบบกล้องไม่สนว่าแสงที่ส่องบาร์โค้ดจะเป็นแสงรอบข้าง ไฟ LED ของตัวเอง หรือหน้าจอมีแบ็กไลต์ แต่ระบบแบบเลเซอร์พึ่งพาแสงสะท้อนจากแสงของตัวเอง จึงใช้กับหน้าจอที่มีแบ็กไลต์แบบแอ็กทีฟไม่ได้เลย
สงสัยว่าใช้กับ e-ink หรือจอ LCD แบบพาสซีฟได้ไหม
มองเผิน ๆ เหมือนเป็นแบบ 2D เส้นสีแดงธรรมดา ๆ แต่ดูเหมือนว่าฮาร์ดแวร์ก็สำคัญจริง ๆ
เลขบัญชี KCLS ผมจำเอาเลย น่าจะใช้เวลาจำแค่ประมาณ 30 วินาทีพอ แม้จะแล้วแต่คน แต่คิดว่าวิธีนี้น่าจะเร็วกว่า
หลังจากนั้นก็แค่ป้อน เลขบัญชี แทนการสแกนบาร์โค้ด และมีโอกาสใช้เวลาน้อยกว่าการหยิบโทรศัพท์ออกมาเตรียมด้วยซ้ำ
ไม่รู้ว่า SPL ใช้วิธีเดียวกันไหม ไม่ได้อยู่ใน Seattle เลยตรวจสอบไม่ได้